3 // Emcal sample analysis task.
5 // Author: S.Aiola, M. Verweij
7 #include <TClonesArray.h>
12 #include <TLorentzVector.h>
14 #include "AliVCluster.h"
15 #include "AliAODCaloCluster.h"
16 #include "AliESDCaloCluster.h"
17 #include "AliVTrack.h"
19 #include "AliParticleContainer.h"
20 #include "AliClusterContainer.h"
21 #include "AliPicoTrack.h"
23 #include "AliAnalysisTaskEmcalSample.h"
25 ClassImp(AliAnalysisTaskEmcalSample)
27 //________________________________________________________________________
28 AliAnalysisTaskEmcalSample::AliAnalysisTaskEmcalSample() :
29 AliAnalysisTaskEmcal("AliAnalysisTaskEmcalSample", kTRUE),
32 fHistPtDEtaDPhiTrackClus(0),
33 fHistPtDEtaDPhiClusTrack(0),
37 // Default constructor.
39 fHistTracksPt = new TH1*[fNcentBins];
40 fHistClustersPt = new TH1*[fNcentBins];
42 for (Int_t i = 0; i < fNcentBins; i++) {
44 fHistClustersPt[i] = 0;
47 SetMakeGeneralHistograms(kTRUE);
50 //________________________________________________________________________
51 AliAnalysisTaskEmcalSample::AliAnalysisTaskEmcalSample(const char *name) :
52 AliAnalysisTaskEmcal(name, kTRUE),
55 fHistPtDEtaDPhiTrackClus(0),
56 fHistPtDEtaDPhiClusTrack(0),
60 // Standard constructor.
62 fHistTracksPt = new TH1*[fNcentBins];
63 fHistClustersPt = new TH1*[fNcentBins];
65 for (Int_t i = 0; i < fNcentBins; i++) {
67 fHistClustersPt[i] = 0;
70 SetMakeGeneralHistograms(kTRUE);
73 //________________________________________________________________________
74 AliAnalysisTaskEmcalSample::~AliAnalysisTaskEmcalSample()
79 //________________________________________________________________________
80 void AliAnalysisTaskEmcalSample::UserCreateOutputObjects()
82 // Create user output.
84 AliAnalysisTaskEmcal::UserCreateOutputObjects();
86 fTracksCont = GetParticleContainer(0);
87 fCaloClustersCont = GetClusterContainer(0);
88 fTracksCont->SetClassName("AliVTrack");
89 fCaloClustersCont->SetClassName("AliVCluster");
93 for (Int_t i = 0; i < fNcentBins; i++) {
94 if (fParticleCollArray.GetEntriesFast()>0) {
95 histname = "fHistTracksPt_";
97 fHistTracksPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
98 fHistTracksPt[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
99 fHistTracksPt[i]->GetYaxis()->SetTitle("counts");
100 fOutput->Add(fHistTracksPt[i]);
103 if (fClusterCollArray.GetEntriesFast()>0) {
104 histname = "fHistClustersPt_";
106 fHistClustersPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
107 fHistClustersPt[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
108 fHistClustersPt[i]->GetYaxis()->SetTitle("counts");
109 fOutput->Add(fHistClustersPt[i]);
113 histname = "fHistPtDEtaDPhiTrackClus";
114 fHistPtDEtaDPhiTrackClus = new TH3F(histname.Data(),Form("%s;#it{p}_{T}^{track};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
115 fOutput->Add(fHistPtDEtaDPhiTrackClus);
117 histname = "fHistPtDEtaDPhiClusTrack";
118 fHistPtDEtaDPhiClusTrack = new TH3F(histname.Data(),Form("%s;#it{p}_{T}^{clus};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
119 fOutput->Add(fHistPtDEtaDPhiClusTrack);
121 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
124 //________________________________________________________________________
125 Bool_t AliAnalysisTaskEmcalSample::FillHistograms()
130 AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0));
132 fHistTracksPt[fCentBin]->Fill(track->Pt());
133 track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
137 if (fCaloClustersCont) {
138 AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
140 TLorentzVector nPart;
141 cluster->GetMomentum(nPart, fVertex);
142 fHistClustersPt[fCentBin]->Fill(nPart.Pt());
143 cluster = fCaloClustersCont->GetNextAcceptCluster();
147 CheckClusTrackMatching();
152 //________________________________________________________________________
153 void AliAnalysisTaskEmcalSample::CheckClusTrackMatching()
156 if(!fTracksCont || !fCaloClustersCont)
162 //Get closest cluster to track
163 AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0));
165 //Get matched cluster
166 Int_t emc1 = track->GetEMCALcluster();
167 if(fCaloClustersCont && emc1>=0) {
168 AliVCluster *clusMatch = fCaloClustersCont->GetCluster(emc1);
170 AliPicoTrack::GetEtaPhiDiff(track, clusMatch, dphi, deta);
171 fHistPtDEtaDPhiTrackClus->Fill(track->Pt(),deta,dphi);
174 track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
177 //Get closest track to cluster
178 AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0);
180 TLorentzVector nPart;
181 cluster->GetMomentum(nPart, fVertex);
182 fHistClustersPt[fCentBin]->Fill(nPart.Pt());
185 AliVTrack *mt = NULL;
186 AliAODCaloCluster *acl = dynamic_cast<AliAODCaloCluster*>(cluster);
188 if(acl->GetNTracksMatched()>1)
189 mt = static_cast<AliVTrack*>(acl->GetTrackMatched(0));
192 AliESDCaloCluster *ecl = dynamic_cast<AliESDCaloCluster*>(cluster);
193 Int_t im = ecl->GetTrackMatchedIndex();
194 if(fTracksCont && im>=0) {
195 mt = static_cast<AliVTrack*>(fTracksCont->GetParticle(im));
199 AliPicoTrack::GetEtaPhiDiff(mt, cluster, dphi, deta);
200 fHistPtDEtaDPhiClusTrack->Fill(nPart.Pt(),deta,dphi);
204 Int_t emc1 = mt->GetEMCALcluster();
205 Printf("current id: %d emc1: %d",fCaloClustersCont->GetCurrentID(),emc1);
206 AliVCluster *clm = fCaloClustersCont->GetCluster(emc1);
207 AliPicoTrack::GetEtaPhiDiff(mt, clm, dphi, deta);
208 Printf("deta: %f dphi: %f",deta,dphi);
212 cluster = fCaloClustersCont->GetNextAcceptCluster();
216 //________________________________________________________________________
217 void AliAnalysisTaskEmcalSample::ExecOnce() {
219 AliAnalysisTaskEmcal::ExecOnce();
221 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
222 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
226 //________________________________________________________________________
227 Bool_t AliAnalysisTaskEmcalSample::Run()
229 // Run analysis code here, if needed. It will be executed before FillHistograms().
231 return kTRUE; // If return kFALSE FillHistogram() will NOT be executed.
234 //________________________________________________________________________
235 void AliAnalysisTaskEmcalSample::Terminate(Option_t *)
237 // Called once at the end of the analysis.