11 #include <TClonesArray.h> 12 #include <TDirectory.h> 18 #include <TLorentzVector.h> 23 #include "AliAODEvent.h" 24 #include "AliAnalysisManager.h" 25 #include "AliAnalysisUtils.h" 26 #include "AliCentrality.h" 27 #include "AliEMCALGeoParams.h" 28 #include "AliEMCALGeometry.h" 29 #include "AliEMCALRecoUtils.h" 30 #include "AliESDEvent.h" 31 #include "AliESDMuonTrack.h" 33 #include "AliExternalTrackParam.h" 34 #include "AliInputEventHandler.h" 36 #include "AliMultSelection.h" 38 #include "AliTrackerBase.h" 39 #include "AliVCluster.h" 40 #include "AliVEventHandler.h" 41 #include "AliVParticle.h" 42 #include "AliVTrack.h" 43 #include "AliPhysicsSelectionTask.h" 44 #include "AliPhysicsSelection.h" 52 fDoTracking(0), fDoMuonTracking(0), fDoCumulants(0), fDoCumNtuple(0), fDoProp(0),
53 fCumPtMin(0.3), fCumPtMax(5.0), fCumEtaMin(-1.0), fCumEtaMax(1.0), fCumMmin(15), fCumMbins(250),
54 fDoHet(0), fQC4EG(-1), fHetEtmin(6),
55 fCentCL1In(0), fCentV0AIn(0),
56 fNtupCum(0), fNtupCumInfo(0), fNtupZdcInfo(0),
57 fNtupHet(0), fNtupHetInfo(0), fCum(0)
61 for (
Int_t i=0;i<1000;++i)
69 fDoTracking(1), fDoMuonTracking(0), fDoCumulants(0), fDoCumNtuple(0), fDoProp(0),
70 fCumPtMin(0.3), fCumPtMax(5.0), fCumEtaMin(-1.0), fCumEtaMax(1.0), fCumMmin(15), fCumMbins(250),
71 fDoHet(0), fQC4EG(-1), fHetEtmin(6),
72 fCentCL1In(0), fCentV0AIn(0),
73 fNtupCum(0), fNtupCumInfo(0), fNtupZdcInfo(0),
74 fNtupHet(0), fNtupHetInfo(0), fCum(0)
78 for (
Int_t i=0;i<1000;++i)
97 if (phia < 0) phia += tpi;
98 else if (phia > tpi) phia -= tpi;
99 if (phib < 0) phib += tpi;
100 else if (phib > tpi) phib -= tpi;
102 if (dphi < rangeMin) dphi += tpi;
103 else if (dphi > rangeMax) dphi -= tpi;
113 AliVEvent *
event = InputEvent();
116 UInt_t trig = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected();
117 for (
Int_t i=0;i<31;++i) {
122 Double_t vz =
event->GetPrimaryVertex()->GetZ();
125 Int_t run =
event->GetRunNumber();
126 Int_t vzn =
event->GetPrimaryVertex()->GetNContributors();
127 if ((vzn<1)&&(run>0))
131 if (TMath::Abs(vz)>10)
135 if ((run>=188356&&run<=188366) || (run>=195344&&run<=197388)) {
136 AliAnalysisUtils anau;
137 if (anau.IsFirstEventInChunk(event))
139 if (!anau.IsVertexSelected2013pA(event))
141 }
else if (run>=260014) {
144 Int_t SPDContributorsCut=5;
145 Bool_t isPileupFromSPD=
event->IsPileupFromSPD(SPDContributorsCut,SPDZDiffCut,3.,2.,5.);
151 const Bool_t checkPlpFromDifferentBC=kFALSE;
152 AliAnalysisUtils anau;
153 anau.SetMinPlpContribMV(minContributors);
154 anau.SetMaxPlpChi2MV(minChi2);
155 anau.SetMinWDistMV(minWeiZDiff);
156 anau.SetCheckPlpFromDifferentBCMV(checkPlpFromDifferentBC);
157 Bool_t isPileupFromMV = anau.IsPileUpMV(event);
160 if (isPileupFromSPD||isPileupFromMV)
168 AliMultSelection *ms =
dynamic_cast<AliMultSelection*
>(InputEvent()->FindListObject(
"MultSelection"));
169 Double_t v0acent=-1,znacent=-1,v0mcent=-1;
171 v0acent = ms->GetMultiplicityPercentile(
"V0A");
172 znacent = ms->GetMultiplicityPercentile(
"ZNA");
173 v0mcent = ms->GetMultiplicityPercentile(
"V0M");
175 AliCentrality *cent = InputEvent()->GetCentrality();
176 v0acent = cent->GetCentralityPercentile(
"V0A");
177 znacent = cent->GetCentralityPercentile(
"ZNA");
178 v0mcent = cent->GetCentralityPercentile(
"V0M");
180 fHists[10]->Fill(v0acent);
181 fHists[11]->Fill(znacent);
182 fHists[12]->Fill(v0mcent);
187 for (
Int_t i=0; i<ntracks; ++i) {
188 AliVTrack *track =
dynamic_cast<AliVTrack*
>(
fTracks->At(i));
191 if (track->Charge()==0)
201 fHists[20]->Fill(phi,eta);
204 if (TMath::Abs(eta)<0.8) {
205 fHists[23]->Fill(pt,v0acent);
206 fHists[24]->Fill(pt,znacent);
209 fHists[25+ttype]->Fill(phi,pt);
211 if (track->IsExtrapolatedToEMCAL()) {
212 Double_t dphi = TVector2::Phi_mpi_pi(phi-track->GetTrackPhiOnEMCal());
213 fHists[28]->Fill(dphi,pt);
215 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(track,440);
216 if (track->IsExtrapolatedToEMCAL()) {
217 Double_t dphi = TVector2::Phi_mpi_pi(phi-track->GetTrackPhiOnEMCal());
218 fHists[29]->Fill(dphi,pt);
221 if (track->IsEMCAL() && track->IsExtrapolatedToEMCAL()) {
222 Int_t id = track->GetEMCALcluster();
223 AliVCluster *clus = InputEvent()->GetCaloCluster(
id);
226 clus->GetPosition(pos);
228 Double_t dphi = TVector2::Phi_mpi_pi(vpos.Phi()-track->GetTrackPhiOnEMCal());
229 fHists[30]->Fill(dphi,pt);
232 if (track->IsExtrapolatedToEMCAL()) {
233 Double_t phi1 = track->GetTrackPhiOnEMCal();
234 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(track,440);
235 Double_t phi2 = track->GetTrackPhiOnEMCal();
236 Double_t dphi = TVector2::Phi_mpi_pi(phi1-phi2);
237 fHists[31]->Fill(dphi,pt);
247 for (
Int_t iMu = 0; iMu<aod->GetNumberOfTracks(); ++iMu) {
248 AliAODTrack* muonTrack =
static_cast<AliAODTrack*
>(aod->GetTrack(iMu));
251 if (!muonTrack->IsMuonTrack())
253 Double_t dThetaAbs = TMath::ATan(muonTrack->GetRAtAbsorberEnd()/505.)* TMath::RadToDeg();
254 if ((dThetaAbs<2.) || (dThetaAbs>10.))
257 if ((dEta<-4.) || (dEta>-2.5))
260 if (muonTrack->GetMatchTrigger()<0.5)
266 fHists[50]->Fill(phiMu,etaMu);
267 fHists[51]->Fill(phiMu,ptMu);
268 fHists[52]->Fill(etaMu,ptMu);
269 fHists[53]->Fill(ptMu,v0acent);
270 fHists[54]->Fill(ptMu,znacent);
275 for (
Int_t iMu = 0; iMu<esd->GetNumberOfMuonTracks(); ++iMu) {
276 AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iMu);
279 if (!muonTrack->ContainTrackerData())
281 Double_t thetaTrackAbsEnd = TMath::ATan(muonTrack->GetRAtAbsorberEnd()/505.) * TMath::RadToDeg();
282 if ((thetaTrackAbsEnd < 2.) || (thetaTrackAbsEnd > 10.))
285 if ((eta < -4.) || (eta > -2.5))
288 if (!muonTrack->ContainTriggerData())
290 if (muonTrack->GetMatchTrigger() < 0.5)
346 AliVVZERO *vzero = InputEvent()->GetVZEROData();
349 Double_t v0m = vzero->GetMTotV0A()+vzero->GetMTotV0C();
368 if (tname.Contains(
"mc"))
372 Int_t Mall=0,M=0,Mall2=0;
373 Double_t ptmaxall=0,ptsumall=0,pt2sumall=0,ptsumall2=0;
384 for (
Int_t i =0; i<ntracks; ++i) {
385 AliVParticle *track =
dynamic_cast<AliVParticle*
>(
fTracks->At(i));
388 if (track->Charge()==0)
391 if ((eta<5.1)&&(eta>2.8))
393 else if ((eta>-3.7)&&(eta<-1.7))
395 if (TMath::Abs(eta)<1.4) {
398 if ((eta<etamin) || (eta>etamax))
415 if ((pt<ptmin) || (pt>ptmax))
426 Q2r += TMath::Cos(2*phi);
427 Q2i += TMath::Sin(2*phi);
428 Q3r += TMath::Cos(3*phi);
429 Q3i += TMath::Sin(3*phi);
430 Q4r += TMath::Cos(4*phi);
431 Q4i += TMath::Sin(4*phi);
432 Q6r += TMath::Cos(6*phi);
433 Q6i += TMath::Sin(6*phi);
448 for (
Int_t i=0; i<ntracks; ++i) {
449 AliVParticle *track1 =
dynamic_cast<AliVParticle*
>(
fTracks->At(i));
452 if (track1->Charge()==0)
455 if ((eta1<etamin) || (eta1>etamax))
458 if ((pt1<ptmin) || (pt1>ptmax))
461 for (
Int_t j = i+1; j<ntracks; ++j) {
462 AliVParticle *track2 =
dynamic_cast<AliVParticle*
>(
fTracks->At(j));
465 if (track2->Charge()==0)
468 if ((eta2<etamin) || (eta2>etamax))
471 if ((pt2<ptmin) || (pt2>ptmax))
475 Double_t deta=TMath::Abs(eta1-eta2);
478 Double_t dphi=TVector2::Phi_0_2pi(phi1-track2->Phi());
480 v2g+=TMath::Cos(2*dphi);
481 v3g+=TMath::Cos(3*dphi);
484 v2g14+=TMath::Cos(2*dphi);
485 v3g14+=TMath::Cos(3*dphi);
489 v2g18+=TMath::Cos(2*dphi);
490 v3g18+=TMath::Cos(3*dphi);
508 std::complex<double> q2(Q2r,Q2i);
509 std::complex<double> q3(Q3r,Q3i);
510 std::complex<double> q4(Q4r,Q4i);
511 std::complex<double> q6(Q6r,Q6i);
512 Double_t Q22 = std::abs(q2)*std::abs(q2);
513 Double_t Q32 = std::abs(q3)*std::abs(q3);
514 Double_t Q42 = std::abs(q4)*std::abs(q4);
515 Double_t Q62 = std::abs(q6)*std::abs(q6);
516 Double_t Q32re = std::real(q6*std::conj(q3)*std::conj(q3));
517 Double_t Q42re = std::real(q4*std::conj(q2)*std::conj(q2));
518 Double_t Q6are = std::real(q4*q2*std::conj(q2)*std::conj(q2)*std::conj(q2));
519 Double_t Q6bre = std::real(q6*std::conj(q2)*std::conj(q2)*std::conj(q2));
520 Double_t Q6cre = std::real(q6*std::conj(q4)*std::conj(q2));
523 Double_t tsax = (tsa00+tsa11)*(tsa00+tsa11)-4*(tsa00*tsa11-tsa10*tsa10);
525 Double_t l1 = 0.5*(tsa00+tsa11+TMath::Sqrt(tsax))/ptsumall;
526 Double_t l2 = 0.5*(tsa00+tsa11-TMath::Sqrt(tsax))/ptsumall;
527 tsall = 2*l2/(l1+l2);
531 Double_t tsx = (ts00+ts11)*(ts00+ts11)-4*(ts00*ts11-ts10*ts10);
533 Double_t l1 = 0.5*(ts00+ts11+TMath::Sqrt(tsx))/ptsumall;
534 Double_t l2 = 0.5*(ts00+ts11-TMath::Sqrt(tsx))/ptsumall;
542 AliCentrality *cent = InputEvent()->GetCentrality();
553 AliAnalysisUtils anau;
554 AliVEvent *
event = InputEvent();
557 fNtupCumInfo->
fTrig = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected();
592 AliVVZERO *vzero = InputEvent()->GetVZEROData();
596 AliMultSelection *ms =
dynamic_cast<AliMultSelection*
>(InputEvent()->FindListObject(
"MultSelection"));
605 AliCentrality *cent = InputEvent()->GetCentrality();
614 AliVZDC *vZDC = InputEvent()->GetZDCData();
615 const Double_t *znaTowers = vZDC->GetZNATowerEnergy();
630 Bool_t fillCumHist = kTRUE;
632 Int_t run = InputEvent()->GetRunNumber();
634 if ((run>=188356&&run<=188366) || (run>=195344&&run<=197388)) {
635 if (anau.IsFirstEventInChunk(event))
636 fillCumHist = kFALSE;
637 if (!anau.IsVertexSelected2013pA(event))
638 fillCumHist = kFALSE;
641 Double_t vz = InputEvent()->GetPrimaryVertex()->GetZ();
642 if (TMath::Abs(vz)>10)
643 fillCumHist = kFALSE;
646 AliVVZERO *vzero = InputEvent()->GetVZEROData();
649 Double_t v0m = vzero->GetMTotV0A()+vzero->GetMTotV0C();
656 fHists[114]->Fill(M,(Q22-M)/M/(M-1));
657 fHists[120]->Fill(M,(Q32-M)/M/(M-1));
660 fHists[124]->Fill(M,v2g14);
661 fHists[125]->Fill(M,v3g14);
662 fHists[126]->Fill(M,v2g18);
663 fHists[127]->Fill(M,v3g18);
664 fHists[130]->Fill(M,Q2r/M);
665 fHists[131]->Fill(M,Q2i/M);
666 fHists[132]->Fill(M,Q3r/M);
667 fHists[133]->Fill(M,Q3i/M);
668 fHists[134]->Fill(M,Q4r/M);
669 fHists[135]->Fill(M,Q4i/M);
670 fHists[136]->Fill(M,Q6r/M);
671 fHists[137]->Fill(M,Q6i/M);
674 Double_t qc4tmp = (Q22*Q22+Q42-2*Q42re-4*(M-2)*Q22+2*M*(M-3));
675 fHists[115]->Fill(M,qc4tmp/M/(M-1)/(M-2)/(M-3));
676 qc4tmp = (Q32*Q32+Q62-2*Q32re-4*(M-2)*Q32+2*M*(M-3));
677 fHists[121]->Fill(M,qc4tmp/M/(M-1)/(M-2)/(M-3));
680 Double_t qc6tmp = Q22*Q22*Q22 + 9*Q42*Q22 - 6*Q6are
682 + 18*(M-4)*Q42re + 4*Q62
683 - 9*(M-4)*Q22*Q22 - 9*(M-4)*Q42
686 fHists[116]->Fill(M,qc6tmp/M/(M-1)/(M-2)/(M-3)/(M-4)/(M-5));
692 for (
Int_t i =0; i<ntracks; ++i) {
693 AliVParticle *track1 =
dynamic_cast<AliVParticle*
>(
fTracks->At(i));
702 if ((eta1<etamin) || (eta1>etamax))
704 if ((pt1<ptmin) || (pt1>ptmax))
706 for (
Int_t j =0; j<ntracks; ++j) {
707 AliVParticle *track2 =
dynamic_cast<AliVParticle*
>(
fTracks->At(j));
711 if ((eta2<etamin) || (eta2>etamax))
714 if ((pt2<ptmin) || (pt2>ptmax))
719 while (dphi<-TMath::Pi())
720 dphi+=TMath::TwoPi();
721 while (dphi>3*TMath::Pi()/2)
722 dphi-=TMath::TwoPi();
769 AliPhysicsSelectionTask *t=
dynamic_cast<AliPhysicsSelectionTask*
>(am->GetTopTasks()->At(0));
771 AliPhysicsSelection *ps=t->GetPhysicsSelection();
772 fOutput->Add(ps->GetStatistics(
""));
776 fHists[0] =
new TH1D(
"fTrigBits",
";bit",32,-0.5,31.5);
778 fHists[1] =
new TH1D(
"fVertexZ",
";vertex z (cm)",51,-25.5,25.5);
780 fHists[2] =
new TH1D(
"fVertexZnc",
";vertex z (cm)",51,-25.5,25.5);
782 fHists[3] =
new TH1D(
"fVertexCuts",
"",1,0.5,2.5);
784 fHists[9] =
new TProfile(
"fAccepted",
"",1,0.5,1.5);
786 fHists[10] =
new TH1D(
"fV0ACent",
";percentile",20,0,100);
788 fHists[11] =
new TH1D(
"fZNACent",
";percentile",20,0,100);
790 fHists[12] =
new TH1D(
"fV0MCent",
";percentile",20,0,100);
794 fHists[20] =
new TH2D(
"fPhiEtaTracks",
";#phi;#eta",60,0,TMath::TwoPi(),20,-2,2);
797 fHists[21] =
new TH2D(
"fPhiPtTracks",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20);
800 fHists[22] =
new TH2D(
"fEtaPtTracks",
";#eta;p_{T} (GeV/c)",20,-2,2,40,0,20);
803 fHists[23] =
new TH2D(
"fPtV0ATracks",
";#p_{T} (GeV/c);percentile",100,0,20,20,0,100);
806 fHists[24] =
new TH2D(
"fPtZNATracks",
";#p_{T} (GeV/c);percentile",100,0,20,20,0,100);
809 fHists[25] =
new TH2D(
"fPhiPtTracks_type0",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20);
812 fHists[26] =
new TH2D(
"fPhiPtTracks_type1",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20);
815 fHists[27] =
new TH2D(
"fPhiPtTracks_type2",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20);
819 fHists[28] =
new TH2D(
"fDPhiPtTracks",
";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20);
822 fHists[29] =
new TH2D(
"fDPhiPtTracks2",
";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20);
825 fHists[30] =
new TH2D(
"fDPhiPtClusTracks",
";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20);
828 fHists[31] =
new TH2D(
"fDPhiPtReTracks",
";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20);
835 fHists[50] =
new TH2D(
"fPhiEtaMuonTracks",
";#phi;#eta",60,0,TMath::TwoPi(),15,-4,-2.5);
838 fHists[51] =
new TH2D(
"fPhiPtMuonTracks",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),200,0,20);
841 fHists[52] =
new TH2D(
"fEtaPtMuonTracks",
";#eta;p_{T} (GeV/c)",15,-4,-2.5,200,0,20);
844 fHists[53] =
new TH2D(
"fPtV0AMuonTracks",
";#p_{T} (GeV/c);percentile",100,0,10,20,0,100);
847 fHists[54] =
new TH2D(
"fPtZNAMuonTracks",
";#p_{T} (GeV/c);percentile",100,0,10,20,0,100);
862 for (
Int_t i=0; i<l->GetEntries(); ++i)
875 fHists[100] =
new TH3D(
"fCumPhiEtaCl1",
";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100);
877 fHists[101] =
new TH3D(
"fCumPhiEtaV0A",
";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100);
879 fHists[102] =
new TH3D(
"fCumPhiEtaZNA",
";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100);
881 fHists[103] =
new TH3D(
"fCumPtEtaCl1",
";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100);
883 fHists[104] =
new TH3D(
"fCumPtEtaV0A",
";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100);
885 fHists[105] =
new TH3D(
"fCumPtEtaZNA",
";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100);
893 fHists[109] =
new TH1D(
"fCumCl1Cent",
";percentile",10,0,100);
895 fHists[110] =
new TH1D(
"fCumV0ACent",
";percentile",10,0,100);
897 fHists[111] =
new TH1D(
"fCumZNACent",
";percentile",10,0,100);
934 fHists[128] =
new TH3D(
"fDPhiDEtaTracks",
";#Delta#phi;#Delta#eta;M",64,-0.5*TMath::Pi(),1.5*TMath::Pi(),60,-3,3,
fCumMbins/10,0,
fCumMbins);
957 fNtupCum =
new TTree(
"NtupCum",
"Ntuple for cumulant analysis");
963 f->SetCompressionLevel(2);
965 fNtupCum->SetAutoFlush(-4*1024*1024);
984 f->SetCompressionLevel(2);
986 fNtupHet->SetAutoFlush(-4*1024*1024);
void RunHet(Double_t Etmin)
void SetHetParams(Double_t Etmin)
Base task in the EMCAL framework.
void AddQC4withEG(Double_t etagap)
virtual ~AliAnalysisTaskCLQA()
Double_t DeltaPhi(Double_t phia, Double_t phib, Double_t rangeMin=-TMath::Pi()/2, Double_t rangeMax=3 *TMath::Pi()/2) const
pointer to cumulant class
AliNtupZdcInfo * fNtupZdcInfo
object holding cumulant results
void SetKine(Double_t etamin, Double_t etamax, Double_t ptmin, Double_t ptmax)
void SetCumParams(Double_t Mmin, Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax)
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
void SetTracks(TObjArray &trks, Bool_t doKinCuts=1)
Byte_t GetTrackType() const
virtual Bool_t RetrieveEventObjects()
Retrieve common objects from event.
AliNtupHetInfo * fNtupHetInfo
ntuple for het analysis
Bool_t FillHistograms()
Function filling histograms.
AliVTrack * GetTrack() const
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
AliEmcalList * fOutput
!output list
TClonesArray * fTracks
!tracks
TH1 * fHists[1000]
object holding het info
Cumulants * fCum
pointers to histograms
void UserCreateOutputObjects()
Main initialization function on the worker.
AliNtupCumInfo * fNtupCumInfo
ntuple for cumulant analysis
TList * OpenFile(const char *fname)
TTree * fNtupHet
object holding zdc info
void UserCreateOutputObjects()