1 #include "TStopwatch.h"
5 int runFlowOnTheFlyGlauber(Int_t nevents=100000, Int_t iseed=1)
7 gSystem->Load("libGeom");
8 gSystem->Load("libVMC");
9 gSystem->Load("libXMLIO");
10 gSystem->Load("libPhysics");
11 gSystem->Load("libPWG2flowCommon");
12 gSystem->Load("libPWG2flowTools");
14 fMyTRandom3 = new TRandom3(iseed);
15 gRandom->SetSeed(iseed);
16 TFile *outputFile = new TFile("flowOnTheFlyGlauber.root","RECREATE");
21 runOneCentrality(3,nevents);
22 runOneCentrality(4,nevents);
23 runOneCentrality(5,nevents);
28 cout<<endl; cout<<" ---- Fini ---- "<<endl; cout<<endl;
29 timer.Stop(); timer.Print();
32 void runOneCentrality(Int_t centrality=3, Int_t nEvts=100)
35 //centralities: 0: 0-5
45 Double_t centPerc[] = {0,5,10,20,30,40,50,60,70,80};
46 Double_t xCross[] = {2.5,7.5,15.,25.,35.,45.,55.,65.,75.};
47 Double_t xCrossErr[9] = {0.};
48 Double_t impact[] = {0., 3.5, 4.95, 6.98, 8.55, 9.88, 11.4, 12.09, 13.06, 13.97};
49 Double_t npart[] = {1000, 356, 305, 220, 155, 105, 67, 40, 21, 10, 4, 0};
53 Double_t signn=64; // inelastic nucleon nucleon cross section
54 //const char *fname="GlauberMC_PbPb_ntuple.root"; // name output file
55 // AliGlauberMC::RunAndSaveNtuple(nevents,sysA,sysB,signn);
56 // run the code to produce an ntuple:
62 AliGlauberMC glauber(sysA,sysB,signn);
63 glauber.SetMinDistance(mind);
66 glauber.SetDoPartProduction(kTRUE);
67 glauber.SetBmin(impact[centrality]);
68 glauber.SetBmax(impact[centrality+1]);
69 glauber.SetdNdEtaType(AliGlauberMC::kNBDSV);
70 glauber.GetdNdEtaParam()[0] = 2.49; //npp
71 glauber.GetdNdEtaParam()[1] = 1.7; //ratioSgm2Mu
72 glauber.GetdNdEtaParam()[2] = 0.13; //xhard
75 AliFlowAnalysisWithMCEventPlane* mcep2 = new AliFlowAnalysisWithMCEventPlane();
76 mcep2->SetHarmonic(2); // default is v2
78 AliFlowAnalysisWithMCEventPlane* mcep3 = new AliFlowAnalysisWithMCEventPlane();
79 mcep3->SetHarmonic(3); // default is v3
81 AliFlowAnalysisWithMCEventPlane* mcep4 = new AliFlowAnalysisWithMCEventPlane();
82 mcep4->SetHarmonic(4); // default is v4
84 AliFlowAnalysisWithMCEventPlane* mcep5 = new AliFlowAnalysisWithMCEventPlane();
85 mcep5->SetHarmonic(5); // default is v5
88 AliFlowAnalysisWithScalarProduct* sp2 = new AliFlowAnalysisWithScalarProduct();
91 AliFlowAnalysisWithScalarProduct* sp3 = new AliFlowAnalysisWithScalarProduct();
94 AliFlowAnalysisWithScalarProduct* sp4 = new AliFlowAnalysisWithScalarProduct();
97 AliFlowAnalysisWithScalarProduct* sp5 = new AliFlowAnalysisWithScalarProduct();
101 AliFlowAnalysisWithQCumulants* qc2 = new AliFlowAnalysisWithQCumulants();
104 AliFlowAnalysisWithQCumulants* qc3 = new AliFlowAnalysisWithQCumulants();
107 AliFlowAnalysisWithQCumulants* qc4 = new AliFlowAnalysisWithQCumulants();
110 AliFlowAnalysisWithQCumulants* qc5 = new AliFlowAnalysisWithQCumulants();
114 TH1F* histv2 = new TH1F(Form("v2 spread %.0f-%.0f",centPerc[centrality],centPerc[centrality+1]),"v_{2}",100,0,0.5);
115 TH1F* histv3 = new TH1F(Form("v3 spread %.0f-%.0f",centPerc[centrality],centPerc[centrality+1]),"v_{3}",100,0,0.5);
116 TH1F* histv4 = new TH1F(Form("v4 spread %.0f-%.0f",centPerc[centrality],centPerc[centrality+1]),"v_{4}",100,0,0.5);
117 TH1F* histv5 = new TH1F(Form("v5 spread %.0f-%.0f",centPerc[centrality],centPerc[centrality+1]),"v_{5}",100,0,0.5);
119 AliFlowTrackSimpleCuts *cutsRP = new AliFlowTrackSimpleCuts();
120 cutsRP->SetPtMin(0.2);
121 cutsRP->SetPtMax(5.0);
122 AliFlowTrackSimpleCuts *cutsPOI = new AliFlowTrackSimpleCuts();
123 cutsPOI->SetPtMin(0.2);
124 cutsPOI->SetPtMax(10.0);
126 Printf("starting the main event loop..");
127 for(Int_t i=0; i<nEvts; i++)
129 if (!glauber.NextEvent()) continue;
130 Double_t mult = glauber.GetdNdEta();
131 Double_t v2 = 0.2*glauber.GetEpsilon2Part(); histv2->Fill(v2);
132 Double_t v3 = 0.18*glauber.GetEpsilon3Part(); histv3->Fill(v3);
133 Double_t v4 = 0.09*glauber.GetEpsilon4Part(); histv4->Fill(v4);
134 Double_t v5 = 0.03*glauber.GetEpsilon5Part(); histv5->Fill(v5);
136 AliFlowEventSimple* event = new AliFlowEventSimple(mult,AliFlowEventSimple::kGenerate);
137 event->SetMCReactionPlaneAngle(0.);
138 event->AddFlow(0,v2,v3,v4,v5);
139 event->TagRP(cutsRP);
140 event->TagPOI(cutsPOI);
142 // do flow analysis for various methods:
155 cout <<"Event: " << i+1 << "\r"; cout.flush();
157 } // end of for(Int_t i=0;i<nEvts;i++)
159 // calculate the final results
173 // open a new file which will hold the final results of all methods:
174 const Int_t nMethods = 12;
175 TString method[nMethods] = {"v2 MCEP","v3 MCEP","v4 MCEP","v5 MCEP","v2 SP","v3 SP","v4 SP","v5 SP","v2 QC","v3 QC","v4 QC","v5 QC"};
176 TDirectoryFile *dirFileFinal[nMethods] = {NULL};
177 TString fileName[nMethods];
178 for(Int_t i=0; i<nMethods; i++)
180 // form a file name for each method:
181 fileName[i]+=method[i].Data();
182 fileName[i]+=Form(" %.0f-%.0f",centPerc[centrality],centPerc[centrality+1]);
183 dirFileFinal[i] = new TDirectoryFile(fileName[i].Data(),fileName[i].Data());
186 // store the final results
187 mcep2->WriteHistograms(dirFileFinal[0]);
188 mcep3->WriteHistograms(dirFileFinal[1]);
189 mcep4->WriteHistograms(dirFileFinal[2]);
190 mcep5->WriteHistograms(dirFileFinal[3]);
191 sp2->WriteHistograms(dirFileFinal[4]);
192 sp3->WriteHistograms(dirFileFinal[5]);
193 sp4->WriteHistograms(dirFileFinal[6]);
194 sp5->WriteHistograms(dirFileFinal[7]);
195 qc2->WriteHistograms(dirFileFinal[8]);
196 qc3->WriteHistograms(dirFileFinal[9]);
197 qc4->WriteHistograms(dirFileFinal[10]);
198 qc5->WriteHistograms(dirFileFinal[11]);