30 #include "StMessMgr.h"
32 #include "StMessMgr.h"
34 #include "StCentralityMaker/StCentralityMaker.h"
35 #include "StCentralityMaker/StNegativeBinomial.h"
36 #include "StGlauberTree/StGlauberTree.h"
37 #include "StGlauberUtilities/StGlauberUtilities.h"
38 #include "StFastGlauberMcMaker.h"
49 : mEnergy(200), mOutputFileName("fastglaubermc.root"),
50 mInelasticNNCrossSection(4.2)
53 const UInt_t A = 197 ;
54 const Double_t R = 6.38 ;
55 const Double_t d = 0.535 ;
58 mIsDeformed[0] = kFALSE ;
59 mIsDeformed[1] = kFALSE ;
61 Init(A, R, d, 0.0, 0.0, A, R, d, 0.0, 0.0);
66 const TString outputFileName,
68 const Double_t energy,
70 const Bool_t isDeformed
72 : mEnergy(energy), mOutputFileName(outputFileName),
73 mInelasticNNCrossSection(GetInelasticNNCrossSection(mEnergy, type))
77 mIsDeformed[0] = isDeformed ;
78 mIsDeformed[1] = isDeformed ;
81 if ( system.CompareTo(
"auau", TString::kIgnoreCase) == 0 ){
82 LOG_INFO <<
"StFastGlauberMcMaker Initialize AuAu collisions" << endm;
85 else if ( system.CompareTo(
"smsm", TString::kIgnoreCase) == 0 ){
86 LOG_INFO <<
"StFastGlauberMcMaker Initialize SmSm collisions" << endm;
89 else if ( system.CompareTo(
"uu", TString::kIgnoreCase) == 0 ){
90 LOG_INFO <<
"StFastGlauberMcMaker Initialize UU collisions" << endm;
93 else if ( system.CompareTo(
"pbpb", TString::kIgnoreCase) == 0 ){
94 LOG_INFO <<
"StFastGlauberMcMaker Initialize PbPb collisions" << endm;
97 else if ( system.CompareTo(
"cucu", TString::kIgnoreCase) == 0 ){
98 LOG_INFO <<
"StFastGlauberMcMaker Initialize CuCu collisions" << endm;
101 else if ( system.CompareTo(
"zrzr_case1", TString::kIgnoreCase) == 0 ){
102 LOG_INFO <<
"StFastGlauberMcMaker Initialize ZrZr_Case1 collisions" << endm;
105 else if ( system.CompareTo(
"ruru_case1", TString::kIgnoreCase) == 0 ){
106 LOG_INFO <<
"StFastGlauberMcMaker Initialize RuRu_Case1 collisions" << endm;
109 else if ( system.CompareTo(
"zrzr_case2", TString::kIgnoreCase) == 0 ){
110 LOG_INFO <<
"StFastGlauberMcMaker Initialize ZrZr_Case2 collisions" << endm;
113 else if ( system.CompareTo(
"ruru_case2", TString::kIgnoreCase) == 0 ){
114 LOG_INFO <<
"StFastGlauberMcMaker Initialize RuRu_Case2 collisions" << endm;
117 else if ( system.CompareTo(
"zrzr_case3", TString::kIgnoreCase) == 0 ){
118 LOG_INFO <<
"StFastGlauberMcMaker Initialize ZrZr_Case3 collisions" << endm;
121 else if ( system.CompareTo(
"ruru_case3", TString::kIgnoreCase) == 0 ){
122 LOG_INFO <<
"StFastGlauberMcMaker Initialize RuRu_Case3 collisions" << endm;
126 Error(
"StFastGlauberMcMaker",
"Unknown system %s. abort", system.Data());
133 const TString outputFileName,
134 const UInt_t massNumber,
135 const Double_t radius,
136 const Double_t skinDepth,
137 const Double_t beta2,
138 const Double_t beta4,
139 const Double_t inelasticCrossSection,
140 const Double_t energy
142 : mEnergy(energy), mOutputFileName(outputFileName),
143 mInelasticNNCrossSection(inelasticCrossSection)
148 mIsDeformed[0] = kFALSE ;
149 mIsDeformed[1] = kFALSE ;
150 if(beta2 != 0.0 || beta4 != 0.0 ){
151 mIsDeformed[0] = kTRUE ;
152 mIsDeformed[1] = kTRUE ;
156 Init(massNumber, radius, skinDepth, beta2, beta4, massNumber, radius, skinDepth, beta2, beta4) ;
161 const TString outputFileName,
162 const UInt_t massNumberA,
163 const Double_t radiusA,
164 const Double_t skinDepthA,
165 const Double_t beta2A,
166 const Double_t beta4A,
167 const UInt_t massNumberB,
168 const Double_t radiusB,
169 const Double_t skinDepthB,
170 const Double_t beta2B,
171 const Double_t beta4B,
172 const Double_t inelasticCrossSection,
173 const Double_t energy
175 : mEnergy(energy), mOutputFileName(outputFileName),
176 mInelasticNNCrossSection(inelasticCrossSection)
181 mIsDeformed[0] = kFALSE ;
182 mIsDeformed[1] = kFALSE ;
183 if( beta2A != 0.0 || beta4A != 0.0 ) mIsDeformed[0] = kTRUE ;
184 if( beta2B != 0.0 || beta4B != 0.0 ) mIsDeformed[1] = kTRUE ;
187 Init(massNumberA, radiusA, skinDepthA, beta2A, beta4A, massNumberB, radiusB, skinDepthB, beta2B, beta4B) ;
199 mRepulsionDistance = repulsionDistance ;
200 LOG_INFO <<
"StFastGlauberMcMaker::SetRepulsionDistance Set repulsion distance between two nucleons, d = "
201 << mRepulsionDistance <<
" fm"
206 Int_t StFastGlauberMcMaker::Clear()
208 mGlauberTree->
Clear() ;
210 for(UInt_t in=0;in<2;in++){
211 for(UInt_t i=0;i<mNucleons[in].size();i++){
212 mNucleons[in][i]->Reset() ;
220 Int_t StFastGlauberMcMaker::InitTree()
229 mGlauberTree->
Open(mOutputFileName) ;
232 for(Int_t in=0;in<4;in++){
234 if( in % 2 == 1 )
nucleus =
"Target";
236 TString title(Form(
"Woods-saxon density profile (%s)",
nucleus.Data()));
237 if(in>=2) title = Form(
"Woods-saxon density profile after repulsion (%s)",
nucleus.Data());
239 mhWoodsSaxon[in] =
new TH1D(Form(
"hWoodsSaxon_%d", in), title, 400, 0, 20);
240 mhWoodsSaxon[in]->SetXTitle(
"r (fm)");
244 mGlauberTree->
Sort();
250 Int_t StFastGlauberMcMaker::Init(
251 const UInt_t massNumberA,
252 const Double_t radiusA,
253 const Double_t skinDepthA,
254 const Double_t beta2A,
255 const Double_t beta4A,
256 const UInt_t massNumberB,
257 const Double_t radiusB,
258 const Double_t skinDepthB,
259 const Double_t beta2B,
260 const Double_t beta4B,
263 LOG_INFO <<
"StFastGlauberMcMaker::Init Inelastic N-N cross section = "
264 << mInelasticNNCrossSection * 10.0 <<
" mb"
265 <<
" for sqrt(sNN) = " << mEnergy <<
" (GeV)"
274 const Char_t* system(Form(
"%s%s_%dGeV", GetName(massNumberA), GetName(massNumberB),
275 static_cast<Int_t>(mEnergy))) ;
276 LOG_INFO <<
"StFastGlauberMcMaker::init Initialize system " << system << endm;
280 mRepulsionDistance = 0.0 ;
282 mHardCoreSmearing = kFALSE ;
283 mGaussianSmearing = kFALSE ;
285 mCollisionProfile = mkHardCoreProfile ;
286 if ( type.CompareTo(
"gauss", TString::kIgnoreCase) == 0 ){
291 const Double_t dmaxh = TMath::Sqrt(mInelasticNNCrossSection/TMath::Pi());
292 mfHardCore =
new TF3(
"fHardCore", GlauberUtilities::StepFunction, -dmaxh, dmaxh, -dmaxh, dmaxh, -dmaxh, dmaxh, 1);
293 mfHardCore->SetParameter(0, mInelasticNNCrossSection);
296 LOG_INFO <<
"StFastGlauberMcMaker::Init Initialize hard-core smearing function (will be used only if hard-core smearing is ON)"
301 const Double_t sigma = 0.79/TMath::Sqrt(3.0) ;
302 const Double_t dmaxg = sigma*5.0 ;
303 mfGaussian =
new TF3(
"fGaussian", GlauberUtilities::Gaussian, -dmaxg, dmaxg, -dmaxg, dmaxg, -dmaxg, dmaxg, 1);
304 mfGaussian->SetParameter(0, sigma);
307 LOG_INFO <<
"StFastGlauberMcMaker::Init Initialize gaussian smearing function (will be used only if gaussian smearing is ON)"
311 for(UInt_t in=0; in<2; in++){
314 const Bool_t isNoDeformation = (in==0) ? (beta2A==0.0 && beta4A==0.0) : (beta2B==0.0 && beta4B==0.0) ;
315 if( isNoDeformation ){
316 Error(
"StFastGlauberMcMaker::Init",
"No deformation: beta2=beta4=0. abort");
321 mfWoodsSaxon[in] = 0 ;
323 mfWoodsSaxon2D[in] =
new TF2(Form(
"fWoodsSaxon2D_%d", in), GlauberUtilities::WoodsSaxon2D, 0, 20, -1.0, 1.0, 4);
324 mfWoodsSaxon2D[in]->SetParName(0,
"Radius");
325 mfWoodsSaxon2D[in]->SetParName(1,
"Skin depth");
326 mfWoodsSaxon2D[in]->SetParName(2,
"#beta_{2}");
327 mfWoodsSaxon2D[in]->SetParName(3,
"#beta_{4}");
333 mfWoodsSaxon2D[in]->SetNpx(200);
334 mfWoodsSaxon2D[in]->SetNpy(200);
337 mfWoodsSaxon2D[in]->SetParameter(0, radiusA) ;
338 mfWoodsSaxon2D[in]->SetParameter(1, skinDepthA) ;
339 mfWoodsSaxon2D[in]->SetParameter(2, beta2A) ;
340 mfWoodsSaxon2D[in]->SetParameter(3, beta4A) ;
343 mfWoodsSaxon2D[in]->SetParameter(0, radiusB) ;
344 mfWoodsSaxon2D[in]->SetParameter(1, skinDepthB) ;
345 mfWoodsSaxon2D[in]->SetParameter(2, beta2B) ;
346 mfWoodsSaxon2D[in]->SetParameter(3, beta4B) ;
349 LOG_INFO <<
"StFastGlauberMcMaker::Init Initialize Deformed Woods-saxon density profile" << endm;
350 for(Int_t ipar=0; ipar<mfWoodsSaxon2D[in]->GetNpar(); ipar++){
351 LOG_INFO <<
"StFastGlauberMcMaker::Init par[" << ipar <<
"] = " << mfWoodsSaxon2D[in]->GetParameter(ipar)
352 <<
", parName = " << mfWoodsSaxon2D[in]->GetParName(ipar)
359 mfWoodsSaxon2D[in] = 0 ;
361 mfWoodsSaxon[in] =
new TF1(Form(
"fWoodsSaxon_%d", in), GlauberUtilities::WoodsSaxon, 0, 20, 2);
362 mfWoodsSaxon[in]->SetParName(0,
"Radius");
363 mfWoodsSaxon[in]->SetParName(1,
"Skin depth");
365 mfWoodsSaxon[in]->SetParameter(0, radiusA) ;
366 mfWoodsSaxon[in]->SetParameter(1, skinDepthA) ;
369 mfWoodsSaxon[in]->SetParameter(0, radiusB) ;
370 mfWoodsSaxon[in]->SetParameter(1, skinDepthB) ;
373 LOG_INFO <<
"StFastGlauberMcMaker::Init Initialize Spherical Woods-saxon density profile" << endm;
374 for(Int_t ipar=0; ipar<mfWoodsSaxon[in]->GetNpar(); ipar++){
375 LOG_INFO <<
"StFastGlauberMcMaker::Init par[" << ipar <<
"] = " << mfWoodsSaxon[in]->GetParameter(ipar)
376 <<
", parName = " << mfWoodsSaxon[in]->GetParName(ipar)
382 mNucleons[in].clear() ;
383 const UInt_t A = (in==0) ? massNumberA : massNumberB ;
384 LOG_INFO <<
"StFastGlauberMcMaker::Init Initialize " << A <<
" nucleons ..." << endm;
386 for(UInt_t i=0;i<A;i++){
387 mNucleons[in].push_back(
new Nucleon() ) ;
398 Int_t StFastGlauberMcMaker::InitAuAu(
const TString type)
401 const UInt_t A = 197 ;
402 const Double_t R = 6.38 ;
403 const Double_t d = 0.535 ;
409 Double_t RError = 0.0 ;
410 Double_t dError = 0.0 ;
413 Double_t beta2 = 0.0 ;
414 Double_t beta4 = 0.0 ;
418 if( mIsDeformed[0] || mIsDeformed[1] ){
419 LOG_INFO <<
"StFastGlauberMcMaker::InitAuAu Set deformation for Au nuclei" << endm ;
428 if ( type.CompareTo(
"large", TString::kIgnoreCase) == 0 ){
429 LOG_INFO <<
"StFastGlauberMcMaker::InitAuAu Set large R, small d" << endm;
435 else if ( type.CompareTo(
"small", TString::kIgnoreCase) == 0 ){
436 LOG_INFO <<
"StFastGlauberMcMaker::InitAuAu Set small R, large d" << endm;
442 else if ( type.CompareTo(
"gauss", TString::kIgnoreCase) == 0 ){
443 LOG_INFO <<
"StFastGlauberMcMaker::InitAuAu Gaussian collision profile" << endm;
446 else if ( type.CompareTo(
"smallNpp", TString::kIgnoreCase) == 0 ){
448 LOG_INFO <<
"StFastGlauberMcMaker::InitAuAu Use small npp, large x for multiplicity (mMode = "
452 else if ( type.CompareTo(
"largeNpp", TString::kIgnoreCase) == 0 ){
454 LOG_INFO <<
"StFastGlauberMcMaker::InitAuAu Use large npp, small x for multiplicity (mMode = "
459 return Init(A, R+RError, d+dError, beta2, beta4, A, R+RError, d+dError, beta2, beta4, type);
463 Int_t StFastGlauberMcMaker::InitSmSm(
const TString type)
472 const UInt_t A = (mIsDeformed) ? 154 : 144 ;
475 const Double_t R = (mIsDeformed) ? 5.9387 : 5.9387 ;
476 const Double_t d = (mIsDeformed) ? 0.522 : 0.522 ;
477 Double_t RError = 0.0 ;
478 Double_t dError = 0.0 ;
481 Double_t beta2 = 0.0 ;
482 Double_t beta4 = 0.0 ;
487 LOG_INFO <<
"StFastGlauberMcMaker::InitSmSm Set deformation for Sm nuclei" << endm ;
497 if ( type.CompareTo(
"large", TString::kIgnoreCase) == 0 ){
498 LOG_INFO <<
"StFastGlauberMcMaker::InitSmSm Set large R, small d" << endm;
502 else if ( type.CompareTo(
"small", TString::kIgnoreCase) == 0 ){
503 LOG_INFO <<
"StFastGlauberMcMaker::InitSmSm Set small R, large d" << endm;
507 else if ( type.CompareTo(
"gauss", TString::kIgnoreCase) == 0 ){
508 LOG_INFO <<
"StFastGlauberMcMaker::InitSmSm Gaussian collision profile" << endm;
511 else if ( type.CompareTo(
"smallNpp", TString::kIgnoreCase) == 0 ){
513 LOG_INFO <<
"StFastGlauberMcMaker::InitSmSm Use small npp, large x for multiplicity (mMode = "
517 else if ( type.CompareTo(
"largeNpp", TString::kIgnoreCase) == 0 ){
519 LOG_INFO <<
"StFastGlauberMcMaker::InitSmSm Use large npp, small x for multiplicity (mMode = "
524 return Init(A, R+RError, d+dError, beta2, beta4, A, R+RError, d+dError, beta2, beta4, type);
528 Int_t StFastGlauberMcMaker::InitUU(
const TString type)
531 const UInt_t A = 238 ;
532 const Double_t R = 6.81 ;
533 const Double_t d = 0.55 ;
534 Double_t RError = 0.0 ;
535 Double_t dError = 0.0 ;
538 Double_t beta2 = 0.0 ;
539 Double_t beta4 = 0.0 ;
544 LOG_INFO <<
"StFastGlauberMcMaker::InitUU Set deformation for U nuclei" << endm ;
556 if ( type.CompareTo(
"large", TString::kIgnoreCase) == 0 ){
557 LOG_INFO <<
"StFastGlauberMcMaker::InitUU Set large R, small d" << endm;
561 else if ( type.CompareTo(
"small", TString::kIgnoreCase) == 0 ){
562 LOG_INFO <<
"StFastGlauberMcMaker::InitUU Set small R, large d" << endm;
566 else if ( type.CompareTo(
"gauss", TString::kIgnoreCase) == 0 ){
567 LOG_INFO <<
"StFastGlauberMcMaker::InitUU Gaussian collision profile" << endm;
570 else if ( type.CompareTo(
"smallNpp", TString::kIgnoreCase) == 0 ){
572 LOG_INFO <<
"StFastGlauberMcMaker::InitUU Use small npp, large x for multiplicity (mMode = "
576 else if ( type.CompareTo(
"largeNpp", TString::kIgnoreCase) == 0 ){
578 LOG_INFO <<
"StFastGlauberMcMaker::InitUU Use large npp, small x for multiplicity (mMode = "
583 return Init(A, R+RError, d+dError, beta2, beta4, A, R+RError, d+dError, beta2, beta4, type);
587 Int_t StFastGlauberMcMaker::InitPbPb(
const TString type)
590 const UInt_t A = 208 ;
591 const Double_t R = 6.62 ;
592 const Double_t d = 0.546 ;
593 Double_t RError = 0.0 ;
594 Double_t dError = 0.0 ;
597 Double_t beta2 = 0.0 ;
598 Double_t beta4 = 0.0 ;
603 LOG_INFO <<
"StFastGlauberMcMaker::InitPbPb Set deformation for Pb nuclei" << endl;
608 if ( type.CompareTo(
"large", TString::kIgnoreCase) == 0 ){
609 LOG_INFO <<
"StFastGlauberMcMaker::InitPbPb Set large R, small d" << endm;
613 else if ( type.CompareTo(
"small", TString::kIgnoreCase) == 0 ){
614 LOG_INFO <<
"StFastGlauberMcMaker::InitPbPb Set small R, large d" << endm;
618 else if ( type.CompareTo(
"gauss", TString::kIgnoreCase) == 0 ){
619 LOG_INFO <<
"StFastGlauberMcMaker::InitPbPb Gaussian collision profile" << endm;
622 else if ( type.CompareTo(
"smallNpp", TString::kIgnoreCase) == 0 ){
624 LOG_INFO <<
"StFastGlauberMcMaker::InitPbPb Use small npp, large x for multiplicity (mMode = "
628 else if ( type.CompareTo(
"largeNpp", TString::kIgnoreCase) == 0 ){
630 LOG_INFO <<
"StFastGlauberMcMaker::InitPbPb Use large npp, small x for multiplicity (mMode = "
635 return Init(A, R+RError, d+dError, beta2, beta4, A, R+RError, d+dError, beta2, beta4, type);
639 Int_t StFastGlauberMcMaker::InitCuCu(
const TString type)
642 const UInt_t A = 63 ;
643 const Double_t R = 4.19 ;
644 const Double_t d = 0.60 ;
645 Double_t RError = 0.0 ;
646 Double_t dError = 0.0 ;
649 Double_t beta2 = 0.0 ;
650 Double_t beta4 = 0.0 ;
655 LOG_INFO <<
"StFastGlauberMcMaker::InitCuCu Set deformation for Cu nuclei" << endm ;
661 if ( type.CompareTo(
"large", TString::kIgnoreCase) == 0 ){
662 LOG_INFO <<
"StFastGlauberMcMaker::InitCuCu Set large R, small d" << endm;
666 else if ( type.CompareTo(
"small", TString::kIgnoreCase) == 0 ){
667 LOG_INFO <<
"StFastGlauberMcMaker::InitCuCu Set small R, large d" << endm;
671 else if ( type.CompareTo(
"gauss", TString::kIgnoreCase) == 0 ){
672 LOG_INFO <<
"StFastGlauberMcMaker::InitCuCu Gaussian collision profile" << endm;
675 else if ( type.CompareTo(
"smallNpp", TString::kIgnoreCase) == 0 ){
677 LOG_INFO <<
"StFastGlauberMcMaker::InitCuCu Use small npp, large x for multiplicity (mMode = "
681 else if ( type.CompareTo(
"largeNpp", TString::kIgnoreCase) == 0 ){
683 LOG_INFO <<
"StFastGlauberMcMaker::InitCuCu Use large npp, small x for multiplicity (mMode = "
688 return Init(A, R+RError, d+dError, beta2, beta4, A, R+RError, d+dError, beta2, beta4, type);
692 Int_t StFastGlauberMcMaker::InitZrZr(
const TString type,
int Case)
695 const UInt_t A = 96 ;
698 if(Case==1){R = 5.02 ; d = 0.46 ;}
699 else if(Case==2){R = 5.02 ; d = 0.46 ;}
700 else if(Case==3){R = 4.965 ; d = 0.556 ;}
701 Double_t RError = 0.0 ;
702 Double_t dError = 0.0 ;
705 Double_t beta2 = 0.0 ;
706 Double_t beta4 = 0.0 ;
713 LOG_INFO <<
"StFastGlauberMcMaker::InitZrZr Set deformation for Zr nuclei" << endm ;
714 if(Case==1){beta2 = 0.08 ; beta4 = 0.0 ; }
715 else if(Case==2){beta2 = 0.217 ; beta4 = 0.0 ; }
716 else if(Case==3){beta2 = 0.0 ; beta4 = 0.0 ; }
719 if ( type.CompareTo(
"large", TString::kIgnoreCase) == 0 ){
720 LOG_INFO <<
"StFastGlauberMcMaker::InitZrZr Set large R, small d" << endm;
724 else if ( type.CompareTo(
"small", TString::kIgnoreCase) == 0 ){
725 LOG_INFO <<
"StFastGlauberMcMaker::InitZrZr Set small R, large d" << endm;
729 else if ( type.CompareTo(
"gauss", TString::kIgnoreCase) == 0 ){
730 LOG_INFO <<
"StFastGlauberMcMaker::InitZrZr Gaussian collision profile" << endm;
733 else if ( type.CompareTo(
"smallNpp", TString::kIgnoreCase) == 0 ){
735 LOG_INFO <<
"StFastGlauberMcMaker::InitZrZr Use small npp, large x for multiplicity (mMode = "
739 else if ( type.CompareTo(
"largeNpp", TString::kIgnoreCase) == 0 ){
741 LOG_INFO <<
"StFastGlauberMcMaker::InitZrZr Use large npp, small x for multiplicity (mMode = "
746 return Init(A, R+RError, d+dError, beta2, beta4, A, R+RError, d+dError, beta2, beta4, type);
750 Int_t StFastGlauberMcMaker::InitRuRu(
const TString type,
int Case)
753 const UInt_t A = 96 ;
756 if(Case==1){R = 5.085 ; d = 0.46 ;}
757 else if(Case==2){R = 5.085 ; d = 0.46 ;}
758 else if(Case==3){R = 5.067 ; d = 0.500 ;}
759 Double_t RError = 0.0 ;
760 Double_t dError = 0.0 ;
763 Double_t beta2 = 0.0 ;
764 Double_t beta4 = 0.0 ;
771 LOG_INFO <<
"StFastGlauberMcMaker::InitRuRu Set deformation for Ru nuclei" << endm ;
772 if(Case==1){beta2 = 0.158 ; beta4 = 0.0 ; }
773 else if(Case==2){beta2 = 0.053 ; beta4 = 0.0 ; }
774 else if(Case==3){beta2 = 0.0 ; beta4 = 0.0 ; }
777 if ( type.CompareTo(
"large", TString::kIgnoreCase) == 0 ){
778 LOG_INFO <<
"StFastGlauberMcMaker::InitRuRu Set large R, small d" << endm;
782 else if ( type.CompareTo(
"small", TString::kIgnoreCase) == 0 ){
783 LOG_INFO <<
"StFastGlauberMcMaker::InitRuRu Set small R, large d" << endm;
787 else if ( type.CompareTo(
"gauss", TString::kIgnoreCase) == 0 ){
788 LOG_INFO <<
"StFastGlauberMcMaker::InitRuRu Gaussian collision profile" << endm;
791 else if ( type.CompareTo(
"smallNpp", TString::kIgnoreCase) == 0 ){
793 LOG_INFO <<
"StFastGlauberMcMaker::InitRuRu Use small npp, large x for multiplicity (mMode = "
797 else if ( type.CompareTo(
"largeNpp", TString::kIgnoreCase) == 0 ){
799 LOG_INFO <<
"StFastGlauberMcMaker::InitRuRu Use large npp, small x for multiplicity (mMode = "
804 return Init(A, R+RError, d+dError, beta2, beta4, A, R+RError, d+dError, beta2, beta4, type);
811 Bool_t StFastGlauberMcMaker::IsCollision(
Nucleon* nucleon0,
Nucleon* nucleon1)
const
813 const Double_t dx = nucleon0->GetX() - nucleon1->GetX() ;
814 const Double_t dy = nucleon0->
GetY() - nucleon1->
GetY() ;
815 const Double_t dt = TMath::Sqrt(dx*dx + dy*dy) ;
816 const Double_t cutoff = TMath::Sqrt(mInelasticNNCrossSection/TMath::Pi());
818 switch ( mCollisionProfile ){
820 case mkHardCoreProfile:
822 return dt <= cutoff ;
826 case mkGaussianProfile:
828 const Double_t sigma = cutoff ;
829 const Double_t arg = 0.5*dt/sigma ;
830 return ( StGlauberUtilities::instance()->GetUniform() <= TMath::Exp(-arg*arg) );
835 Error(
"StFastGlauberMcMaker::IsCollision",
"No collision profile specified. see below");
836 LOG_INFO <<
" profile description function" << endm;
837 LOG_INFO <<
" Hard-core profile cut off distance = sqrt(sigma/pi) DoHardCoreCollision()" << endm;
838 LOG_INFO <<
" Gaussian profile sigma of gaussian = sqrt(sigma/pi) DoGaussianCollision()" << endm;
840 LOG_INFO <<
" d: transverse distrance between two nucleons (fm)" << endm;
841 LOG_INFO <<
" sigma: Inelastic N-N cross section (fm^2)" << endm;
859 mGlauberTree->
SetB( impactParameter );
867 for(UInt_t in=0;in<2;in++){
869 const Double_t Theta = (mIsDeformed[in]) ? glauberUtilities->
GetTheta() : 0.0 ;
870 const Double_t Phi = (mIsDeformed[in]) ? glauberUtilities->
GetPhi() : 0.0 ;
871 mGlauberTree->SetTheta(in, Theta);
872 mGlauberTree->SetPhi(in, Phi);
875 const Double_t b = (in==0) ? -impactParameter/2.0 : impactParameter/2.0 ;
877 UInt_t nNucleons = 0 ;
878 while( nNucleons < mNucleons[in].size() ){
880 Double_t theta = 0.0 ;
884 GetRThetaPhi(in, r, theta, phi) ;
886 mhWoodsSaxon[in]->Fill(r, 1.0/(r*r)) ;
888 if( mRepulsionDistance == 0.0 ){
890 mNucleons[in][nNucleons]->Set(r, theta, phi, b, Theta, Phi, kTRUE) ;
896 mNucleons[in][nNucleons]->Set(r, theta, phi, b, Theta, Phi, kTRUE) ;
903 Bool_t isOk = kFALSE ;
905 const Double_t x = r*TMath::Sin(theta)*TMath::Cos(phi) ;
906 const Double_t y = r*TMath::Sin(theta)*TMath::Sin(phi) ;
907 const Double_t z = r*TMath::Cos(theta);
909 Bool_t isOverlap = kFALSE ;
910 for(UInt_t i=0; i<nNucleons; i++){
911 const Double_t x0 = mNucleons[in][i]->GetX() ;
912 const Double_t y0 = mNucleons[in][i]->GetY() ;
913 const Double_t z0 = mNucleons[in][i]->GetZ() ;
914 const Double_t dx = x - x0 ;
915 const Double_t dy = y - y0 ;
916 const Double_t dz = z - z0 ;
919 if( TMath::Sqrt(dx*dx + dy*dy + dz*dz) <= mRepulsionDistance ){
930 GetRThetaPhi(in, r, theta, phi) ;
940 mNucleons[in][nNucleons]->Set(r, theta, phi, b, Theta, Phi, kTRUE) ;
951 for(UInt_t in=0; in<mNucleons[0].size(); in++){
952 Nucleon* nucleon0 = mNucleons[0][in] ;
953 for(UInt_t jn=0; jn<mNucleons[1].size(); jn++){
954 Nucleon* nucleon1 = mNucleons[1][jn] ;
956 if(IsCollision(nucleon0, nucleon1)){
968 if( Ncoll == 0 )
return 0 ;
981 for(Int_t i=0;i<4;i++){
991 for(UInt_t in=0;in<2;in++){
992 for(UInt_t i=0;i<mNucleons[in].size();i++){
993 Nucleon* nucleon = mNucleons[in][i] ;
994 const UInt_t ncoll = nucleon->
GetNcoll() ;
997 sumx[0] += nucleon->
GetXYZ(
"x");
998 sumy[0] += nucleon->
GetXYZ(
"y");
999 sumx2[0] += nucleon->
GetXYZ(
"xx");
1000 sumy2[0] += nucleon->
GetXYZ(
"yy");
1001 sumxy[0] += nucleon->
GetXYZ(
"xy");
1005 sumx[1] += ncoll * nucleon->
GetXYZ(
"x");
1006 sumy[1] += ncoll * nucleon->
GetXYZ(
"y");
1007 sumx2[1] += ncoll * nucleon->
GetXYZ(
"xx");
1008 sumy2[1] += ncoll * nucleon->
GetXYZ(
"yy");
1009 sumxy[1] += ncoll * nucleon->
GetXYZ(
"xy");
1015 sumx[2] += mult * nucleon->
GetXYZ(
"x");
1016 sumy[2] += mult * nucleon->
GetXYZ(
"y");
1017 sumx2[2] += mult * nucleon->
GetXYZ(
"xx");
1018 sumy2[2] += mult * nucleon->
GetXYZ(
"yy");
1019 sumxy[2] += mult * nucleon->
GetXYZ(
"xy");
1027 sumx[3] += nucleon->
GetXYZ(
"x");
1028 sumy[3] += nucleon->
GetXYZ(
"y");
1029 sumx2[3] += nucleon->
GetXYZ(
"xx");
1030 sumy2[3] += nucleon->
GetXYZ(
"yy");
1031 sumxy[3] += nucleon->
GetXYZ(
"xy");
1039 mGlauberTree->SetNpart(Npart) ;
1040 mGlauberTree->SetNcoll(Ncoll) ;
1044 mGlauberTree->SetMultiplicity( nbinomial->
GetMultiplicity(Npart, Ncoll) );
1047 for(UInt_t i=0;i<4;i++){
1048 if(nSum[i]==0.0) continue ;
1050 sumx[i] /= nSum[i] ;
1051 sumy[i] /= nSum[i] ;
1052 sumx2[i] /= nSum[i] ;
1053 sumy2[i] /= nSum[i] ;
1054 sumxy[i] /= nSum[i] ;
1056 mGlauberTree->SetSumX(i, sumx[i]);
1057 mGlauberTree->SetSumY(i, sumy[i]);
1058 mGlauberTree->SetSumX2(i, sumx2[i]);
1059 mGlauberTree->SetSumY2(i, sumy2[i]);
1060 mGlauberTree->SetSumXY(i, sumxy[i]);
1063 const Double_t sigmaX2 = sumx2[i] - sumx[i]*sumx[i] ;
1064 const Double_t sigmaY2 = sumy2[i] - sumy[i]*sumy[i] ;
1065 const Double_t sumSigma = sigmaX2 + sigmaY2 ;
1066 Double_t eccRP2 = -9999. ;
1067 Double_t eccPP2 = -9999. ;
1068 Double_t eccPP3 = -9999. ;
1069 Double_t eccPP4 = -9999. ;
1070 Double_t PP2 = -9999. ;
1071 Double_t PP3 = -9999. ;
1072 Double_t PP4 = -9999. ;
1074 if( sumSigma == 0.0 ){
1088 eccRP2 = (sigmaY2-sigmaX2)/sumSigma ;
1093 for(Int_t io=0; io<3; io++){
1094 const Double_t order = io + 2.0 ;
1095 TGraph* qpart = GetParticipantEccentricity(order, sumx[i], sumy[i], nSum[i], i);
1096 if( io == 0 ) { PP2 = qpart->GetY()[2] ; eccPP2 = qpart->GetY()[3] ; }
1097 if( io == 1 ) { PP3 = qpart->GetY()[2] ; eccPP3 = qpart->GetY()[3] ; }
1098 if( io == 2 ) { PP4 = qpart->GetY()[2] ; eccPP4 = qpart->GetY()[3] ; }
1103 mGlauberTree->SetEccRP2(i, eccRP2);
1104 mGlauberTree->SetEccPP2(i, eccPP2);
1105 mGlauberTree->SetEccPP3(i, eccPP3);
1106 mGlauberTree->SetEccPP4(i, eccPP4);
1107 mGlauberTree->SetPP2(i, PP2);
1108 mGlauberTree->SetPP3(i, PP3);
1109 mGlauberTree->SetPP4(i, PP4);
1118 LOG_INFO <<
"StFastGlauberMcMaker::Run Run " << nevents <<
" events ..." << endm;
1120 while( mNeventsAccept < nevents ){
1123 if ( mNeventsAccept % 100 == 0 ){
1124 LOG_INFO << Form(
"StFastGlauberMcMaker::Run (accept/throw, Npart, Ncoll, b) = (%5d/%5d, %4d, %4d, %1.2f fm)",
1125 mNeventsAccept, mNeventsThrow, mGlauberTree->GetNpart(), mGlauberTree->GetNcoll(),
1126 mGlauberTree->GetB())
1131 LOG_INFO << Form(
"StFastGlauberMcMaker::Run (accept/throw, Npart, Ncoll, b) = (%5d/%5d, %4d, %4d, %1.2f fm)",
1132 mNeventsAccept, mNeventsThrow, mGlauberTree->GetNpart(), mGlauberTree->GetNcoll(),
1133 mGlauberTree->GetB())
1138 mGlauberTree->
Fill() ;
1155 const UInt_t A[2] = {mNucleons[0].size(), mNucleons[0].size()};
1156 mGlauberTree->SetNameNucleusA(GetName(A[0]));
1157 mGlauberTree->SetNameNucleusB(GetName(A[1]));
1160 mGlauberTree->SetMassNumberA(A[0]);
1161 mGlauberTree->SetMassNumberB(A[1]);
1164 mGlauberTree->SetRadiusA((mIsDeformed[0]) ? mfWoodsSaxon2D[0]->GetParameter(0) : mfWoodsSaxon[0]->GetParameter(0));
1165 mGlauberTree->SetRadiusB((mIsDeformed[1]) ? mfWoodsSaxon2D[1]->GetParameter(0) : mfWoodsSaxon[1]->GetParameter(0));
1168 mGlauberTree->SetSkinDepthA((mIsDeformed[0]) ? mfWoodsSaxon2D[0]->GetParameter(1) : mfWoodsSaxon[0]->GetParameter(1));
1169 mGlauberTree->SetSkinDepthB((mIsDeformed[1]) ? mfWoodsSaxon2D[1]->GetParameter(1) : mfWoodsSaxon[1]->GetParameter(1));
1173 mGlauberTree->SetBeta2A(mfWoodsSaxon2D[0]->GetParameter(2));
1174 mGlauberTree->SetBeta4A(mfWoodsSaxon2D[0]->GetParameter(3));
1177 mGlauberTree->SetBeta2A(mfWoodsSaxon2D[1]->GetParameter(2));
1178 mGlauberTree->SetBeta4A(mfWoodsSaxon2D[1]->GetParameter(3));
1182 mGlauberTree->SetSigmaNN( mInelasticNNCrossSection * 10.0 ) ;
1183 mGlauberTree->SetSqrtSNN( mEnergy ) ;
1186 mGlauberTree->SetRepulsionD(mRepulsionDistance);
1189 Double_t totalX = 0.0 ;
1190 Double_t totalXError = 0.0 ;
1193 if( mNeventsAccept != 0 ){
1194 const Double_t scaleFactor = TMath::Pi() * bmax * bmax * 10.0 ;
1195 totalX = (Double_t)mNeventsAccept / (Double_t)mNeventsThrow * scaleFactor ;
1196 totalXError = totalX * TMath::Sqrt(1.0/mNeventsAccept + 1.0/mNeventsThrow) ;
1198 mGlauberTree->SetTotalXsec(totalX) ;
1199 mGlauberTree->SetTotalXsecError(totalXError) ;
1204 mGlauberTree->SetSmearHardCore(mHardCoreSmearing);
1205 mGlauberTree->SetSmearGaussian(mGaussianSmearing);
1208 UInt_t collisionHardCore = (mCollisionProfile==mkHardCoreProfile) ? 1 : 0 ;
1209 UInt_t collisionGaussian = (mCollisionProfile==mkGaussianProfile) ? 1 : 0 ;
1210 mGlauberTree->SetCollisionHardCore(collisionHardCore);
1211 mGlauberTree->SetCollisionGaussian(collisionGaussian);
1214 mGlauberTree->SetBMax(bmax);
1217 mGlauberTree->SetNeventsAccept(mNeventsAccept);
1218 mGlauberTree->SetNeventsThrow(mNeventsThrow);
1222 mGlauberTree->SetNpp( nb->GetNpp() );
1223 mGlauberTree->SetK( nb->
GetK() );
1224 mGlauberTree->SetX( nb->
GetX() );
1229 mGlauberTree->SetVersion(mVersion);
1232 LOG_INFO <<
"StFastGlauberMcMaker::Finish Close ROOT file" << endm;
1233 mGlauberTree->
Close();
1241 mHardCoreSmearing = kTRUE ;
1242 LOG_INFO <<
"StFastGlauberMcMaker::DoHardCoreSmearing Hard-core smearing in (x,y,z) ";
1243 LOG_INFO <<
"by using the step function with inelastic nn cross section" << endm;
1246 mGaussianSmearing = kFALSE ;
1248 LOG_INFO <<
"StFastGlauberMcMaker::DoHardCoreSmearing Gaussian smearing turned off" << endm;
1255 mGaussianSmearing = kTRUE ;
1256 LOG_INFO <<
"StFastGlauberMcMaker::DoGaussianSmearing gaussian smearing in (x,y,z) ";
1257 LOG_INFO <<
"by using the gaussian function with fixed sigma" << endm;
1260 mHardCoreSmearing = kFALSE ;
1262 LOG_INFO <<
"StFastGlauberMcMaker::DoGaussianSmearing hard-core smearing turned off" << endm;
1270 mCollisionProfile = mkHardCoreProfile ;
1271 LOG_INFO <<
"StFastGlauberMcMaker::DoHardCoreCollision hard-core n-n collision "
1272 <<
" cut off distance is sqrt(sigma/pi) = " << TMath::Sqrt(mInelasticNNCrossSection/TMath::Pi())
1280 mCollisionProfile = mkGaussianProfile ;
1281 LOG_INFO <<
"StFastGlauberMcMaker::DoGaussianCollision gaussian profile n-n collision "
1282 <<
" sigma of gaussian is sqrt(sigma/pi) = " << TMath::Sqrt(mInelasticNNCrossSection/TMath::Pi())
1291 const Char_t* StFastGlauberMcMaker::GetName(
const UInt_t massNumber)
const
1293 switch ( massNumber ){
1294 case 63:
return "Cu";
1295 case 144:
return "Sm";
1296 case 154:
return "Sm";
1297 case 197:
return "Au";
1298 case 208:
return "Pb";
1299 case 238:
return "U";
1301 case 96:
return "Zr";
1303 Error(
"StFastGlauberMcMaker::GetName",
"can't find mass number = %d. Return white space", massNumber);
1311 Double_t StFastGlauberMcMaker::GetInelasticNNCrossSection(
const Double_t energy,
const TString type)
const
1314 const UInt_t energyInt =
static_cast<UInt_t
>(energy) ;
1317 Double_t error = 0.0 ;
1318 if( type.CompareTo(
"smallXsec", TString::kIgnoreCase) == 0 ) error = -0.1 ;
1319 else if( type.CompareTo(
"largeXsec", TString::kIgnoreCase) == 0 ) error = 0.1 ;
1321 Double_t sigmaNN = 0.0 ;
1322 switch ( energyInt ) {
1323 case 2760: sigmaNN = 6.4 + error ; break ;
1324 case 200: sigmaNN = 4.2 + error ; break ;
1325 case 62: sigmaNN = 3.6 + error ; break ;
1326 case 39: sigmaNN = 3.4 + error ; break ;
1327 case 27: sigmaNN = 3.3 + error ; break ;
1328 case 19: sigmaNN = 3.2 + error ; break ;
1329 case 14: sigmaNN = 3.15 + error; break ;
1330 case 11: sigmaNN = 3.12 + error; break ;
1331 case 7: sigmaNN = 3.08 + error; break ;
1333 Error(
"StFastGlauberMcMaker::GetInelasticNNCrossSection",
"No energy = %1.1f GeV is available. abort", energy);
1338 LOG_INFO <<
"StFastGlauberMcMaker::GetInelasticNNCrossSection ";
1339 LOG_INFO <<
"Inelastic NN cross section = " << sigmaNN * 10 <<
" (mb) for sqrt(sNN) = " << energy
1347 void StFastGlauberMcMaker::GetRThetaPhi(
const UInt_t inucleus, Double_t& r, Double_t& theta, Double_t& phi)
const
1349 if( mIsDeformed[inucleus] ){
1351 Double_t cosTheta = -9999. ;
1354 mfWoodsSaxon2D[inucleus]->GetRandom2(r, cosTheta) ;
1355 theta = TMath::ACos(cosTheta) ;
1359 r = mfWoodsSaxon[inucleus]->GetRandom() ;
1360 theta = StGlauberUtilities::instance()->
GetTheta() ;
1362 phi = StGlauberUtilities::instance()->
GetPhi() ;
1365 Smearing(r, theta, phi) ;
1369 void StFastGlauberMcMaker::Smearing(Double_t& r, Double_t& theta, Double_t& phi)
const
1372 if(!mHardCoreSmearing && !mGaussianSmearing)
return;
1375 if(mHardCoreSmearing){
1376 Double_t dx, dy, dz ;
1377 mfHardCore->GetRandom3(dx, dy, dz) ;
1380 LOG_INFO << Form(
"StFastGlauberMcMaker::Smearing Do hard-core smearing : (dx,dy,dz)=(%1.3f,%1.3f,%1.3f) fm",
1384 const Double_t x = r * TMath::Sin(theta) * TMath::Cos(phi) + dx ;
1385 const Double_t y = r * TMath::Sin(theta) * TMath::Sin(phi) + dy ;
1386 const Double_t z = r * TMath::Cos(theta) + dz ;
1388 r = TMath::Sqrt(x*x + y*y + z*z) ;
1389 theta = TMath::ACos(z/r) ;
1390 phi = TMath::ATan2(y, x) ;
1395 if(mGaussianSmearing){
1396 Double_t dx, dy, dz ;
1397 mfGaussian->GetRandom3(dx, dy, dz) ;
1400 LOG_INFO << Form(
"StFastGlauberMcMaker::Smearing Do gaussian smearing : (dx,dy,dz)=(%1.3f,%1.3f,%1.3f) fm",
1404 const Double_t x = r * TMath::Sin(theta) * TMath::Cos(phi) + dx ;
1405 const Double_t y = r * TMath::Sin(theta) * TMath::Sin(phi) + dy ;
1406 const Double_t z = r * TMath::Cos(theta) + dz ;
1408 r = TMath::Sqrt(x*x + y*y + z*z) ;
1409 theta = TMath::ACos(z/r) ;
1410 phi = TMath::ATan2(y, x) ;
1416 TGraph* StFastGlauberMcMaker::GetParticipantEccentricity(
const Double_t order,
const Double_t sumx,
const Double_t sumy,
1417 const Double_t sumw,
const UInt_t weightId)
const
1423 for(UInt_t in=0;in<2;in++){
1424 for(UInt_t j=0;j<mNucleons[in].size();j++){
1425 Nucleon* nucleon = mNucleons[in][j] ;
1426 const UInt_t ncoll = nucleon->
GetNcoll() ;
1428 const Bool_t isOk = (weightId==3 && ncoll==0)
1429 || (weightId!=3 && ncoll > 0) ;
1431 if(!isOk) continue ;
1433 const Double_t x = nucleon->GetX() - sumx ;
1434 const Double_t y = nucleon->
GetY() - sumy ;
1435 const Double_t z = nucleon->
GetZ() ;
1437 const TVector3 vpart(x, y, z);
1438 const Double_t rt = vpart.Perp() ;
1439 const Double_t phi = vpart.Phi() ;
1440 Double_t weight = 1.0 ;
1441 if( weightId == 1 ) weight = ncoll ;
1443 if( weightId == 3 ) weight = 1.0 ;
1445 qx += -weight * rt*rt * TMath::Cos(order*phi) ;
1446 qy += weight * rt*rt * TMath::Sin(order*phi) ;
1447 qw += weight * rt*rt ;
1455 TGraph* g =
new TGraph() ;
1456 g->SetPoint(0, 0, qx);
1457 g->SetPoint(1, 1, qy);
1458 g->SetPoint(2, 2, TMath::ATan2(qy, qx));
1459 g->SetPoint(3, 3, TMath::Sqrt(qx*qx + qy*qy)/qw) ;
1465 void StFastGlauberMcMaker::DebugOn()
1468 LOG_INFO <<
"StFastGlauberMcMaker::DebugOn Set debug mode, will see a bunch of debugging messages" << endm;
1474 if( option.CompareTo(
"type", TString::kIgnoreCase) == 0 ){
1476 LOG_INFO <<
"#----------------------------------------------------------------------------------------------------" << endm;
1477 LOG_INFO <<
"StFastGlauberMcMaker::Print Current available types are:" << endm;
1478 LOG_INFO <<
"type description" << endm;
1479 LOG_INFO <<
" default" << endm;
1480 LOG_INFO <<
" large Large R(+2%), small d(-10%)" << endm;
1481 LOG_INFO <<
" small Small R(-2%), large d(+10%)" << endm;
1482 LOG_INFO <<
" largeXsec Large inelastic NN cross section (+1mb)" << endm;
1483 LOG_INFO <<
" smallXsec Small inelastic NN cross section (-1mb)" << endm;
1484 LOG_INFO <<
" gauss Use gaussian collision profile" << endm;
1485 LOG_INFO <<
" largeNpp Use large Npp, small x" << endm;
1486 LOG_INFO <<
" smallNpp Use small Npp, large x" << endm;
1487 LOG_INFO <<
"----------------------------------------------------------------------------------------------------" << endm;
1488 LOG_INFO <<
"NOTE: Types below are not relevant for generating trees." << endm;
1489 LOG_INFO <<
"NOTE: Only important for making histograms by StGlauberAnalysisMaker." << endm;
1490 LOG_INFO <<
"NOTE: Users should use the default outputs and modify type to see " << endm;
1491 LOG_INFO <<
"NOTE: the effect of different total cross section, for example" << endm;
1493 LOG_INFO <<
" largeTotal +5% total cross section" << endm;
1494 LOG_INFO <<
" smallTotal -5% total cross section" << endm;
1495 LOG_INFO <<
" lowrw +2(-2) sigma p0 (p1) parameter for re-weighting correction" << endm;
1496 LOG_INFO <<
" highrw -2(+2) sigma p0 (p1) parameter for re-weighting correction" << endm;
1497 LOG_INFO <<
"#----------------------------------------------------------------------------------------------------" << endm;
1505 LOG_INFO << endm << endm;
1506 LOG_INFO <<
"StFastGlauberMcMaker::Version Current StFastGlauberMcMaker version is " << mVersion << endm;
1508 LOG_INFO << endm << endm;
Int_t Clear()
Default destructor.
Int_t Finish()
Run Make() by nevents.
void DoGaussianCollision()
Hard-core collision (default)
StFastGlauberMcMaker()
Current version.
void Sort()
Open ROOT file, initialize tree.
Double_t GetTheta() const
Get theta (polar angle)
Double_t GetMaximumImpactParameter() const
Get maximum impact parameter.
Int_t FillHeader()
Fill event-wise tree.
void Print(const TString option="") const
Gaussion profile collision.
void IncrementNcoll()
Increment Npart(x,y)
Double_t GetY() const
Get x position.
void SetRepulsionDistance(const Double_t repulsionDistance)
Default destructor.
void DoHardCoreCollision()
Default is OFF.
Double_t GetImpactParameter() const
Default destructor.
Int_t Close()
Fill header tree.
void SetMultiplicity(const Double_t val)
Increment Ncoll(x,y)
Double_t GetK() const
Get npp parameter.
void DoGaussianSmearing()
Default is OFF.
virtual ~StFastGlauberMcMaker()
Default constructor.
Double_t GetMultiplicity() const
Get Ncoll(x,y)
void SetB(const Double_t val)
Get entry for all branches.
void DoHardCoreSmearing()
Finish maker.
Double_t GetZ() const
Get y position.
Int_t Open(const TString filename)
Clear data members.
Bool_t IsConstEfficiency() const
Get mEfficiency (CAUTION: value has different meaning between constant and multiplicity dep...
Double_t GetXYZ(const Char_t *name="X") const
Get z position.
UInt_t GetNcoll() const
Get Npart(x,y)
Double_t GetEfficiency() const
Get x parameter.
UInt_t Version() const
Debug Mode ON.
const StNegativeBinomial * GetNegativeBinomial(const UInt_t id=0) const
Default destructor.
Int_t GetMultiplicity(const Double_t npart, const Double_t ncoll) const
Get multiplcity by convoluting NBD.
Int_t Fill()
Sort outputs in ROOT file.
Int_t Run(const UInt_t nevents)
Make one event.
Double_t GetPhi() const
Get phi (azimuthal angle)
Double_t GetX() const
Get k parameter.
Double_t GetTwoComponentMultiplicity(const Double_t npart, const Double_t ncoll) const
(1-x)*npart/2 + x*ncoll
void IncrementNpart()
Get weight factor to calculate average quantities.