23 #include "Riostream.h"
28 #include "TTimeStamp.h"
29 #include "TStopwatch.h"
38 #include <TParticle.h>
39 #include "TProfile3D.h"
41 #include "AliAnalysisManager.h"
42 #include "AliInputEventHandler.h"
43 #include "AliVEvent.h"
45 #include "AliESDEvent.h"
46 #include "AliESDHeader.h"
47 #include "AliESDInputHandler.h"
48 #include "AliESDZDC.h"
49 #include "AliMultiplicity.h"
50 #include "AliAnalysisUtils.h"
51 #include "AliAODHandler.h"
52 #include "AliAODTrack.h"
53 #include "AliAODEvent.h"
54 #include "AliAODHeader.h"
55 #include "AliAODVertex.h"
56 #include "AliAODVZERO.h"
57 #include "AliAODZDC.h"
58 #include "AliAODMCHeader.h"
59 #include "AliMCEventHandler.h"
60 #include "AliMCEvent.h"
61 #include "AliHeader.h"
62 #include "AliVParticle.h"
64 #include "AliAODMCParticle.h"
65 #include "AliAnalysisTaskSE.h"
66 #include "AliGenEventHeader.h"
67 #include "AliPhysicsSelectionTask.h"
68 #include "AliPhysicsSelection.h"
69 #include "AliBackgroundSelection.h"
70 #include "AliTriggerAnalysis.h"
71 #include "AliCentrality.h"
73 #include "AliMultSelection.h"
74 #include "AliLumiTools.h"
77 #include "AliCFManager.h"
80 #include "AliGenCocktailEventHeader.h"
81 #include "AliGenPythiaEventHeader.h"
82 #include "AliGenHijingEventHeader.h"
83 #include "AliGenGeVSimEventHeader.h"
84 #include "AliGenEposEventHeader.h"
87 #include "TObjArray.h"
101 fAnalysisType("AUTOMATIC"),
108 fCutContainer(new
TList()),
117 fPythiaGenHeader(NULL),
118 fHijingGenHeader(NULL),
122 fLoadCandidates(kFALSE),
134 fPhiMax(TMath::TwoPi()),
141 fHistWeightvsPhiMin(0.),
142 fHistWeightvsPhiMax(3.),
147 fAfterburnerOn(kFALSE),
148 fNonFlowNumberOfTrackClones(0),
156 fShuffleTracks(kFALSE),
158 fAnalysisInput(kAOD),
161 fRejectPileUp(kTRUE),
164 fCentrEstimator("V0M"),
174 fhZDCvsTracklets(0x0),
182 fhZNCvscentrality(0x0),
183 fhZNAvscentrality(0x0),
184 fhZPCvscentrality(0x0),
185 fhZPAvscentrality(0x0),
186 fhZNCpmcvscentr(0x0),
187 fhZNApmcvscentr(0x0),
188 fhZPCpmcvscentr(0x0),
189 fhZPApmcvscentr(0x0),
195 fZDCGainAlpha(0.395),
205 for(
int i=0; i<5; i++){
215 for(
int i=0; i<2; i++) fhZEM[i] = 0x0;
216 for(
int i=0; i<6; i++){
220 for(
int i=0; i<4; i++){
221 fhZNCPMQiPMC[i] = 0x0;
222 fhZNAPMQiPMC[i] = 0x0;
223 fhZPCPMQiPMC[i] = 0x0;
224 fhZPAPMQiPMC[i] = 0x0;
227 for(
Int_t r=0; r<fCRCMaxnRun; r++) {
231 for(
Int_t k=0; k<8; k++) {
232 fTowerGainEq[
c][k] = NULL;
235 this->InitializeRunArrays();
236 fMyTRandom3 =
new TRandom3(1);
237 gRandom->SetSeed(fMyTRandom3->Integer(65539));
239 fPtSpecGen[
c] = NULL;
240 fPtSpecFB32[
c] = NULL;
241 fPtSpecFB96[
c] = NULL;
242 fPtSpecFB128[
c] = NULL;
243 fPtSpecFB768[
c] = NULL;
250 fAnalysisType(
"AUTOMATIC"),
257 fCutContainer(new
TList()),
266 fLoadCandidates(bCandidates),
278 fPhiMax(TMath::TwoPi()),
285 fHistWeightvsPhiMin(0.),
286 fHistWeightvsPhiMax(3.),
291 fAfterburnerOn(kFALSE),
292 fNonFlowNumberOfTrackClones(0),
300 fShuffleTracks(kFALSE),
302 fAnalysisInput(kAOD),
305 fRejectPileUp(kTRUE),
308 fCentrEstimator(
"V0M"),
318 fhZDCvsTracklets(0x0),
326 fhZNCvscentrality(0x0),
327 fhZNAvscentrality(0x0),
328 fhZPCvscentrality(0x0),
329 fhZPAvscentrality(0x0),
330 fhZNCpmcvscentr(0x0),
331 fhZNApmcvscentr(0x0),
332 fhZPCpmcvscentr(0x0),
333 fhZPApmcvscentr(0x0),
340 fZDCGainAlpha(0.395),
342 fPythiaGenHeader(NULL),
343 fHijingGenHeader(NULL),
355 for(
int i=0; i<5; i++){
365 for(
int i=0; i<2; i++)
fhZEM[i] = 0x0;
366 for(
int i=0; i<6; i++){
370 for(
int i=0; i<4; i++){
381 for(
Int_t k=0; k<8; k++) {
389 DefineInput(0, TChain::Class());
392 DefineOutput(1, AliFlowEventSimple::Class());
393 DefineOutput(2, TList::Class());
409 if(
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
446 AliError(
"WRONG ANALYSIS TYPE! only MCESD, MCkine, MCAOD, AOD and AUTOMATIC are allowed.");
484 fQAList->SetName(
"AliFlowEventCuts QA");
491 fCenDis =
new TH1F(
"fCenDis",
"fCenDis", 100, 0., 100.);
494 for(
Int_t k=0; k<8; k++) {
500 Float_t xmin[] = {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.,1.2,1.4,1.6,1.8,2.,2.33,2.66,3.,3.5,4.,4.5,5.,6.,7.,8.};
502 fPtSpecGen[
c] =
new TH1F(Form(
"fPtSpecGen[%d]",
c), Form(
"fPtSpecGen[%d]",
c), 24, xmin);
504 fPtSpecFB32[
c] =
new TH1F(Form(
"fPtSpecFB32[%d]",c), Form(
"fPtSpecFB32[%d]",c), 24, xmin);
506 fPtSpecFB96[
c] =
new TH1F(Form(
"fPtSpecFB96[%d]",c), Form(
"fPtSpecFB96[%d]",c), 24, xmin);
508 fPtSpecFB128[
c] =
new TH1F(Form(
"fPtSpecFB128[%d]",c), Form(
"fPtSpecFB128[%d]",c), 24, xmin);
510 fPtSpecFB768[
c] =
new TH1F(Form(
"fPtSpecFB768[%d]",c), Form(
"fPtSpecFB768[%d]",c), 24, xmin);
516 for(
int i=0; i<5; i++){
518 sprintf(hname,
"hZNCPM%d",i);
519 fhZNCPM[i] =
new TH1F(hname, hname, 200, -50., 140000);
522 sprintf(hname,
"hZNAPM%d",i);
523 fhZNAPM[i] =
new TH1F(hname, hname, 200, -50., 140000);
526 sprintf(hname,
"hZPCPM%d",i);
527 fhZPCPM[i] =
new TH1F(hname, hname, 200, -50., 50000);
530 sprintf(hname,
"hZPAPM%d",i);
531 fhZPAPM[i] =
new TH1F(hname, hname, 200, -50., 50000);
534 sprintf(hname,
"hZNCPMlg%d",i);
535 fhZNCPMlg[i] =
new TH1F(hname, hname, 200, -50., 140000);
538 sprintf(hname,
"hZNAPMlg%d",i);
539 fhZNAPMlg[i] =
new TH1F(hname, hname, 200, -50., 140000);
542 sprintf(hname,
"hZPCPMlg%d",i);
543 fhZPCPMlg[i] =
new TH1F(hname, hname, 200, -50., 50000);
546 sprintf(hname,
"hZPAPMlg%d",i);
547 fhZPAPMlg[i] =
new TH1F(hname, hname, 200, -50., 50000);
553 sprintf(hnamenc,
"hZNCPMQ%dPMC",i+1);
554 fhZNCPMQiPMC[i] =
new TH1F(hnamenc, hnamenc, 100, 0., 1.);
558 sprintf(hnamena,
"hZNAPMQ%dPMC",i+1);
559 fhZNAPMQiPMC[i] =
new TH1F(hnamena, hnamena, 100, 0., 1.);
563 sprintf(hnamepc,
"hZPCPMQ%dPMC",i+1);
564 fhZPCPMQiPMC[i] =
new TH1F(hnamepc, hnamepc, 100, 0., 1.);
568 sprintf(hnamepa,
"hZPAPMQ%dPMC",i+1);
569 fhZPAPMQiPMC[i] =
new TH1F(hnamepa, hnamepa, 100, 0., 1.);
573 for(
int i=0; i<6; i++){
575 fhZEM[i] =
new TH1F(
"hZEM1",
"hZEM1",200,-10.,1190.);
576 fhTDCraw[i] =
new TH1F(
"hTDCZEM1raw",
"hTDCZEM1raw", 200, -200., 0.);
577 fhTDC[i] =
new TH1F(
"hTDCZEM1",
"hTDCZEM1", 200, -150., 50.);
578 fhPMCvsPMQ[i] =
new TH2F(
"hPMCvsPMQZNC",
"hPMCvsPMQZNC",200,-10.,140000,200,-10.,140000);
584 fhZEM[i] =
new TH1F(
"hZEM2",
"hZEM2",200,-10.,1190.);
585 fhTDCraw[i] =
new TH1F(
"hTDCZEM2raw",
"hTDCZEM2raw", 200, -200., 0.);
586 fhTDC[i] =
new TH1F(
"hTDCZEM2",
"hTDCZEM2", 200, -150., 50.);
587 fhPMCvsPMQ[i] =
new TH2F(
"hPMCvsPMQZPC",
"hPMCvsPMQZPC",200,-10.,50000,200,-10.,50000);
593 fhTDCraw[i] =
new TH1F(
"hTDCZNCraw",
"hTDCZNCraw", 200, -200., 0.);
594 fhTDC[i] =
new TH1F(
"hTDCZNC",
"hTDCZNC", 200, -150., 50.);
595 fhPMCvsPMQ[i] =
new TH2F(
"hPMCvsPMQZNA",
"hPMCvsPMQZNA",200,-10.,140000,200,-10.,140000);
600 fhTDCraw[i] =
new TH1F(
"hTDCZPCraw",
"hTDCZPCraw", 200, -200., 0.);
601 fhTDC[i] =
new TH1F(
"hTDCZPC",
"hTDCZPC", 200, -150., 50.);
602 fhPMCvsPMQ[i] =
new TH2F(
"hPMCvsPMQZPA",
"hPMCvsPMQZPA",200,-10.,50000,200,-10.,50000);
607 fhTDCraw[i] =
new TH1F(
"hTDCZNAraw",
"hTDCZNAraw", 200, -200., 0.);
608 fhTDC[i] =
new TH1F(
"hTDCZNA",
"hTDCZNA", 200, -150., 50.);
611 fhTDCraw[i] =
new TH1F(
"hTDCZPAraw",
"hTDCZPAraw", 200, -200., 0.);
612 fhTDC[i] =
new TH1F(
"hTDCZPA",
"hTDCZPA", 200, -150., 50.);
618 fhZNCvsZNA =
new TH2F(
"hZNCvsZNA",
"hZNCvsZNA",200,-50.,140000,200,-50.,140000);
620 fhZPCvsZPA =
new TH2F(
"hZPCvsZPA",
"hZPCvsZPA",200,-50.,50000,200,-50.,50000);
622 fhZDCCvsZDCCA =
new TH2F(
"hZDCCvsZDCCA",
"hZDCCvsZDCCA",200,0.,180000.,200,0.,200000.);
624 fhZNCvsZPC =
new TH2F(
"hZNCvsZPC",
"hZNCvsZPC",200,-50.,50000,200,-50.,140000);
626 fhZNAvsZPA =
new TH2F(
"hZNAvsZPA",
"hZNAvsZPA",200,-50.,50000,200,-50.,140000);
628 fhZNvsZP =
new TH2F(
"hZNvsZP",
"hZNvsZP",200,-50.,80000,200,-50.,200000);
630 fhZNvsVZERO =
new TH2F(
"hZNvsVZERO",
"hZNvsVZERO",250,0.,25000.,200,0.,200000.);
632 fhZDCvsVZERO =
new TH2F(
"hZDCvsVZERO",
"hZDCvsVZERO",250,0.,25000.,250,0.,250000.);
636 fhZDCvsNclu1 =
new TH2F(
"hZDCvsNclu1",
"hZDCvsNclu1", 200, 0.,8000.,200,0.,250000.);
638 fhDebunch =
new TH2F(
"hDebunch",
"hDebunch",240,-100.,-40.,240,-30.,30.);
640 fhZNCcentroid =
new TH2F(
"hZNCcentroid",
"hZNCcentroid",100,-3.5,3.5,100,-3.5,3.5);
642 fhZNAcentroid =
new TH2F(
"hZNAcentroid",
"hZNAcentroid",100,-3.5,3.5,100,-3.5,3.5);
645 fhAsymm =
new TH1F(
"hAsymm" ,
"Asimmetry ",200,-1.,1.);
647 fhZNAvsAsymm =
new TH2F(
"hZNAvsAsymm",
"ZNA vs. asymm.",200,-1.,1.,200,0.,80.);
649 fhZNCvsAsymm =
new TH2F(
"hZNCvsAsymm",
"ZNC vs. asymm.",200,-1.,1.,200,0.,80.);
661 fhZNCpmcvscentr =
new TH2F(
"hZNCpmcvscentr",
"ZNC PMC vs. centrality",100,0.,100.,100,0.,100.);
663 fhZNApmcvscentr =
new TH2F(
"hZNApmcvscentr",
"ZNA PMC vs. centrality",100,0.,100.,100,0.,100.);
665 fhZPCpmcvscentr =
new TH2F(
"hZPCpmcvscentr",
"ZPC PMC vs. centrality",100,0.,100.,100,0.,100.);
667 fhZPApmcvscentr =
new TH2F(
"hZPApmcvscentr",
"ZPA PMC vs. centrality",100,0.,100.,100,0.,100.);
670 fhZNCpmcLR =
new TH1F(
"hZNCpmcLR",
"ZNC PMC lr", 100, 0., 10.);
672 fhZNApmcLR =
new TH1F(
"hZNApmcLR",
"ZNA PMC lr", 100, 0., 10.);
674 fhZPCpmcLR =
new TH1F(
"hZPCpmcLR",
"ZPC PMC lr", 100, 0., 10.);
676 fhZPApmcLR =
new TH1F(
"hZPApmcLR",
"ZPA PMC lr", 100, 0., 10.);
681 Int_t dRun10h[] = {139510, 139507, 139505, 139503, 139465, 139438, 139437, 139360, 139329, 139328, 139314, 139310, 139309, 139173, 139107, 139105, 139038, 139037, 139036, 139029, 139028, 138872, 138871, 138870, 138837, 138732, 138730, 138666, 138662, 138653, 138652, 138638, 138624, 138621, 138583, 138582, 138579, 138578, 138534, 138469, 138442, 138439, 138438, 138396, 138364, 138275, 138225, 138201, 138197, 138192, 138190, 137848, 137844, 137752, 137751, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137686, 137685, 137639, 137638, 137608, 137595, 137549, 137546, 137544, 137541, 137539, 137531, 137530, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137430, 137366, 137243, 137236, 137235, 137232, 137231, 137230, 137162, 137161};
683 Int_t dRun11h[] = {167902, 167903, 167915, 167920, 167985, 167987, 167988, 168066, 168068, 168069, 168076, 168104, 168105, 168107, 168108, 168115, 168212, 168310, 168311, 168322, 168325, 168341, 168342, 168361, 168362, 168458, 168460, 168461, 168464, 168467, 168511, 168512, 168514, 168777, 168826, 168984, 168988, 168992, 169035, 169040, 169044, 169045, 169091, 169094, 169099, 169138, 169143, 169144, 169145, 169148, 169156, 169160, 169167, 169238, 169411, 169415, 169417, 169418, 169419, 169420, 169475, 169498, 169504, 169506, 169512, 169515, 169550, 169553, 169554, 169555, 169557, 169586, 169587, 169588, 169590, 169591, 169835, 169837, 169838, 169846, 169855, 169858, 169859, 169923, 169956, 169965, 170027, 170036,170040, 170081, 170083, 170084, 170085, 170088, 170089, 170091, 170155, 170159, 170163, 170193, 170203, 170204, 170207, 170228, 170230, 170268, 170269, 170270, 170306, 170308, 170309, 170311, 170312, 170313, 170315, 170387, 170388, 170572, 170593};
688 Int_t dRun15h[] = {244917, 244918, 244975, 244980, 244982, 244983, 245064, 245066, 245068, 246390, 246391, 246392, 246994, 246991, 246989, 246984, 246982, 246980, 246948, 246945, 246928, 246851, 246847, 246846, 246845, 246844, 246810, 246809, 246808, 246807, 246805, 246804, 246766, 246765, 246763, 246760, 246759, 246758, 246757, 246751, 246750, 246676, 246675, 246495, 246493, 246488, 246487, 246434, 246431, 246428, 246424, 246276, 246275, 246272, 246271, 246225, 246222, 246217, 246185, 246182, 246181, 246180, 246178, 246153, 246152, 246151, 246115, 246113, 246089, 246087, 246053, 246052, 246049, 246048, 246042, 246037, 246036, 246012, 246003, 246001, 245954, 245952, 245949, 245923, 245833, 245831, 245829, 245705, 245702, 245700, 245692, 245683};
719 Double_t ptmin[] = {0.2,0.4,0.6,0.8,1.,1.2,1.4,1.8,2.2,3.,4.,6.,8.,12.,20.};
720 Double_t phimin[] = {0.,TMath::Pi()/8.,2*TMath::Pi()/8.,3*TMath::Pi()/8.,4*TMath::Pi()/8.,5*TMath::Pi()/8.,6*TMath::Pi()/8.,7*TMath::Pi()/8.,8*TMath::Pi()/8.,9*TMath::Pi()/8.,10*TMath::Pi()/8.,11*TMath::Pi()/8.,12*TMath::Pi()/8.,13*TMath::Pi()/8.,14*TMath::Pi()/8.,15*TMath::Pi()/8.,16*TMath::Pi()/8.};
721 Double_t etamin[] = {-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8};
742 AliMCEvent* McEvent = MCEvent();
750 AliError(
"cuts not set");
754 Int_t RunBin=-1, bin=0;
755 Int_t RunNum = aod->GetRunNumber();
766 Float_t centr=300, centrCL1=300;
770 fMultSelection = (AliMultSelection*) InputEvent()->FindListObject(
"MultSelection");
773 AliWarning(
"AliMultSelection object not found!");
788 if (
plpMV(aod))
return;
790 Short_t isPileup = aod->IsPileupFromSPD(3);
791 if (isPileup != 0)
return;
793 if (((AliAODHeader*)aod->GetHeader())->GetRefMultiplicityComb08() < 0)
return;
795 if (aod->IsIncompleteDAQ())
return;
797 if(fabs(centr-centrCL1)>7.5)
return;
816 vtxpos[0] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetX();
817 vtxpos[1] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetY();
818 vtxpos[2] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetZ();
827 if(CenBin==-1)
return;
851 AliError(
"ERROR: Could not retrieve MCEvent");
854 fStack = (TClonesArray*)aod->FindListObject(AliAODMCParticle::StdBranchName());
856 AliError(
"ERROR: Could not retrieve MCStack");
863 fMultSelection = (AliMultSelection*)aod->FindListObject(
"MultSelection");
866 AliWarning(
"AliMultSelection object not found!");
871 centr = (((AliVAODHeader*)aod->GetHeader())->GetCentralityP())->GetCentralityPercentile(
"V0M");
874 if (centr<fCentrLowLim || centr>=
fCentrUpLim )
return;
877 if(CenBin==-1)
return;
880 for(
Int_t jTracks = 0; jTracks<aod->GetNumberOfTracks(); jTracks++){
882 AliAODTrack* track = (AliAODTrack*)aod->GetTrack(jTracks);
886 Int_t lp = TMath::Abs(track->GetLabel());
887 if (!((AliAODMCParticle*)
fStack->At(lp))->IsPhysicalPrimary())
continue;
890 if (track->Pt() < .2 || track->Pt() > 8. || TMath::Abs(track->Eta()) > .8 || track->GetTPCNcls() < 70)
continue;
893 if (track->TestFilterBit(32))
fPtSpecFB32[CenBin]->Fill(track->Pt());
894 if (track->TestFilterBit(96))
fPtSpecFB96[CenBin]->Fill(track->Pt());
895 if (track->TestFilterBit(128))
fPtSpecFB128[CenBin]->Fill(track->Pt());
896 if (track->TestFilterBit(768))
fPtSpecFB768[CenBin]->Fill(track->Pt());
901 for(
Int_t jTracks = 0; jTracks<
fStack->GetEntriesFast(); jTracks++) {
902 AliAODMCParticle *MCpart = (AliAODMCParticle*)
fStack->At(jTracks);
904 printf(
"ERROR: Could not receive MC track %d\n", jTracks);
908 if ( MCpart->Pt() < 0.2 || MCpart->Pt() > 8. || TMath::Abs(MCpart->Eta()) > .8 )
continue;
910 if ( MCpart->Charge() == 0. || !MCpart->IsPhysicalPrimary())
continue;
930 AliError(
"ERROR: Could not retrieve ESDEvent");
934 AliError(
"ERROR: Could not retrieve MCEvent");
937 AliStack*
fStack = fMCEvent->Stack();
939 AliError(
"ERROR: Could not retrieve MCStack");
943 AliESDVertex *vertex = (AliESDVertex*) esd->GetPrimaryVertex();
945 if (TMath::Abs(vertex->GetZ()) > 10. )
return;
946 if (vertex->GetNContributors() < 1 )
return;
947 AliCentrality *
centrality = esd->GetCentrality();
948 if (!centrality)
return;
949 Double_t centr = centrality->GetCentralityPercentile(
"V0M");
950 if (centr<fCentrLowLim || centr>=
fCentrUpLim )
return;
952 if (centr>0. && centr<5.) CenBin=0;
953 if (centr>5. && centr<10.) CenBin=1;
954 if (centr>10. && centr<20.) CenBin=2;
955 if (centr>20. && centr<30.) CenBin=3;
956 if (centr>30. && centr<40.) CenBin=4;
957 if (centr>40. && centr<50.) CenBin=5;
958 if (centr>50. && centr<60.) CenBin=6;
959 if (centr>60. && centr<70.) CenBin=7;
960 if (centr>70. && centr<80.) CenBin=8;
961 if (centr>80. && centr<90.) CenBin=9;
962 if(CenBin==-1)
return;
966 for (
Int_t i=0 ; i<fStack->GetNtrack() ; i++ ) {
969 TParticle *particle = (TParticle*)fStack->Particle(i);
970 if (!particle)
continue;
971 if (!fStack->IsPhysicalPrimary(i))
continue;
972 if ( particle->GetPDG()->Charge() == 0.)
continue;
975 if ( particle->Pt()<0.2 || particle->Pt()>10. )
continue;
976 if ( TMath::Abs(particle->Eta())>0.8 )
continue;
994 for (
Int_t i=0 ; i<esd->GetNumberOfTracks() ; i++) {
997 AliVTrack *vtrack =
static_cast<AliVTrack*
>(esd->GetTrack(i));
998 AliESDtrack *track =
dynamic_cast<AliESDtrack*
>(vtrack);
999 if (!track)
continue;
1002 Int_t lp = TMath::Abs(track->GetLabel());
1003 if (!fStack->IsPhysicalPrimary(lp))
continue;
1004 TParticle *particle = (TParticle*)fStack->Particle(lp);
1005 if (!particle)
continue;
1006 if (particle->GetPDG()->Charge() == 0.)
continue;
1014 UShort_t ntpccls = track->GetTPCNcls();
1015 Double_t tpcchi2 = track->GetTPCchi2();
1016 if (tpcchi2<0.2 || tpcchi2 >=4.) {
1028 track->GetImpactParameters(dcaxy,dcaz);
1029 if (dcaxy > 0.3 || dcaz > 0.3) {
1036 if ( track->Pt()<0.2 || track->Pt()>10. )
continue;
1037 if ( TMath::Abs(track->Eta())>0.8 )
continue;
1064 AliInputEventHandler* McHandler =
dynamic_cast<AliInputEventHandler*
> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1066 AliError(
"ERROR: Could not retrieve MCtruthEventHandler");
1069 McEvent = McHandler->MCEvent();
1071 AliError(
"ERROR: Could not retrieve MC event");
1075 Int_t nTracks = McEvent->GetNumberOfTracks();
1079 for (
Int_t itrkN=0; itrkN<nTracks; itrkN++) {
1081 AliMCParticle* pParticle =
dynamic_cast<AliMCParticle*
>(McEvent->GetTrack(itrkN));
1082 if (!pParticle)
continue;
1085 if (McEvent->IsPhysicalPrimary(itrkN) && pParticle->Charge()!=0) {
1110 if(ImpPar) CenPer = 0.3859796743103508*pow(ImpPar,2.);
1123 if (mult<fMinMult || mult>
fMaxMult) {
1124 AliWarning(
"FlowEvent cut on multiplicity");
return;
1164 AliInputEventHandler *hdr = (AliInputEventHandler*)am->GetInputEventHandler();
1166 if(hdr->IsEventSelected() && AliVEvent::kAny) {
1170 AliAODTracklets *trackl = aod->GetTracklets();
1171 Int_t nTracklets = trackl->GetNumberOfTracklets();
1173 AliAODVZERO *vzeroAOD = aod->GetVZEROData();
1174 Float_t multV0A = vzeroAOD->GetMTotV0A();
1175 Float_t multV0C = vzeroAOD->GetMTotV0C();
1177 AliAODZDC *aodZDC = aod->GetZDCData();
1186 const Double_t * towZNC = aodZDC->GetZNCTowerEnergy();
1187 const Double_t * towZPC = aodZDC->GetZPCTowerEnergy();
1188 const Double_t * towZNA = aodZDC->GetZNATowerEnergy();
1189 const Double_t * towZPA = aodZDC->GetZPATowerEnergy();
1191 const Double_t * towZNClg = aodZDC->GetZNCTowerEnergyLR();
1192 const Double_t * towZNAlg = aodZDC->GetZNATowerEnergyLR();
1194 Double_t towZPClg[5], towZPAlg[5]={0.};
1195 for(
Int_t it=0; it<5; it++){
1196 towZPClg[it] = 8*towZPC[it];
1197 towZPAlg[it] = 8*towZNA[it];
1202 Double_t xyZNC[2]={999.,999.}, xyZNA[2]={999.,999.};
1203 Float_t zncEnergy=0., znaEnergy=0.;
1204 for(
Int_t i=0; i<5; i++){
1205 zncEnergy += towZNC[i];
1206 znaEnergy += towZNA[i];
1212 if(CenBin==-1)
return;
1220 for(
Int_t i=0; i<8; i++) {
1226 Double_t AvTowerGain[8] = {1., 1., 1., 1., 1., 1., 1., 1.};
1229 if(RunNum < 209122) aodZDC->GetZNCentroidInPbPb(1380., xyZNC, xyZNA);
1230 else aodZDC->GetZNCentroidInPbPb(2510., xyZNC, xyZNA);
1234 for(
Int_t i=0; i<8; i++) {
1238 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
1239 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
1240 Float_t numXZNC=0., numYZNC=0., denZNC=0., wZNC;
1241 Float_t numXZNA=0., numYZNA=0., denZNA=0., wZNA;
1242 for(
Int_t i=0; i<4; i++) {
1243 if(towZNC[i+1]>0.) {
1244 wZNC = TMath::Power(towZNC[i+1],
fZDCGainAlpha)*AvTowerGain[i];
1245 numXZNC += x[i]*wZNC;
1246 numYZNC += y[i]*wZNC;
1249 if(towZNA[i+1]>0.) {
1250 wZNA = TMath::Power(towZNA[i+1],
fZDCGainAlpha)*AvTowerGain[i+4];
1251 numXZNA += x[i]*wZNA;
1252 numYZNA += y[i]*wZNA;
1257 xyZNC[0] = numXZNC/denZNC;
1258 xyZNC[1] = numYZNC/denZNC;
1261 xyZNC[0] = xyZNC[1] = 999.;
1265 xyZNA[0] = numXZNA/denZNA;
1266 xyZNA[1] = numYZNA/denZNA;
1269 xyZNA[0] = xyZNA[1] = 999.;
1275 for(
Int_t i=0; i<4; i++) {
1276 if(towZNC[i+1]>0.) {
1277 MulC += TMath::Power(towZNC[i+1],
fZDCGainAlpha)*AvTowerGain[i];
1279 if(towZNA[i+1]>0.) {
1280 MulA += TMath::Power(towZNA[i+1],
fZDCGainAlpha)*AvTowerGain[i+4];
1301 Float_t tdcSum = aodZDC->GetZDCTimeSum();
1302 Float_t tdcDiff = aodZDC->GetZDCTimeDiff();
1305 for(
int i=0; i<5; i++){
1308 if((i<4) && (towZNC[0]>0.))
fhZNCPMQiPMC[i]->Fill(towZNC[i+1]/towZNC[0]);
1311 fhPMCvsPMQ[0]->Fill(towZNC[1]+towZNC[2]+towZNC[3]+towZNC[4], towZNC[0]);
1312 for(
int i=0; i<5; i++){
1315 if(((i<4) && towZPC[0]>0.))
fhZPCPMQiPMC[i]->Fill(towZPC[i+1]/towZPC[0]);
1318 fhPMCvsPMQ[1]->Fill(towZPC[1]+towZPC[2]+towZPC[3]+towZPC[4], towZPC[0]);
1319 for(
int i=0; i<5; i++){
1322 if(((i<4) && towZNA[0]>0.))
fhZNAPMQiPMC[i]->Fill(towZNA[i+1]/towZNA[0]);
1325 fhPMCvsPMQ[2]->Fill(towZNA[1]+towZNA[2]+towZNA[3]+towZNA[4], towZNA[0]);
1326 for(
int i=0; i<5; i++){
1329 if(((i<4) && towZPA[0]>0.))
fhZPAPMQiPMC[i]->Fill(towZPA[i+1]/towZPA[0]);
1332 fhPMCvsPMQ[3]->Fill(towZPA[1]+towZPA[2]+towZPA[3]+towZPA[4], towZPA[0]);
1333 fhZEM[0]->Fill(energyZEM1);
1334 fhZEM[1]->Fill(energyZEM2);
1338 fhZDCCvsZDCCA->Fill(energyZNA+energyZPA, energyZNC+energyZPC);
1341 fhZNvsZP->Fill(energyZPA+energyZPC, energyZNA+energyZNC);
1342 fhZNvsVZERO->Fill(multV0A+multV0C, energyZNC+energyZNA);
1343 fhZDCvsVZERO->Fill(multV0A+multV0C, energyZNA+energyZPA+energyZNC+energyZPC);
1347 if((energyZNC+energyZNA)>0.) asymmetry = (energyZNC-energyZNA)/(energyZNC+energyZNA);
1380 if (Centrality>0. && Centrality<5.) CenBin=0;
1381 if (Centrality>5. && Centrality<10.) CenBin=1;
1382 if (Centrality>10. && Centrality<20.) CenBin=2;
1383 if (Centrality>20. && Centrality<30.) CenBin=3;
1384 if (Centrality>30. && Centrality<40.) CenBin=4;
1385 if (Centrality>40. && Centrality<50.) CenBin=5;
1386 if (Centrality>50. && Centrality<60.) CenBin=6;
1387 if (Centrality>60. && Centrality<70.) CenBin=7;
1388 if (Centrality>70. && Centrality<80.) CenBin=8;
1389 if (Centrality>80. && Centrality<90.) CenBin=9;
1390 if (CenBin>=
fnCen) CenBin=-1;
1391 if (
fnCen==1) CenBin=0;
1400 printf(
"One of vertices is not valid\n");
1403 static TMatrixDSym vVb(3);
1405 double dx = v0->GetX()-v1->GetX();
1406 double dy = v0->GetY()-v1->GetY();
1407 double dz = v0->GetZ()-v1->GetZ();
1408 double cov0[6],cov1[6];
1409 v0->GetCovarianceMatrix(cov0);
1410 v1->GetCovarianceMatrix(cov1);
1412 vVb(1,1) = cov0[2]+cov1[2];
1413 vVb(2,2) = cov0[5]+cov1[5];
1414 vVb(1,0) = vVb(0,1) = cov0[1]+cov1[1];
1415 vVb(0,2) = vVb(1,2) = vVb(2,0) = vVb(2,1) = 0.;
1417 if (!vVb.IsValid()) {printf(
"Singular Matrix\n");
return dist;}
1418 dist = vVb(0,0)*dx*dx + vVb(1,1)*dy*dy + vVb(2,2)*dz*dz
1419 + 2*vVb(0,1)*dx*dy + 2*vVb(0,2)*dx*dz + 2*vVb(1,2)*dy*dz;
1420 return dist>0 ? TMath::Sqrt(dist) : -1;
1429 const int kMinPlpContrib = 5;
1430 const double kMaxPlpChi2 = 5.0;
1431 const double kMinWDist = 15;
1433 const AliVVertex* vtPrm = 0;
1434 const AliVVertex* vtPlp = 0;
1437 if ( !(nPlp=aod->GetNumberOfPileupVerticesTracks()) )
return kFALSE;
1438 vtPrm = aod->GetPrimaryVertex();
1439 if (vtPrm == aod->GetPrimaryVertexSPD())
return kTRUE;
1443 for (
int ipl=0;ipl<nPlp;ipl++) {
1444 vtPlp = (
const AliVVertex*)aod->GetPileupVertexTracks(ipl);
1446 if (vtPlp->GetNContributors() < kMinPlpContrib)
continue;
1447 if (vtPlp->GetChi2perNDF() > kMaxPlpChi2)
continue;
1451 double wDst =
GetWDist(vtPrm,vtPlp);
1452 if (wDst<kMinWDist)
continue;
void SetMassMin(Double_t i)
TH1F * fhZPCpmcLR
ZNA PMC low res. chain.
TH2F * fhZDCCvsZDCCA
ZPC vs ZPA;.
TH3F * fPtPhiEtaRbRFB128[fCRCMaxnRun][10]
Q Vectors list per run.
TH2F * fhZNvsVZERO
ZNC+ZNA vs ZPC+ZPA;.
void FindDaughters(Bool_t keepDaughtersInRPselection=kFALSE)
Float_t GetCentrality(AliVEvent *event, AliMCEvent *mcEvent)
void SetEta(Double_t eta)
TH1F * fhZPCPMlg[5]
ZNA PM low res.
Int_t fRunList[fCRCMaxnRun]
TH2F * fhZNCpmcvscentr
ZPA vs. centrality.
TH2F * fhZDCvsTracklets
ZDC vs VZERO;.
TH1F * fhZNCPMQiPMC[4]
corrected TDC histos
TH2F * fhZNCvsZPC
ZDCC vs ZDCCA.
AliFlowTrack * fFlowTrack
virtual void GetVertexPosition(Double_t *pos)
virtual void SetZDC2Qsub(Double_t *QVC, Double_t MC, Double_t *QVA, Double_t MA)
TH2F * fhZPCpmcvscentr
ZNA vs. centrality.
TH1F * fPtSpecFB32[10]
PtSpecGen.
void AddFlow(Double_t v1, Double_t v2, Double_t v3, Double_t v4, Double_t v5)
Int_t GetReferenceMultiplicity(AliVEvent *event, AliMCEvent *mcEvent)
void SetNbinsPhi(Int_t i)
TH1F * fhZNApmcLR
ZPA PMC low res. chain.
void Set(const AliVParticle *p)
void SetPhiMin(Double_t i)
TH2F * fhZNCvsAsymm
ZNA vs asymmetry.
void SetMCReactionPlaneAngle(const AliMCEvent *mcEvent)
void SetCutsPOI(AliFlowTrackCuts *cutsPOI)
virtual void UserExec(Option_t *option)
void SetHistWeightvsPhiMax(Double_t d)
TH2F * fhZNCvscentrality
ZNC vs asymmetry.
void SetZNAEnergy(Double_t const en)
TH1F * fhZPCPMQiPMC[4]
PMQi/PMC for ZNA.
Int_t fNonFlowNumberOfTrackClones
void SetEtaMax(Double_t i)
TH1F * fhZPCPM[5]
ZNA PM high res.
void SetReferenceMultiplicity(Int_t m)
virtual Int_t GetCenBin(Double_t Centrality)
void SetCutsRP(AliFlowTrackCuts *cutsRP)
TH2F * fhZPCvsZPA
ZNC vs ZNA;.
TH2F * fhZNCvsZNA
PMQi/PMC for ZPA.
TH2F * fhDebunch
ZDC vs N_cluster layer 1;.
TH1F * fhAsymm
PMC vs sum PMQi.
void SetCentralityCL1(Double_t c)
virtual void SetVertexPosition(Double_t *pos)
void IncrementNumberOfPOIs(Int_t poiType=1)
TH1F * fhTDC[6]
raw TDC histos
void SetForRPSelection(Bool_t b=kTRUE)
TH1F * fhTDCraw[6]
ZPA PM low res.
TH2F * fhZNApmcvscentr
ZNC vs. centrality.
void Fill(AliFlowTrackCuts *rpCuts, AliFlowTrackCuts *poiCuts)
TH2F * fhZNAvsZPA
ZNC vs ZPC;.
TH1F * fhZNAPM[5]
ZNC PM high res.
void SetShuffleTracks(Bool_t b)
void CloneTracks(Int_t n)
void SetNbinsEta(Int_t i)
AliMultSelection * fMultSelection
centrality distribution
AliFlowEvent * fFlowEvent
void SetNITSCL1(Double_t c)
virtual void UserCreateOutputObjects()
void SetNbinsMult(Int_t i)
TH1F * fhZPAPMQiPMC[4]
PMQi/PMC for ZPC.
void SetMassMax(Double_t i)
static AliFlowCommonConstants * GetMaster()
TH2F * fhZDCvsNclu1
ZDC vs N_tracklets;.
void SetNbinsMass(Int_t i)
AliFlowEventCuts * fCutsEvent
TH1F * fhZPApmcLR
ZPC PMC low res. chain.
Double_t GetCentrality() const
TH3D * fTowerGainEq[fnCen][8]
ClassImp(AliAnalysisTaskCRCZDC) AliAnalysisTaskCRCZDC
Bool_t plpMV(const AliAODEvent *aod)
void SetCentrality(Double_t c)
AliFlowTrackCuts * fCutsPOI
void SetRun(Int_t const run)
Double_t fHistWeightvsPhiMin
void SetSource(trackSource s)
TH2F * fhZPAvscentrality
ZPC vs. centrality.
void SetPhi(Double_t phi)
void DefineDeadZone(Double_t etaMin, Double_t etaMax, Double_t phiMin, Double_t phiMax)
void SetMultMax(Double_t i)
AliGenEventHeader * fGenHeader
virtual void InitializeRunArrays()
void SetPtMax(Double_t i)
TList * fCRCQVecListRun[fCRCMaxnRun]
Run list.
void SetZNCEnergy(Double_t const en)
TH1F * fPtSpecFB128[10]
PtSpecRec FB96.
virtual ~AliAnalysisTaskCRCZDC()
virtual void Terminate(Option_t *option)
TH2F * fhZPApmcvscentr
ZPC vs. centrality.
void SetEvent(AliVEvent *event, AliMCEvent *mcEvent=NULL)
TH2F * fhZPCvscentrality
ZNA vs. centrality.
TH2F * fhZNAcentroid
ZNC centroid.
Bool_t IsSetMCReactionPlaneAngle() const
TClonesArray * fStack
Pt-Phi-Eta distr. run-by-run, FB768.
void SetPhiMax(Double_t i)
Double_t fHistWeightvsPhiMax
void SetEtaMin(Double_t i)
static const Int_t fCRCMaxnRun
ZPA PMC low res. chain.
void SetForPOISelection(Bool_t b=kTRUE)
TH1F * fPtSpecFB96[10]
PtSpecRec FB32.
void SetHistWeightvsPhiMin(Double_t d)
TH1F * fhZNAPMQiPMC[4]
PMQi/PMC for ZNC.
TH2F * fhZDCvsVZERO
ZN vs VZERO;.
void TagSubeventsInEta(Double_t etaMinA, Double_t etaMaxA, Double_t etaMinB, Double_t etaMaxB)
TH1F * fhZPAPMlg[5]
ZPC PM low res.
void SetMultMin(Double_t i)
TH2F * fhZNAvsAsymm
ZN asymmetry.
TH2F * fhZNAvscentrality
ZNC vs. centrality.
virtual Bool_t IsSelected(TObject *obj, TObject *objmc)
TH1F * fhZPAPM[5]
ZPC PM high res.
TH1F * fhZNCPM[5]
list send on output slot 0
void SetCentralityTRK(Double_t c)
TH3F * fPtPhiEtaRbRFB768[fCRCMaxnRun][10]
Pt-Phi-Eta distr. run-by-run, FB128.
Double_t GetWDist(const AliVVertex *v0, const AliVVertex *v1)
Bool_t fCutTPC
PtSpecRec FB768.
void SetPtMin(Double_t i)
TH2F * fhPMCvsPMQ[4]
ZNA centroid.
TH1F * fhZNCpmcLR
ZPA vs. centrality.
TH1F * fPtSpecFB768[10]
PtSpecRec FB128.
TH1F * fhZNAPMlg[5]
ZNC PM low res.
TH1F * fhZEM[2]
ZPA PM high res.
AliFlowTrackCuts * fCutsRP
void InsertTrack(AliFlowTrack *)
AliAnalysisUtils * fAnalysisUtil
Event selection.
TH2F * fhZNCcentroid
Debunch;.
TH2F * fhZNvsZP
ZNA vs ZPA;.
AliGenHijingEventHeader * fHijingGenHeader
TH1F * fhZNCPMlg[5]
ZEM PM high res.
AliGenPythiaEventHeader * fPythiaGenHeader
Int_t NumberOfTracks() const