8 #include <TClonesArray.h> 12 #include <THnSparse.h> 14 #include <TLorentzVector.h> 18 #include "AliAnalysisManager.h" 19 #include "AliCentrality.h" 20 #include "AliVCluster.h" 21 #include "AliVParticle.h" 22 #include "AliVTrack.h" 23 #include "AliAODTrack.h" 25 #include "AliVEventHandler.h" 26 #include "AliAODEvent.h" 27 #include "AliExternalTrackParam.h" 28 #include "AliTrackerBase.h" 30 #include "AliEMCALGeometry.h" 31 #include "AliEMCALGeoParams.h" 33 #include "AliVVZERO.h" 34 #include "AliESDUtils.h" 48 fMaxCellsInCluster(50),
50 fParticleLevel(kFALSE),
59 fHistClusPairInvarMass(0),
60 fHistClusPairInvarMasspTSlice(0),
62 fHistClusPairInvarMasspT(0),
63 fHistClusPairInvarMassE(0),
64 fHistClusPairInvarMassPlay(0),
69 fHistNoClus_ptH_tr(0),
73 fHistpt_assHadron_tr(0),
78 fAODfilterBits[0] = 0;
79 fAODfilterBits[1] = 0;
81 fRtoD=180.0/TMath::Pi();
83 SetMakeGeneralHistograms(kTRUE);
93 if (
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())
107 fOutputList1->SetName(
"p_{T} distributions of the gamma");
110 fOutputList2->SetName(
"p_{T} distributions of the associated hadrons, for a given p_{T}^{gamma}");
113 fOutputList3->SetName(
"Delta phi^{g-h} for a given p_{T}^{gamma}");
142 fHistClusPairInvarMass =
new TH1F(
"fHistClusPairInvarMass",
"Invariant Mass of Cluster Pairs;Invariant Mass of Pair;dN/dm",200, 0, 1);
147 fHistClusPairInvarMasspT =
new TH2F(
"fHistClusPairInvarMasspT",
"Invariant Mass of Cluster Pairs;Invariant Mass of Pair;p_{T} of Pi0",200, 0, 1, 100, 0, 20);
149 fHistClusPairInvarMassE =
new TH2F(
"fHistClusPairInvarMassE",
"Invariant Mass of Cluster Pairs;Invariant Mass of Pair;Energy of Pi0",200, 0, 1, 100, 0, 5);
151 fHistClusPairInvarMassPlay =
new TH2F(
"fHistClusPairInvarMassPlay",
"Invariant Mass of Cluster Pairs;Invariant Mass of Pair; Angular distance",200, 0, 1, 100, 0, 6);
153 fHistReadout =
new TH1F(
"fHistReadout",
"Particle ID",1000, 0, .004);
160 fHistNoClus_pt =
new TH1F(Form(
"fHistNoClus_pt_%0d",1),Form(
"fHistNoClus_pt_%0d",1), nbins[0], min[0], max[0]);
165 fHistNoClus_pt_tr =
new TH1F(Form(
"fHistNoTrClus_pt_tr_%0d",1),Form(
"fHistNoTrClus_pt_tr_%0d",1), nbins[0], min[0], max[0]);
170 fHistNoClus_ptH =
new TH1F(Form(
"fHistNoClus_ptH_%0d",1),Form(
"fHistNoClus_ptH_%0d",1), nbins[0], min[0], max[0]);
175 fHistNoClus_ptH_tr =
new TH1F(Form(
"fHistNoClus_ptH_tr_%0d",1),Form(
"fHistNoClus_ptH_tr_%0d",1), nbins[0], min[0], max[0]);
187 fHist_DetaDphi =
new TH2F(Form(
"fHist_DetaDphi_%0d",1),Form(
"fHist_DetaDphi_%0d",1),nbins[2],min[2],max[2],nbins[3],min[3],max[3]);
188 fHist_DetaDphi->GetXaxis()->SetTitle(Form(
"#Delta #Phi^{#gamma-h} %0.1d<p_{T}^{#gamma}<%0.1d",0,100));
189 fHist_DetaDphi->GetYaxis()->SetTitle(Form(
"#Delta #eta^{#gamma-h} %0.1d<p_{T}^{#gamma}<%0.1d",0,100));
194 fHistpi0 =
new TH1F(Form(
"fHistpi0_%0d",1),Form(
"fHistpi0_%0d",1), 500, 0, 0.5);
195 fHistpi0->GetXaxis()->SetTitle(
"M_{#gamma#gamma}");
196 fHistpi0->GetYaxis()->SetTitle(
"Entries");
204 Int_t NoOfDPhistos = nbins[0];
211 for(
Int_t i=0; i<NoOfDPhistos+1; i++)
221 BinValStart =
fHistNoClus_ptH->GetXaxis()->GetBinCenter(1)-BinWidth/2.0;
228 BinValStart =
fHistNoClus_ptH->GetXaxis()->GetBinCenter(i)-BinWidth/2.0;
234 fHistpt_assHadron[i] =
new TH1F(Form(
"fHistAssHadron_pt_%0d",i),Form(
"fHistAssHadron_pt_%0d",i), nbins[1], min[1], max[1]);
235 fHistpt_assHadron[i]->GetXaxis()->SetTitle(Form(
"p_{T}^{assoc. h} %0.1f<p_{T}^{#gamma}<%0.1f",BinValStart,BinValStart+BinWidth));
238 fHistpt_assHadron_tr[i] =
new TH1F(Form(
"fHistAssHadron_pt_tr_%0d",i),Form(
"fHistAssHadron_pt_tr_%0d",i), nbins[1], min[1], max[1]);
239 fHistpt_assHadron_tr[i]->GetXaxis()->SetTitle(Form(
"p_{T}^{assoc. h} %0.1f<p_{T}^{trigg. #gamma}<%0.1f",BinValStart,BinValStart+BinWidth));
247 fHist_DP_gh[i] =
new TH1F(Form(
"fHist_DP_gh_%0d",i),Form(
"fHist_DP_gh_%0d",i), nbins[2], min[2], max[2]);
248 fHist_DP_gh[i]->GetXaxis()->SetTitle(Form(
"#Delta #Phi^{#gamma-h} %0.1f<p_{T}^{#gamma}<%0.1f",BinValStart,BinValStart+BinWidth));
249 fHist_DP_gh[i]->GetYaxis()->SetTitle(Form(
"dN^{#gamma-h}/#Delta #Phi^{#gamma-h} [counts/%0.1f^{#circ}]",
fHist_DP_gh[i]->GetBinWidth(1)));
279 AliCentrality *aliCent = InputEvent()->GetCentrality();
302 AliVCluster *leadingClus = 0;
304 AliDebug(2,Form(
"%d clusters found in the event", nclusters));
313 AliVCaloCells *cells = InputEvent()->GetEMCALCells();
317 const Int_t ncells = cells->GetNumberOfCells();
320 for(
Int_t pos = 0; pos < ncells; pos++)
322 Float_t amp = cells->GetAmplitude(pos);
323 Int_t absId = cells->GetCellNumber(pos);
340 if (!clusters)
return 0;
342 Int_t nAccClusters = 0;
346 AliVCluster* cluster = 0;
347 AliVCluster* cluster2= 0;
348 AliVParticle* leadingTrack = 0;
349 AliVParticle* track = 0;
351 Int_t Loop_counter=0;
353 TLorentzVector SumCaloClusterVec;
354 AliVCluster* othercluster = 0;
355 clusters->ResetCurrentID();
359 clusters->ResetCurrentID();
361 for(
Int_t NoCluster1 = 0; NoCluster1 < NoOfClustersInEvent-1; NoCluster1++ )
369 if (!leading || leading->E() < cluster->E()) leading = cluster;
371 TLorentzVector CaloClusterVec;
372 cluster->GetMomentum(CaloClusterVec,
fVertex);
378 if (!tracks)
return 0;
379 tracks->ResetCurrentID();
383 if (!leadingTrack || leadingTrack->Pt() < leadingTrack->Pt()) leadingTrack = track;
388 TLorentzVector leadingClusVect;
389 leading->GetMomentum(leadingClusVect,
fVertex);
397 for(
Int_t NoCluster2 = 0; NoCluster2 < NoOfClustersInEvent; NoCluster2++ )
399 if(NoCluster1!=NoCluster2)
404 TLorentzVector CaloClusterVec2;
405 TLorentzVector CaloClusterVecpi0;
406 cluster2->GetMomentum(CaloClusterVec2,
fVertex);
407 if(cluster2->E()>2 && cluster->E()>2)
409 CaloClusterVecpi0=CaloClusterVec+CaloClusterVec2;
410 fHistpi0->Fill(CaloClusterVecpi0.M());
417 for(
Int_t i=loop;i<=nclust-1;i++)
420 if((othercluster)&&(othercluster != cluster)&&(
AcceptCluster(othercluster)))
422 TLorentzVector OtherCaloClusterVec;
423 othercluster->GetMomentum(OtherCaloClusterVec,
fVertex);
425 SumCaloClusterVec = OtherCaloClusterVec + CaloClusterVec;
430 Double_t twoangsize= sqrt(pow(OtherCaloClusterVec.Theta()-CaloClusterVec.Theta(),2)+pow(OtherCaloClusterVec.Phi()-CaloClusterVec.Phi(),2));
449 if (!tracks)
return 0;
451 Int_t nAccTracks = 0;
459 tracks->ResetCurrentID();
460 AliVParticle* track = 0;
467 if (!leading || leading->Pt() < track->Pt()) leading = track;
480 if(cluster->E()>0.3 && cluster->GetNCells()>1)
497 if(Phi_g<0) cout<<
"problem1?? phig "<<Phi_g<<endl;
498 if(Phi_g>2*pi)cout<<
"problem2?? phig "<<Phi_g<<endl;
502 if (Phi_g < 0) Phi_g += 2*
pi;
503 else if (Phi_g > 2*pi) Phi_g -= 2*
pi;
504 if (Phi_h < 0) Phi_h += 2*
pi;
505 else if (Phi_h) Phi_h -= 2*
pi;
527 deltaPhi=
fRtoD*(ClusterVec.Phi()-TrackVec->Phi());
528 deltaEta=ClusterVec.Eta()-TrackVec->Eta();
530 if(ClusterVec.Pt()>=ClusterEcut && TrackVec->Pt()>=TrackPcut && deltaPhi>=Anglecut)
547 if(ClusterVec.Pt()>=BinValStart && ClusterVec.Pt()<BinValStart+BinWidth)
TH2 * fHistClusPairInvarMasspTSlice
virtual AliVParticle * GetNextAcceptParticle()
TH1 * fHistNoClus_ptH
No of calorimeter trigger Clusters as a function of p_T.
TH2 * fHistClusPairInvarMassPlay
Int_t DoClusterLoop(Float_t &sum, AliVCluster *&leading)
TH1 * fHistNoClus_pt_tr
No of calorimeter Clusters as a function of p_T.
TH1 * fHistNoClus_pt
Output list.
TList * fOutputList3
Output list.
Bool_t AcceptCluster(AliVCluster *clus, Int_t c=0) const
Cluster selection.
void Fill_GH_Hisograms(Int_t identifier, TLorentzVector ClusterVec, AliVParticle *TrackVec, Double_t ClusterEcut, Double_t TrackPcut, Double_t Anglecut)
Bool_t RetrieveEventObjects()
Bool_t AccClusterForAna(AliVCluster *cluster)
TH2 * fHistClusPairInvarMassE
Container for particles within the EMCAL framework.
Int_t DoCellLoop(Float_t &sum)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
virtual ~AliAnalysisTaskPi0Hadron()
Bool_t FillHistograms()
Function filling histograms.
TClonesArray * fCaloClusters
!clusters
TH1 * fHistClusPairInvarMass
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
AliVCluster * GetAcceptCluster(Int_t i) const
TH1 ** fHist_DP_gh
pt distributions of the associated hadron in a certain p_t bin of the gamma that triggered the event ...
Int_t GetNClusters() const
Int_t GetNAcceptedClusters() const
BeamType fBeamType
!event beam type
AliVCluster * GetCluster(Int_t i) const
AliEmcalList * fOutput
!output list
Int_t DoTrackLoop(Float_t &sum, AliVParticle *&leading)
void UserCreateOutputObjects()
Double_t fVertex[3]
!event vertex
Base task in the EMCAL jet framework.
TH1 * fHistNoClus_ptH_tr
No of calorimeter Clusters as a function of p_T with a hadron in the second hemisphere.
TList * fOutputList2
Output list.
void UserCreateOutputObjects()
Main initialization function on the worker.
TH1 * fHistpi0
No of g-h pairs in the deta eta delta phi plane.
Double_t DeltaPhi(TLorentzVector ClusterVec, AliVParticle *TrackVec)
TH2 * fHistClusPairInvarMasspT
-<()>-
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
TH2 * fHist_DetaDphi
No of calorimeter trigger Clusters as a function of p_T with a hadron in the second hemisphere...
Container structure for EMCAL clusters.
void ExecOnce()
Perform steps needed to initialize the analysis.
TH1 ** fHistpt_assHadron_tr
pt distributions of the associated hadron in a certain p_t bin of the gamma