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(
kV0M),
173 fhZDCvsTracklets(0x0),
181 fhZNCvscentrality(0x0),
182 fhZNAvscentrality(0x0),
184 fZDCGainAlpha(0.395),
191 fPileUpMultSelCount(0x0),
193 fMultTOFHighCut(0x0),
195 fSpectraMCList(NULL),
198 for(
int i=0; i<5; i++){
202 for(
int i=0; i<4; i++){
203 fhZNCPMQiPMC[i] = 0x0;
204 fhZNAPMQiPMC[i] = 0x0;
206 for(
Int_t r=0; r<fCRCMaxnRun; r++) {
210 for(
Int_t i=0; i<5; i++) {
211 fTowerGainEq[
c][i] = NULL;
214 this->InitializeRunArrays();
215 fMyTRandom3 =
new TRandom3(1);
216 gRandom->SetSeed(fMyTRandom3->Integer(65539));
217 for(
Int_t j=0; j<2; j++) {
219 fPtSpecGen[j][
c] = NULL;
220 fPtSpecFB32[j][
c] = NULL;
221 fPtSpecFB96[j][
c] = NULL;
222 fPtSpecFB128[j][
c] = NULL;
223 fPtSpecFB768[j][
c] = NULL;
231 fAnalysisType(
"AUTOMATIC"),
238 fCutContainer(new
TList()),
247 fLoadCandidates(bCandidates),
259 fPhiMax(TMath::TwoPi()),
266 fHistWeightvsPhiMin(0.),
267 fHistWeightvsPhiMax(3.),
272 fAfterburnerOn(kFALSE),
273 fNonFlowNumberOfTrackClones(0),
281 fShuffleTracks(kFALSE),
283 fAnalysisInput(kAOD),
286 fRejectPileUp(kTRUE),
289 fCentrEstimator(
kV0M),
298 fhZDCvsTracklets(0x0),
306 fhZNCvscentrality(0x0),
307 fhZNAvscentrality(0x0),
310 fZDCGainAlpha(0.395),
312 fPythiaGenHeader(NULL),
313 fHijingGenHeader(NULL),
321 fPileUpMultSelCount(0x0),
323 fMultTOFHighCut(0x0),
328 for(
int i=0; i<5; i++){
332 for(
int i=0; i<4; i++){
340 for(
Int_t i=0; i<5; i++) {
348 DefineInput(0, TChain::Class());
351 DefineOutput(1, AliFlowEventSimple::Class());
352 DefineOutput(2, TList::Class());
354 for(
Int_t j=0; j<2; j++) {
370 if(
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
411 AliError(
"WRONG ANALYSIS TYPE! only MCESD, MCkine, MCAOD, AOD and AUTOMATIC are allowed.");
449 fQAList->SetName(
"AliFlowEventCuts QA");
456 fCenDis =
new TH1F(
"fCenDis",
"fCenDis", 100, 0., 100.);
458 fPileUpCount =
new TH1F(
"fPileUpCount",
"fPileUpCount", 9, 0., 9.);
461 fPileUpCount->GetXaxis()->SetBinLabel(3,
"RefMultiplicityComb08");
462 fPileUpCount->GetXaxis()->SetBinLabel(4,
"IncompleteDAQ");
463 fPileUpCount->GetXaxis()->SetBinLabel(5,
"abs(V0M-CL1)>7.5");
465 fPileUpCount->GetXaxis()->SetBinLabel(7,
"inconsistentVtx");
466 fPileUpCount->GetXaxis()->SetBinLabel(8,
"multESDTPCDif");
480 fMultTOFLowCut =
new TF1(
"fMultTOFLowCut",
"[0]+[1]*x+[2]*x*x+[3]*x*x*x - 4.*([4]+[5]*x+[6]*x*x+[7]*x*x*x+[8]*x*x*x*x+[9]*x*x*x*x*x)", 0, 10000);
481 fMultTOFLowCut->SetParameters(-1.0178, 0.333132, 9.10282e-05, -1.61861e-08, 1.47848, 0.0385923, -5.06153e-05, 4.37641e-08, -1.69082e-11, 2.35085e-15);
483 fMultTOFHighCut =
new TF1(
"fMultTOFHighCut",
"[0]+[1]*x+[2]*x*x+[3]*x*x*x + 4.*([4]+[5]*x+[6]*x*x+[7]*x*x*x+[8]*x*x*x*x+[9]*x*x*x*x*x)", 0, 10000);
484 fMultTOFHighCut->SetParameters(-1.0178, 0.333132, 9.10282e-05, -1.61861e-08, 1.47848, 0.0385923, -5.06153e-05, 4.37641e-08, -1.69082e-11, 2.35085e-15);
488 for(
Int_t i=0; i<5; i++) {
501 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.,5.,6.,9.,20.};
502 for(
Int_t j=0; j<2; j++) {
504 fPtSpecGen[j][
c] =
new TH1F(Form(
"fPtSpecGen[%d][%d]",j,
c), Form(
"fPtSpecGen[%d][%d]",j,
c), 23, xmin);
506 fPtSpecFB32[j][
c] =
new TH1F(Form(
"fPtSpecFB32[%d][%d]",j,c), Form(
"fPtSpecFB32[%d][%d]",j,c), 23, xmin);
508 fPtSpecFB96[j][
c] =
new TH1F(Form(
"fPtSpecFB96[%d][%d]",j,c), Form(
"fPtSpecFB96[%d][%d]",j,c), 23, xmin);
510 fPtSpecFB128[j][
c] =
new TH1F(Form(
"fPtSpecFB128[%d][%d]",j,c), Form(
"fPtSpecFB128[%d][%d]",j,c), 23, xmin);
512 fPtSpecFB768[j][
c] =
new TH1F(Form(
"fPtSpecFB768[%d][%d]",j,c), Form(
"fPtSpecFB768[%d][%d]",j,c), 23, xmin);
520 for(
int i=0; i<5; i++){
522 sprintf(hname,
"hZNCPM%d",i);
523 fhZNCPM[i] =
new TH1F(hname, hname, 200, -50., 140000);
526 sprintf(hname,
"hZNAPM%d",i);
527 fhZNAPM[i] =
new TH1F(hname, hname, 200, -50., 140000);
533 sprintf(hnamenc,
"hZNCPMQ%dPMC",i+1);
534 fhZNCPMQiPMC[i] =
new TH1F(hnamenc, hnamenc, 100, 0., 1.);
538 sprintf(hnamena,
"hZNAPMQ%dPMC",i+1);
539 fhZNAPMQiPMC[i] =
new TH1F(hnamena, hnamena, 100, 0., 1.);
544 fhZNCvsZNA =
new TH2F(
"hZNCvsZNA",
"hZNCvsZNA",200,-50.,140000,200,-50.,140000);
546 fhZDCCvsZDCCA =
new TH2F(
"hZDCCvsZDCCA",
"hZDCCvsZDCCA",200,0.,180000.,200,0.,200000.);
548 fhZNCvsZPC =
new TH2F(
"hZNCvsZPC",
"hZNCvsZPC",200,-50.,50000,200,-50.,140000);
550 fhZNAvsZPA =
new TH2F(
"hZNAvsZPA",
"hZNAvsZPA",200,-50.,50000,200,-50.,140000);
552 fhZNvsZP =
new TH2F(
"hZNvsZP",
"hZNvsZP",200,-50.,80000,200,-50.,200000);
554 fhZNvsVZERO =
new TH2F(
"hZNvsVZERO",
"hZNvsVZERO",250,0.,25000.,200,0.,200000.);
556 fhZDCvsVZERO =
new TH2F(
"hZDCvsVZERO",
"hZDCvsVZERO",250,0.,25000.,250,0.,250000.);
560 fhZDCvsNclu1 =
new TH2F(
"hZDCvsNclu1",
"hZDCvsNclu1", 200, 0.,8000.,200,0.,250000.);
562 fhDebunch =
new TH2F(
"hDebunch",
"hDebunch",240,-100.,-40.,240,-30.,30.);
564 fhZNCcentroid =
new TH2F(
"hZNCcentroid",
"hZNCcentroid",100,-3.5,3.5,100,-3.5,3.5);
566 fhZNAcentroid =
new TH2F(
"hZNAcentroid",
"hZNAcentroid",100,-3.5,3.5,100,-3.5,3.5);
569 fhAsymm =
new TH1F(
"hAsymm" ,
"Asimmetry ",200,-1.,1.);
571 fhZNAvsAsymm =
new TH2F(
"hZNAvsAsymm",
"ZNA vs. asymm.",200,-1.,1.,200,0.,80.);
573 fhZNCvsAsymm =
new TH2F(
"hZNCvsAsymm",
"ZNC vs. asymm.",200,-1.,1.,200,0.,80.);
583 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};
585 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};
590 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, 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};
621 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.};
622 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.};
623 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};
652 AliMCEvent* McEvent = MCEvent();
660 AliError(
"cuts not set");
664 Int_t RunBin=-1, bin=0;
665 Int_t RunNum = aod->GetRunNumber();
670 if(RunBin==-1)
return;
677 Float_t centrV0M=300, centrCL1=300, centrCL0=300, centrTRK=300;
679 centrV0M = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile(
"V0M");
680 centrCL1 = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile(
"CL1");
681 centrCL0 = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile(
"CL0");
682 centrTRK = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP()->GetCentralityPercentile(
"TRK");
684 fMultSelection = (AliMultSelection*) InputEvent()->FindListObject(
"MultSelection");
687 AliWarning(
"AliMultSelection object not found!");
706 Short_t isPileup = aod->IsPileupFromSPD(3);
711 if (((AliAODHeader*)aod->GetHeader())->GetRefMultiplicityComb08() < 0) {
715 if (aod->IsIncompleteDAQ()) {
719 if(fabs(centrV0M-centrCL1)>7.5) {
724 const AliAODVertex* vtTrc = aod->GetPrimaryVertex();
725 const AliAODVertex* vtSPD = aod->GetPrimaryVertexSPD();
727 if (vtTrc->GetNContributors() < 2 || vtSPD->GetNContributors()<1) {
731 double covTrc[6], covSPD[6];
732 vtTrc->GetCovarianceMatrix(covTrc);
733 vtSPD->GetCovarianceMatrix(covSPD);
735 double dz = vtTrc->GetZ() - vtSPD->GetZ();
737 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
738 double errTrc = TMath::Sqrt(covTrc[5]);
739 double nsigTot = dz/errTot;
740 double nsigTrc = dz/errTrc;
742 if (TMath::Abs(dz)>0.2 || TMath::Abs(nsigTot)>10 || TMath::Abs(nsigTrc)>20) {
766 Short_t isPileup = aod->IsPileupFromSPD(3);
772 if (((AliAODHeader*)aod->GetHeader())->GetRefMultiplicityComb08() < 0) {
777 if (aod->IsIncompleteDAQ()) {
782 if(fabs(centrV0M-centrCL1)>7.5) {
788 const AliAODVertex* vtTrc = aod->GetPrimaryVertex();
789 const AliAODVertex* vtSPD = aod->GetPrimaryVertexSPD();
791 if (vtTrc->GetNContributors() < 2 || vtSPD->GetNContributors()<1) {
796 double covTrc[6], covSPD[6];
797 vtTrc->GetCovarianceMatrix(covTrc);
798 vtSPD->GetCovarianceMatrix(covSPD);
800 double dz = vtTrc->GetZ() - vtSPD->GetZ();
802 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
803 double errTrc = TMath::Sqrt(covTrc[5]);
804 double nsigTot = dz/errTot;
805 double nsigTrc = dz/errTrc;
807 if (TMath::Abs(dz)>0.2 || TMath::Abs(nsigTot)>10 || TMath::Abs(nsigTrc)>20) {
813 const Int_t nTracks = aod->GetNumberOfTracks();
814 Int_t multEsd = ((AliAODHeader*)aod->GetHeader())->GetNumberOfESDTracks();
817 Int_t multTrkBefC = 0;
818 Int_t multTrkTOFBefC = 0;
821 for (
Int_t it = 0; it < nTracks; it++) {
823 AliAODTrack* aodTrk = (AliAODTrack*)aod->GetTrack(it);
839 if (aodTrk->TestFilterBit(128))
846 Float_t multESDTPCDif = multEsdn - multTPCn*3.38;
848 if (multESDTPCDif > 15000.) {
858 if(BisPileup)
return;
880 for(
Int_t i=0; i<64; i++) {
881 if(std::isfinite(aod->GetVZEROEqMultiplicity(i))) SumV0 += aod->GetVZEROEqMultiplicity(i);
886 vtxpos[0] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetX();
887 vtxpos[1] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetY();
888 vtxpos[2] = ((AliAODVertex*)aod->GetPrimaryVertex())->GetZ();
917 AliError(
"ERROR: Could not retrieve MCEvent");
920 fStack = (TClonesArray*)aod->FindListObject(AliAODMCParticle::StdBranchName());
922 AliError(
"ERROR: Could not retrieve MCStack");
929 fMultSelection = (AliMultSelection*)aod->FindListObject(
"MultSelection");
932 AliWarning(
"AliMultSelection object not found!");
937 centr = (((AliVAODHeader*)aod->GetHeader())->GetCentralityP())->GetCentralityPercentile(
"V0M");
940 if (centr<fCentrLowLim || centr>=
fCentrUpLim )
return;
943 if(CenBin==-1)
return;
946 for(
Int_t jTracks = 0; jTracks<aod->GetNumberOfTracks(); jTracks++){
948 AliAODTrack* track = (AliAODTrack*)aod->GetTrack(jTracks);
952 Int_t lp = TMath::Abs(track->GetLabel());
955 if (track->Pt() < .2 || track->Pt() > 20. || TMath::Abs(track->Eta()) > .8 || track->GetTPCNcls() < 70)
continue;
976 if (((AliAODMCParticle*)
fStack->At(lp))->IsPhysicalPrimary()) {
977 if (track->TestFilterBit(32))
fPtSpecFB32[0][CenBin]->Fill(track->Pt());
978 if (track->TestFilterBit(96))
fPtSpecFB96[0][CenBin]->Fill(track->Pt());
979 if (track->TestFilterBit(128))
fPtSpecFB128[0][CenBin]->Fill(track->Pt());
980 if (track->TestFilterBit(768))
fPtSpecFB768[0][CenBin]->Fill(track->Pt());
982 if (track->TestFilterBit(32))
fPtSpecFB32[1][CenBin]->Fill(track->Pt());
983 if (track->TestFilterBit(96))
fPtSpecFB96[1][CenBin]->Fill(track->Pt());
984 if (track->TestFilterBit(128))
fPtSpecFB128[1][CenBin]->Fill(track->Pt());
985 if (track->TestFilterBit(768))
fPtSpecFB768[1][CenBin]->Fill(track->Pt());
993 for(
Int_t jTracks = 0; jTracks<
fStack->GetEntriesFast(); jTracks++) {
994 AliAODMCParticle *MCpart = (AliAODMCParticle*)
fStack->At(jTracks);
996 printf(
"ERROR: Could not receive MC track %d\n", jTracks);
1000 if ( MCpart->Pt() < .2 || MCpart->Pt() > 20. || TMath::Abs(MCpart->Eta()) > .8 )
continue;
1002 if ( MCpart->Charge() == 0. || !MCpart->IsPhysicalPrimary())
continue;
1022 AliError(
"ERROR: Could not retrieve ESDEvent");
1026 AliError(
"ERROR: Could not retrieve MCEvent");
1029 AliStack*
fStack = fMCEvent->Stack();
1031 AliError(
"ERROR: Could not retrieve MCStack");
1035 AliESDVertex *vertex = (AliESDVertex*) esd->GetPrimaryVertex();
1036 if (!vertex)
return;
1037 if (TMath::Abs(vertex->GetZ()) > 10. )
return;
1038 if (vertex->GetNContributors() < 1 )
return;
1039 AliCentrality *
centrality = esd->GetCentrality();
1040 if (!centrality)
return;
1041 Double_t centr = centrality->GetCentralityPercentile(
"V0M");
1042 if (centr<fCentrLowLim || centr>=
fCentrUpLim )
return;
1044 if (centr>0. && centr<5.) CenBin=0;
1045 if (centr>5. && centr<10.) CenBin=1;
1046 if (centr>10. && centr<20.) CenBin=2;
1047 if (centr>20. && centr<30.) CenBin=3;
1048 if (centr>30. && centr<40.) CenBin=4;
1049 if (centr>40. && centr<50.) CenBin=5;
1050 if (centr>50. && centr<60.) CenBin=6;
1051 if (centr>60. && centr<70.) CenBin=7;
1052 if (centr>70. && centr<80.) CenBin=8;
1053 if (centr>80. && centr<90.) CenBin=9;
1054 if(CenBin==-1)
return;
1058 for (
Int_t i=0 ; i<fStack->GetNtrack() ; i++ ) {
1061 TParticle *particle = (TParticle*)fStack->Particle(i);
1062 if (!particle)
continue;
1063 if (!fStack->IsPhysicalPrimary(i))
continue;
1064 if ( particle->GetPDG()->Charge() == 0.)
continue;
1067 if ( particle->Pt()<0.2 || particle->Pt()>10. )
continue;
1068 if ( TMath::Abs(particle->Eta())>0.8 )
continue;
1086 for (
Int_t i=0 ; i<esd->GetNumberOfTracks() ; i++) {
1089 AliVTrack *vtrack =
static_cast<AliVTrack*
>(esd->GetTrack(i));
1090 AliESDtrack *track =
dynamic_cast<AliESDtrack*
>(vtrack);
1091 if (!track)
continue;
1094 Int_t lp = TMath::Abs(track->GetLabel());
1095 if (!fStack->IsPhysicalPrimary(lp))
continue;
1096 TParticle *particle = (TParticle*)fStack->Particle(lp);
1097 if (!particle)
continue;
1098 if (particle->GetPDG()->Charge() == 0.)
continue;
1106 UShort_t ntpccls = track->GetTPCNcls();
1107 Double_t tpcchi2 = track->GetTPCchi2();
1108 if (tpcchi2<0.2 || tpcchi2 >=4.) {
1120 track->GetImpactParameters(dcaxy,dcaz);
1121 if (dcaxy > 0.3 || dcaz > 0.3) {
1128 if ( track->Pt()<0.2 || track->Pt()>10. )
continue;
1129 if ( TMath::Abs(track->Eta())>0.8 )
continue;
1156 AliInputEventHandler* McHandler =
dynamic_cast<AliInputEventHandler*
> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1158 AliError(
"ERROR: Could not retrieve MCtruthEventHandler");
1161 McEvent = McHandler->MCEvent();
1163 AliError(
"ERROR: Could not retrieve MC event");
1167 Int_t nTracks = McEvent->GetNumberOfTracks();
1171 for (
Int_t itrkN=0; itrkN<nTracks; itrkN++) {
1173 AliMCParticle* pParticle =
dynamic_cast<AliMCParticle*
>(McEvent->GetTrack(itrkN));
1174 if (!pParticle)
continue;
1177 if (McEvent->IsPhysicalPrimary(itrkN) && pParticle->Charge()!=0) {
1202 if(ImpPar) CenPer = 0.3859796743103508*pow(ImpPar,2.);
1215 if (mult<fMinMult || mult>
fMaxMult) {
1216 AliWarning(
"FlowEvent cut on multiplicity");
return;
1256 AliInputEventHandler *hdr = (AliInputEventHandler*)am->GetInputEventHandler();
1258 if(hdr->IsEventSelected() && AliVEvent::kAny) {
1262 AliAODTracklets *trackl = aod->GetTracklets();
1263 Int_t nTracklets = trackl->GetNumberOfTracklets();
1265 AliAODVZERO *vzeroAOD = aod->GetVZEROData();
1266 Float_t multV0A = vzeroAOD->GetMTotV0A();
1267 Float_t multV0C = vzeroAOD->GetMTotV0C();
1269 AliAODZDC *aodZDC = aod->GetZDCData();
1278 const Double_t * towZNCraw = aodZDC->GetZNCTowerEnergy();
1279 const Double_t * towZNAraw = aodZDC->GetZNATowerEnergy();
1283 Double_t Enucl = (RunNum < 209122 ? 1380. : 2511.);
1284 Double_t xyZNC[2]={999.,999.}, xyZNA[2]={999.,999.};
1285 Double_t towZNC[5]={0.}, towZNA[5]={0.};
1290 for(
Int_t i=0; i<5; i++) {
1295 for(
Int_t i=0; i<5; i++) {
1300 for(
Int_t i=0; i<5; i++) {
1301 towZNC[i] = towZNCraw[i];
1302 towZNA[i] = towZNAraw[i];
1306 if(RunNum>=245829) towZNA[2] = 0.;
1307 Float_t zncEnergy=0., znaEnergy=0.;
1308 for(
Int_t i=0; i<5; i++){
1309 zncEnergy += towZNC[i];
1310 znaEnergy += towZNA[i];
1312 if(RunNum>=245829) znaEnergy *= 8./7.;
1316 const Float_t x[4] = {-1.75, 1.75, -1.75, 1.75};
1317 const Float_t y[4] = {-1.75, -1.75, 1.75, 1.75};
1318 Float_t numXZNC=0., numYZNC=0., denZNC=0., cZNC, wZNC;
1319 Float_t numXZNA=0., numYZNA=0., denZNA=0., cZNA, wZNA;
1322 for(
Int_t i=0; i<4; i++){
1324 numXZNC += x[i]*wZNC;
1325 numYZNC += y[i]*wZNC;
1328 if(i==1) wZNA = TMath::Power(towZNA[0]-towZNA[1]-towZNA[3]-towZNA[4],
fZDCGainAlpha);
1330 numXZNA += x[i]*wZNA;
1331 numYZNA += y[i]*wZNA;
1335 Float_t nSpecnC = zncEnergy/Enucl;
1336 cZNC = 1.89358-0.71262/(nSpecnC+0.71789);
1337 xyZNC[0] = cZNC*numXZNC/denZNC;
1338 xyZNC[1] = cZNC*numYZNC/denZNC;
1341 xyZNC[0] = xyZNC[1] = 999.;
1344 Float_t nSpecnA = znaEnergy/Enucl;
1345 cZNA = 1.89358-0.71262/(nSpecnA+0.71789);
1346 xyZNA[0] = cZNA*numXZNA/denZNA;
1347 xyZNA[1] = cZNA*numYZNA/denZNA;
1350 xyZNA[0] = xyZNA[1] = 999.;
1353 for(
Int_t i=0; i<4; i++) {
1354 if(towZNC[i+1]>0.) {
1356 numXZNC += x[i]*wZNC;
1357 numYZNC += y[i]*wZNC;
1360 if(towZNA[i+1]>0.) {
1362 numXZNA += x[i]*wZNA;
1363 numYZNA += y[i]*wZNA;
1368 xyZNC[0] = numXZNC/denZNC;
1369 xyZNC[1] = numYZNC/denZNC;
1372 xyZNC[0] = xyZNC[1] = 999.;
1376 xyZNA[0] = numXZNA/denZNA;
1377 xyZNA[1] = numYZNA/denZNA;
1380 xyZNA[0] = xyZNA[1] = 999.;
1391 Float_t tdcSum = aodZDC->GetZDCTimeSum();
1392 Float_t tdcDiff = aodZDC->GetZDCTimeDiff();
1395 for(
int i=0; i<5; i++){
1397 if((i<4) && (towZNC[0]>0.))
fhZNCPMQiPMC[i]->Fill(towZNC[i+1]/towZNC[0]);
1399 for(
int i=0; i<5; i++){
1401 if(((i<4) && towZNA[0]>0.))
fhZNAPMQiPMC[i]->Fill(towZNA[i+1]/towZNA[0]);
1405 fhZDCCvsZDCCA->Fill(energyZNA+energyZPA, energyZNC+energyZPC);
1408 fhZNvsZP->Fill(energyZPA+energyZPC, energyZNA+energyZNC);
1409 fhZNvsVZERO->Fill(multV0A+multV0C, energyZNC+energyZNA);
1410 fhZDCvsVZERO->Fill(multV0A+multV0C, energyZNA+energyZPA+energyZNC+energyZPC);
1414 if((energyZNC+energyZNA)>0.) asymmetry = (energyZNC-energyZNA)/(energyZNC+energyZNA);
1440 if (Centrality>0. && Centrality<5.) CenBin=0;
1441 if (Centrality>5. && Centrality<10.) CenBin=1;
1442 if (Centrality>10. && Centrality<20.) CenBin=2;
1443 if (Centrality>20. && Centrality<30.) CenBin=3;
1444 if (Centrality>30. && Centrality<40.) CenBin=4;
1445 if (Centrality>40. && Centrality<50.) CenBin=5;
1446 if (Centrality>50. && Centrality<60.) CenBin=6;
1447 if (Centrality>60. && Centrality<70.) CenBin=7;
1448 if (Centrality>70. && Centrality<80.) CenBin=8;
1449 if (Centrality>80. && Centrality<90.) CenBin=9;
1450 if (CenBin>=
fnCen) CenBin=-1;
1451 if (
fnCen==1) CenBin=0;
1460 printf(
"One of vertices is not valid\n");
1463 static TMatrixDSym vVb(3);
1465 double dx = v0->GetX()-v1->GetX();
1466 double dy = v0->GetY()-v1->GetY();
1467 double dz = v0->GetZ()-v1->GetZ();
1468 double cov0[6],cov1[6];
1469 v0->GetCovarianceMatrix(cov0);
1470 v1->GetCovarianceMatrix(cov1);
1471 vVb(0,0) = cov0[0]+cov1[0];
1472 vVb(1,1) = cov0[2]+cov1[2];
1473 vVb(2,2) = cov0[5]+cov1[5];
1474 vVb(1,0) = vVb(0,1) = cov0[1]+cov1[1];
1475 vVb(0,2) = vVb(1,2) = vVb(2,0) = vVb(2,1) = 0.;
1477 if (!vVb.IsValid()) {printf(
"Singular Matrix\n");
return dist;}
1478 dist = vVb(0,0)*dx*dx + vVb(1,1)*dy*dy + vVb(2,2)*dz*dz
1479 + 2*vVb(0,1)*dx*dy + 2*vVb(0,2)*dx*dz + 2*vVb(1,2)*dy*dz;
1480 return dist>0 ? TMath::Sqrt(dist) : -1;
1488 const int kMinPlpContrib = 5;
1489 const double kMaxPlpChi2 = 5.0;
1490 const double kMinWDist = 15;
1492 const AliVVertex* vtPrm = 0;
1493 const AliVVertex* vtPlp = 0;
1496 if ( !(nPlp=aod->GetNumberOfPileupVerticesTracks()) )
return kFALSE;
1497 vtPrm = aod->GetPrimaryVertex();
1498 if (vtPrm == aod->GetPrimaryVertexSPD())
return kTRUE;
1502 for (
int ipl=0;ipl<nPlp;ipl++) {
1503 vtPlp = (
const AliVVertex*)aod->GetPileupVertexTracks(ipl);
1505 if (vtPlp->GetNContributors() < kMinPlpContrib)
continue;
1506 if (vtPlp->GetChi2perNDF() > kMaxPlpChi2)
continue;
1510 double wDst =
GetWDist(vtPrm,vtPlp);
1511 if (wDst<kMinWDist)
continue;
void SetMassMin(Double_t i)
TH2F * fhZDCCvsZDCCA
ZNC vs ZNA;.
TH2F * fhZNvsVZERO
ZNC+ZNA vs ZPC+ZPA;.
TH1F * fPtSpecFB128[2][10]
PtSpecRec FB96.
void FindDaughters(Bool_t keepDaughtersInRPselection=kFALSE)
void SetEta(Double_t eta)
TH1F * fPileUpCount
centrality distribution
Int_t fRunList[fCRCMaxnRun]
TH2F * fhZDCvsTracklets
ZDC vs VZERO;.
TH1F * fhZNCPMQiPMC[4]
ZNA PM high res.
TH2F * fhZNCvsZPC
ZDCC vs ZDCCA.
AliFlowTrack * fFlowTrack
virtual void SetZDC2Qsub(Double_t *QVC, Double_t MC, Double_t *QVA, Double_t MA)
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)
void Set(const AliVParticle *p)
void SetPhiMin(Double_t i)
TH2F * fhZNCvsAsymm
ZNA vs asymmetry.
void SetMCReactionPlaneAngle(const AliMCEvent *mcEvent)
void SetCutsPOI(AliFlowTrackCuts *cutsPOI)
TH1D * fTowerGainEq[2][5]
TH1F * fPtSpecFB768[2][10]
PtSpecRec FB128.
TH1F * fPtSpecGen[2][10]
list with pt spectra
virtual void UserExec(Option_t *option)
void SetHistWeightvsPhiMax(Double_t d)
TH2F * fhZNCvscentrality
ZNC vs asymmetry.
void SetZNAEnergy(Double_t const en)
TList * fTowerEqList
MultSelection (RUN2 centrality estimator)
Int_t fNonFlowNumberOfTrackClones
void SetEtaMax(Double_t i)
void SetReferenceMultiplicity(Int_t m)
virtual Int_t GetCenBin(Double_t Centrality)
void SetCutsRP(AliFlowTrackCuts *cutsRP)
TH2F * fhZNCvsZNA
PMQi/PMC for ZNA.
TH2F * fhDebunch
ZDC vs N_cluster layer 1;.
CentrEstimator fCentrEstimator
TH1F * fhAsymm
ZNA centroid.
void SetCentralityCL1(Double_t c)
virtual void SetVertexPosition(Double_t *pos)
void IncrementNumberOfPOIs(Int_t poiType=1)
void SetForRPSelection(Bool_t b=kTRUE)
void Fill(AliFlowTrackCuts *rpCuts, AliFlowTrackCuts *poiCuts)
TH2F * fhZNAvsZPA
ZNC vs ZPC;.
TH1F * fhZNAPM[5]
ZNC PM high res.
TF1 * fMultTOFLowCut
centrality distribution
void SetShuffleTracks(Bool_t b)
void CloneTracks(Int_t n)
void SetNbinsEta(Int_t i)
AliMultSelection * fMultSelection
AliFlowEvent * fFlowEvent
void SetNITSCL1(Double_t c)
virtual void UserCreateOutputObjects()
void SetNbinsMult(Int_t i)
void SetMassMax(Double_t i)
static AliFlowCommonConstants * GetMaster()
TH2F * fhZDCvsNclu1
ZDC vs N_tracklets;.
void SetNbinsMass(Int_t i)
AliFlowEventCuts * fCutsEvent
TH1F * fPileUpMultSelCount
centrality distribution
Double_t GetCentrality() const
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)
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)
virtual ~AliAnalysisTaskCRCZDC()
virtual void Terminate(Option_t *option)
void SetEvent(AliVEvent *event, AliMCEvent *mcEvent=NULL)
TH2F * fhZNAcentroid
ZNC centroid.
Bool_t IsSetMCReactionPlaneAngle() const
TClonesArray * fStack
Q Vectors list per run.
void SetPhiMax(Double_t i)
Double_t fHistWeightvsPhiMax
void SetEtaMin(Double_t i)
static const Int_t fCRCMaxnRun
ZNA vs. centrality.
void SetForPOISelection(Bool_t b=kTRUE)
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 * fPtSpecFB96[2][10]
PtSpecRec FB32.
void SetMultMin(Double_t i)
TH2F * fhZNAvsAsymm
ZN asymmetry.
TH2F * fhZNAvscentrality
ZNC vs. centrality.
virtual Bool_t IsSelected(TObject *obj, TObject *objmc)
TH1F * fPtSpecFB32[2][10]
PtSpecGen.
TH1F * fhZNCPM[5]
list send on output slot 0
void SetCentralityTRK(Double_t c)
Double_t GetWDist(const AliVVertex *v0, const AliVVertex *v1)
Bool_t fCutTPC
PtSpecRec FB768.
void SetPtMin(Double_t i)
AliFlowTrackCuts * fCutsRP
void InsertTrack(AliFlowTrack *)
AliAnalysisUtils * fAnalysisUtil
Event selection.
TH2F * fhZNCcentroid
Debunch;.
TH2F * fhZNvsZP
ZNA vs ZPA;.
AliGenHijingEventHeader * fHijingGenHeader
AliGenPythiaEventHeader * fPythiaGenHeader
Int_t NumberOfTracks() const