10 #include <TClonesArray.h>
11 #include <TDirectory.h>
17 #include <TLorentzVector.h>
22 #include "AliESDMuonTrack.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"
32 #include "AliExternalTrackParam.h"
33 #include "AliInputEventHandler.h"
36 #include "AliTrackerBase.h"
37 #include "AliVCluster.h"
38 #include "AliVEventHandler.h"
39 #include "AliVParticle.h"
40 #include "AliVTrack.h"
49 fDoTracking(1), fDoMuonTracking(0), fDoCumulants(0), fDoCumNtuple(0),
50 fCumPtMin(0.3), fCumPtMax(5.0), fCumEtaMin(-1.0), fCumEtaMax(1.0), fCumMmin(15),
51 fCumMbins(250), fCentCL1In(0), fCentV0AIn(0),
52 fNtupCum(0), fNtupCumInfo(0), fNtupZdcInfo(0)
56 for (Int_t i=0;i<1000;++i)
64 fDoTracking(1), fDoMuonTracking(0), fDoCumulants(0), fDoCumNtuple(0),
65 fCumPtMin(0.3), fCumPtMax(5.0), fCumEtaMin(-1.0), fCumEtaMax(1.0), fCumMmin(15),
66 fCumMbins(250), fCentCL1In(0), fCentV0AIn(0),
67 fNtupCum(0), fNtupCumInfo(0), fNtupZdcInfo(0)
71 for (Int_t i=0;i<1000;++i)
83 Double_t rangeMin, Double_t rangeMax)
const
88 Double_t
pi = TMath::Pi();
90 if (phia < 0) phia += 2*
pi;
91 else if (phia > 2*pi) phia -= 2*
pi;
92 if (phib < 0) phib += 2*
pi;
93 else if (phib > 2*pi) phib -= 2*
pi;
95 if (dphi < rangeMin) dphi += 2*
pi;
96 else if (dphi > rangeMax) dphi -= 2*
pi;
106 AliVEvent *
event = InputEvent();
107 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
109 UInt_t trig = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected();
110 for (Int_t i=0;i<31;++i) {
115 Double_t vz =
event->GetPrimaryVertex()->GetZ();
118 Int_t run =
event->GetRunNumber();
119 Int_t vzn =
event->GetPrimaryVertex()->GetNContributors();
120 if ((vzn<1)&&(run>0))
124 if (TMath::Abs(vz)>10)
128 if ((run>=188356&&run<=188366) || (run>=195344&&run<=197388)) {
129 AliAnalysisUtils anau;
130 if (anau.IsFirstEventInChunk(event))
132 if (!anau.IsVertexSelected2013pA(event))
140 AliCentrality *cent = InputEvent()->GetCentrality();
141 Double_t v0acent = cent->GetCentralityPercentile(
"V0A");
142 fHists[10]->Fill(v0acent);
143 Double_t znacent = cent->GetCentralityPercentile(
"ZNA");
144 fHists[11]->Fill(znacent);
145 Double_t v0mcent = cent->GetCentralityPercentile(
"V0M");
146 fHists[12]->Fill(v0mcent);
149 const Int_t ntracks =
fTracks->GetEntries();
151 for (Int_t i=0; i<ntracks; ++i) {
152 AliVTrack *track =
dynamic_cast<AliVTrack*
>(
fTracks->At(i));
155 if (track->Charge()==0)
162 Double_t phi = track->Phi();
163 Double_t eta = track->Eta();
164 Double_t pt = track->Pt();
165 fHists[20]->Fill(phi,eta);
168 if (TMath::Abs(eta)<0.8) {
169 fHists[23]->Fill(pt,v0acent);
170 fHists[24]->Fill(pt,znacent);
173 fHists[25+ttype]->Fill(phi,pt);
174 if (track->IsExtrapolatedToEMCAL()) {
175 Double_t dphi = TVector2::Phi_mpi_pi(phi-track->GetTrackPhiOnEMCal());
176 fHists[28]->Fill(dphi,pt);
178 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(track,440);
179 if (track->IsExtrapolatedToEMCAL()) {
180 Double_t dphi = TVector2::Phi_mpi_pi(phi-track->GetTrackPhiOnEMCal());
181 fHists[29]->Fill(dphi,pt);
184 if (track->IsEMCAL() && track->IsExtrapolatedToEMCAL()) {
185 Int_t
id = track->GetEMCALcluster();
186 AliVCluster *clus = InputEvent()->GetCaloCluster(
id);
189 clus->GetPosition(pos);
191 Double_t dphi = TVector2::Phi_mpi_pi(vpos.Phi()-track->GetTrackPhiOnEMCal());
192 fHists[30]->Fill(dphi,pt);
195 if (track->IsExtrapolatedToEMCAL()) {
196 Double_t phi1 = track->GetTrackPhiOnEMCal();
197 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(track,440);
198 Double_t phi2 = track->GetTrackPhiOnEMCal();
199 Double_t dphi = TVector2::Phi_mpi_pi(phi1-phi2);
200 fHists[31]->Fill(dphi,pt);
207 AliAODEvent *aod =
dynamic_cast<AliAODEvent*
>(InputEvent());
209 for (Int_t iMu = 0; iMu<aod->GetNumberOfTracks(); ++iMu) {
210 AliAODTrack* muonTrack =
static_cast<AliAODTrack*
>(aod->GetTrack(iMu));
213 if (!muonTrack->IsMuonTrack())
215 Double_t dThetaAbs = TMath::ATan(muonTrack->GetRAtAbsorberEnd()/505.)* TMath::RadToDeg();
216 if ((dThetaAbs<2.) || (dThetaAbs>10.))
218 Double_t dEta = muonTrack->Eta();
219 if ((dEta<-4.) || (dEta>-2.5))
222 if (muonTrack->GetMatchTrigger()<0.5)
225 Double_t ptMu = muonTrack->Pt();
226 Double_t etaMu = muonTrack->Eta();
227 Double_t phiMu = muonTrack->Phi();
228 fHists[50]->Fill(phiMu,etaMu);
229 fHists[51]->Fill(phiMu,ptMu);
230 fHists[52]->Fill(etaMu,ptMu);
231 fHists[53]->Fill(ptMu,v0acent);
232 fHists[54]->Fill(ptMu,znacent);
235 AliESDEvent *esd =
dynamic_cast<AliESDEvent*
>(InputEvent());
237 for (Int_t iMu = 0; iMu<esd->GetNumberOfMuonTracks(); ++iMu) {
238 AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iMu);
241 if (!muonTrack->ContainTrackerData())
243 Double_t thetaTrackAbsEnd = TMath::ATan(muonTrack->GetRAtAbsorberEnd()/505.) * TMath::RadToDeg();
244 if ((thetaTrackAbsEnd < 2.) || (thetaTrackAbsEnd > 10.))
246 Double_t eta = muonTrack->Eta();
247 if ((eta < -4.) || (eta > -2.5))
250 if (!muonTrack->ContainTriggerData())
252 if (muonTrack->GetMatchTrigger() < 0.5)
296 TString tname(
fTracks->GetName());
297 if (tname.Contains(
"mc"))
300 const Int_t ntracks =
fTracks->GetEntries();
301 Int_t Mall=0,M=0,Mall2=0;
302 Double_t ptmaxall=0,ptsumall=0,pt2sumall=0,ptsumall2=0;
303 Double_t tsa00=0,tsa10=0,tsa11=0;
304 Double_t Q2r=0,Q2i=0;
305 Double_t Q3r=0,Q3i=0;
306 Double_t Q4r=0,Q4i=0;
307 Double_t Q6r=0,Q6i=0;
308 Double_t mpt=0,mpt2=0,ptmaxq=0;
309 Double_t ts00=0,ts10=0,ts11=0;
310 Double_t v0ach=0, v0cch=0;
313 for (Int_t i =0; i<ntracks; ++i) {
314 AliVParticle *track =
dynamic_cast<AliVParticle*
>(
fTracks->At(i));
317 if (track->Charge()==0)
319 Double_t eta = track->Eta();
320 if ((eta<5.1)&&(eta>2.8))
322 else if ((eta>-3.7)&&(eta<-1.7))
324 if (TMath::Abs(eta)<1.4) {
327 if ((eta<etamin) || (eta>etamax))
329 Double_t pt = track->Pt();
338 Double_t px = track->Px();
339 Double_t py = track->Py();
344 if ((pt<ptmin) || (pt>ptmax))
348 Double_t phi = track->Phi();
355 Q2r += TMath::Cos(2*phi);
356 Q2i += TMath::Sin(2*phi);
357 Q3r += TMath::Cos(3*phi);
358 Q3i += TMath::Sin(3*phi);
359 Q4r += TMath::Cos(4*phi);
360 Q4i += TMath::Sin(4*phi);
361 Q6r += TMath::Cos(6*phi);
362 Q6i += TMath::Sin(6*phi);
377 for (Int_t i=0; i<ntracks; ++i) {
378 AliVParticle *track1 =
dynamic_cast<AliVParticle*
>(
fTracks->At(i));
381 if (track1->Charge()==0)
383 Double_t eta1 = track1->Eta();
384 if ((eta1<etamin) || (eta1>etamax))
386 Double_t pt1 = track1->Pt();
387 if ((pt1<ptmin) || (pt1>ptmax))
389 Double_t phi1 = track1->Phi();
390 for (Int_t j = i+1; j<ntracks; ++j) {
391 AliVParticle *track2 =
dynamic_cast<AliVParticle*
>(
fTracks->At(j));
394 if (track2->Charge()==0)
396 Double_t eta2 = track2->Eta();
397 if ((eta2<etamin) || (eta2>etamax))
399 Double_t pt2 = track2->Pt();
400 if ((pt2<ptmin) || (pt2>ptmax))
402 Double_t deta=TMath::Abs(eta2-eta1);
407 Double_t dphi=TVector2::Phi_0_2pi(phi1-track2->Phi());
409 v2g+=TMath::Cos(2*dphi);
410 v3g+=TMath::Cos(3*dphi);
413 v2g14+=TMath::Cos(2*dphi);
414 v3g14+=TMath::Cos(3*dphi);
418 v2g18+=TMath::Cos(2*dphi);
419 v3g18+=TMath::Cos(3*dphi);
437 std::complex<double> q2(Q2r,Q2i);
438 std::complex<double> q3(Q3r,Q3i);
439 std::complex<double> q4(Q4r,Q4i);
440 std::complex<double> q6(Q6r,Q6i);
441 Double_t Q22 = std::abs(q2)*std::abs(q2);
442 Double_t Q32 = std::abs(q3)*std::abs(q3);
443 Double_t Q42 = std::abs(q4)*std::abs(q4);
444 Double_t Q62 = std::abs(q6)*std::abs(q6);
445 Double_t Q32re = std::real(q6*std::conj(q3)*std::conj(q3));
446 Double_t Q42re = std::real(q4*std::conj(q2)*std::conj(q2));
447 Double_t Q6are = std::real(q4*q2*std::conj(q2)*std::conj(q2)*std::conj(q2));
448 Double_t Q6bre = std::real(q6*std::conj(q2)*std::conj(q2)*std::conj(q2));
449 Double_t Q6cre = std::real(q6*std::conj(q4)*std::conj(q2));
452 Double_t tsax = (tsa00+tsa11)*(tsa00+tsa11)-4*(tsa00*tsa11-tsa10*tsa10);
454 Double_t l1 = 0.5*(tsa00+tsa11+TMath::Sqrt(tsax))/ptsumall;
455 Double_t l2 = 0.5*(tsa00+tsa11-TMath::Sqrt(tsax))/ptsumall;
456 tsall = 2*l2/(l1+l2);
460 Double_t tsx = (ts00+ts11)*(ts00+ts11)-4*(ts00*ts11-ts10*ts10);
462 Double_t l1 = 0.5*(ts00+ts11+TMath::Sqrt(tsx))/ptsumall;
463 Double_t l2 = 0.5*(ts00+ts11-TMath::Sqrt(tsx))/ptsumall;
471 AliCentrality *cent = InputEvent()->GetCentrality();
482 AliAnalysisUtils anau;
483 AliVEvent *
event = InputEvent();
484 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
486 fNtupCumInfo->
fTrig = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected();
521 AliVVZERO *vzero = InputEvent()->GetVZEROData();
525 AliCentrality *cent = InputEvent()->GetCentrality();
533 AliVZDC *vZDC = InputEvent()->GetZDCData();
534 const Double_t *znaTowers = vZDC->GetZNATowerEnergy();
549 Bool_t fillCumHist = kTRUE;
551 Int_t run = InputEvent()->GetRunNumber();
553 if ((run>=188356&&run<=188366) || (run>=195344&&run<=197388)) {
554 if (anau.IsFirstEventInChunk(event))
555 fillCumHist = kFALSE;
556 if (!anau.IsVertexSelected2013pA(event))
557 fillCumHist = kFALSE;
560 Double_t vz = InputEvent()->GetPrimaryVertex()->GetZ();
561 if (TMath::Abs(vz)>10)
562 fillCumHist = kFALSE;
565 AliVVZERO *vzero = InputEvent()->GetVZEROData();
566 Double_t v0a = vzero->GetMTotV0A();
567 Double_t v0c = vzero->GetMTotV0C();
568 Double_t v0m = vzero->GetMTotV0A()+vzero->GetMTotV0C();
575 fHists[114]->Fill(M,(Q22-M)/M/(M-1));
576 fHists[120]->Fill(M,(Q32-M)/M/(M-1));
579 fHists[124]->Fill(M,v2g14);
580 fHists[125]->Fill(M,v3g14);
581 fHists[126]->Fill(M,v2g18);
582 fHists[127]->Fill(M,v3g18);
585 Double_t qc4tmp = (Q22*Q22+Q42-2*Q42re-4*(M-2)*Q22+2*M*(M-3));
586 fHists[115]->Fill(M,qc4tmp/M/(M-1)/(M-2)/(M-3));
587 qc4tmp = (Q32*Q32+Q62-2*Q32re-4*(M-2)*Q32+2*M*(M-3));
588 fHists[121]->Fill(M,qc4tmp/M/(M-1)/(M-2)/(M-3));
591 Double_t qc6tmp = Q22*Q22*Q22 + 9*Q42*Q22 - 6*Q6are
593 + 18*(M-4)*Q42re + 4*Q62
594 - 9*(M-4)*Q22*Q22 - 9*(M-4)*Q42
597 fHists[116]->Fill(M,qc6tmp/M/(M-1)/(M-2)/(M-3)/(M-4)/(M-5));
603 for (Int_t i =0; i<ntracks; ++i) {
604 AliVParticle *track1 =
dynamic_cast<AliVParticle*
>(
fTracks->At(i));
607 Double_t phi1 = track1->Phi();
608 Double_t eta1 = track1->Eta();
609 Double_t pt1 = track1->Pt();
613 if ((eta1<etamin) || (eta1>etamax))
615 if ((pt1<ptmin) || (pt1>ptmax))
617 for (Int_t j =0; j<ntracks; ++j) {
618 AliVParticle *track2 =
dynamic_cast<AliVParticle*
>(
fTracks->At(j));
621 Double_t eta2 = track2->Eta();
622 if ((eta2<etamin) || (eta2>etamax))
624 Double_t pt2 = track2->Pt();
625 if ((pt2<ptmin) || (pt2>ptmax))
627 Double_t phi2 = track2->Phi();
628 Double_t deta = eta1-eta2;
629 Double_t dphi = phi1-phi2;
630 while (dphi<-TMath::Pi())
631 dphi+=TMath::TwoPi();
632 while (dphi>3*TMath::Pi()/2)
633 dphi-=TMath::TwoPi();
661 fHists[0] =
new TH1D(
"fTrigBits",
";bit",32,-0.5,31.5);
663 fHists[1] =
new TH1D(
"fVertexZ",
";vertex z (cm)",51,-25.5,25.5);
665 fHists[2] =
new TH1D(
"fVertexZnc",
";vertex z (cm)",51,-25.5,25.5);
667 fHists[9] =
new TProfile(
"fAccepted",
"",1,0.5,1.5);
669 fHists[10] =
new TH1D(
"fV0ACent",
";percentile",20,0,100);
671 fHists[11] =
new TH1D(
"fZNACent",
";percentile",20,0,100);
673 fHists[12] =
new TH1D(
"fV0MCent",
";percentile",20,0,100);
677 fHists[20] =
new TH2D(
"fPhiEtaTracks",
";#phi;#eta",60,0,TMath::TwoPi(),20,-2,2);
680 fHists[21] =
new TH2D(
"fPhiPtTracks",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20);
683 fHists[22] =
new TH2D(
"fEtaPtTracks",
";#eta;p_{T} (GeV/c)",20,-2,2,40,0,20);
686 fHists[23] =
new TH2D(
"fPtV0ATracks",
";#p_{T} (GeV/c);percentile",100,0,20,20,0,100);
689 fHists[24] =
new TH2D(
"fPtZNATracks",
";#p_{T} (GeV/c);percentile",100,0,20,20,0,100);
692 fHists[25] =
new TH2D(
"fPhiPtTracks_type0",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20);
695 fHists[26] =
new TH2D(
"fPhiPtTracks_type1",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20);
698 fHists[27] =
new TH2D(
"fPhiPtTracks_type2",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),40,0,20);
701 fHists[28] =
new TH2D(
"fDPhiPtTracks",
";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20);
704 fHists[29] =
new TH2D(
"fDPhiPtTracks2",
";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20);
707 fHists[30] =
new TH2D(
"fDPhiPtClusTracks",
";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20);
710 fHists[31] =
new TH2D(
"fDPhiPtReTracks",
";#Delta#phi;p_{T} (GeV/c)",60,-TMath::Pi(),TMath::Pi(),40,0,20);
716 fHists[50] =
new TH2D(
"fPhiEtaMuonTracks",
";#phi;#eta",60,0,TMath::TwoPi(),15,-4,-2.5);
719 fHists[51] =
new TH2D(
"fPhiPtMuonTracks",
";#phi;p_{T} (GeV/c)",60,0,TMath::TwoPi(),200,0,20);
722 fHists[52] =
new TH2D(
"fEtaPtMuonTracks",
";#eta;p_{T} (GeV/c)",15,-4,-2.5,200,0,20);
725 fHists[53] =
new TH2D(
"fPtV0AMuonTracks",
";#p_{T} (GeV/c);percentile",100,0,10,20,0,100);
728 fHists[54] =
new TH2D(
"fPtZNAMuonTracks",
";#p_{T} (GeV/c);percentile",100,0,10,20,0,100);
734 fHists[100] =
new TH3D(
"fCumPhiEtaCl1",
";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100);
736 fHists[101] =
new TH3D(
"fCumPhiEtaV0A",
";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100);
738 fHists[102] =
new TH3D(
"fCumPhiEtaZNA",
";#Delta#phi;#Delta#eta",32,-TMath::Pi()/2,3*TMath::Pi()/2,60,-3,3,10,0,100);
740 fHists[103] =
new TH3D(
"fCumPtEtaCl1",
";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100);
742 fHists[104] =
new TH3D(
"fCumPtEtaV0A",
";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100);
744 fHists[105] =
new TH3D(
"fCumPtEtaZNA",
";p_{T} (GeV/c);#eta",100,0,25,20,-2,2,10,0,100);
752 fHists[109] =
new TH1D(
"fCumCl1Cent",
";percentile",10,0,100);
754 fHists[110] =
new TH1D(
"fCumV0ACent",
";percentile",10,0,100);
756 fHists[111] =
new TH1D(
"fCumZNACent",
";percentile",10,0,100);
793 fHists[128] =
new TH3D(
"fDPhiDEtaTracks",
";#Delta#phi;#Delta#eta;M",64,-0.5*TMath::Pi(),1.5*TMath::Pi(),60,-3,3,
801 fNtupCum =
new TTree(
"NtupCum",
"Ntuple for cumulant analysis");
805 TFile *f = OpenFile(1);
807 f->SetCompressionLevel(2);
809 fNtupCum->SetAutoFlush(-4*1024*1024);
Base task in the EMCAL framework.
ClassImp(AliAnalysisTaskCLQA) AliAnalysisTaskCLQA
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
pointers to histograms
AliNtupZdcInfo * fNtupZdcInfo
object holding cumulant results
void SetCumParams(Double_t Mmin, Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax)
Byte_t GetTrackType() const
virtual Bool_t RetrieveEventObjects()
AliVTrack * GetTrack() const
Bool_t RetrieveEventObjects()
AliEmcalList * fOutput
!output list
TClonesArray * fTracks
!tracks
TH1 * fHists[1000]
object holding zdc info
void UserCreateOutputObjects()
AliNtupCumInfo * fNtupCumInfo
ntuple for cumulant analysis
void RunCumulants(Double_t Mmin, Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax)
void UserCreateOutputObjects()