]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/EMCALJetTasks/AliJetResponseMaker.cxx
keywords
[u/mrichter/AliRoot.git] / PWGGA / EMCALJetTasks / AliJetResponseMaker.cxx
CommitLineData
2949a2ec 1// $Id: AliJetResponseMaker.cxx $
2//
3// Emcal jet response matrix maker task.
4//
5// Author: S. Aiola
6
7#include "AliJetResponseMaker.h"
8
9#include <TChain.h>
10#include <TClonesArray.h>
11#include <TH1F.h>
12#include <TH2F.h>
13#include <TList.h>
14#include <TLorentzVector.h>
15
16#include "AliAnalysisManager.h"
17#include "AliCentrality.h"
18#include "AliFJWrapper.h"
19#include "AliVCluster.h"
20#include "AliVTrack.h"
21#include "AliEmcalJet.h"
22#include "AliMCEvent.h"
23
24ClassImp(AliJetResponseMaker)
25
26//________________________________________________________________________
27AliJetResponseMaker::AliJetResponseMaker() :
28 AliAnalysisTaskEmcal("AliJetResponseMaker"),
29 fMCPartName("Tracks"),
30 fMCJetsName("mcJets"),
31 fMCParts(0),
32 fMCJets(0),
33 fHistMCJetPhiEta(0),
34 fHistMCJetsPt(0),
35 fHistMCJetsPtTrack(0),
36 fHistMCJetsPtClus(0),
37 fHistMCJetsPtNonBias(0),
38 fHistMCLeadingJetPt(0),
39 fHistMCJetsNEFvsPt(0),
40 fHistMCJetsZvsPt(0),
41 fHistJetPhiEta(0),
42 fHistJetsPt(0),
43 fHistJetsPtTrack(0),
44 fHistJetsPtClus(0),
45 fHistJetsPtNonBias(0),
46 fHistLeadingJetPt(0),
47 fHistJetsNEFvsPt(0),
48 fHistJetsZvsPt(0)
49{
50 // Default constructor.
51}
52
53//________________________________________________________________________
54AliJetResponseMaker::AliJetResponseMaker(const char *name) :
55 AliAnalysisTaskEmcal(name),
56 fMCPartName("Tracks"),
57 fMCJetsName("mcJets"),
58 fMCParts(0),
59 fMCJets(0),
60 fHistMCJetPhiEta(0),
61 fHistMCJetsPt(0),
62 fHistMCJetsPtTrack(0),
63 fHistMCJetsPtClus(0),
64 fHistMCJetsPtNonBias(0),
65 fHistMCLeadingJetPt(0),
66 fHistMCJetsNEFvsPt(0),
67 fHistMCJetsZvsPt(0),
68 fHistJetPhiEta(0),
69 fHistJetsPt(0),
70 fHistJetsPtTrack(0),
71 fHistJetsPtClus(0),
72 fHistJetsPtNonBias(0),
73 fHistLeadingJetPt(0),
74 fHistJetsNEFvsPt(0),
75 fHistJetsZvsPt(0)
76{
77 // Standard constructor.
78
79 fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.";
80}
81
82//________________________________________________________________________
83AliJetResponseMaker::~AliJetResponseMaker()
84{
85 // Destructor
86}
87
88//________________________________________________________________________
89void AliJetResponseMaker::UserCreateOutputObjects()
90{
91 // Create user objects.
92
93 OpenFile(1);
94 fOutput = new TList();
95 fOutput->SetOwner();
96
97 fHistJetsPt = new TH1F("fHistJetsPt", "fHistJetsPt", fNbins, fMinPt, fMaxPt);
98 fHistJetsPt->GetXaxis()->SetTitle("p_{T} [GeV/c]");
99 fHistJetsPt->GetYaxis()->SetTitle("counts");
100 fOutput->Add(fHistJetsPt);
101
102 if (fAnaType == kEMCAL) {
103 fHistJetsPtClus = new TH1F("fHistJetsPtClus", "fHistJetsPtClus", fNbins, fMinPt, fMaxPt);
104 fHistJetsPtClus->GetXaxis()->SetTitle("p_{T} [GeV/c]");
105 fHistJetsPtClus->GetYaxis()->SetTitle("counts");
106 fOutput->Add(fHistJetsPtClus);
107 }
108
109 fHistJetsPtTrack = new TH1F("fHistJetsPtTrack", "fHistJetsPtTrack", fNbins, fMinPt, fMaxPt);
110 fHistJetsPtTrack->GetXaxis()->SetTitle("p_{T} [GeV/c]");
111 fHistJetsPtTrack->GetYaxis()->SetTitle("counts");
112 fOutput->Add(fHistJetsPtTrack);
113
114 fHistJetsPtNonBias = new TH1F("fHistJetsPtNonBias", "fHistJetsPtNonBias", fNbins, fMinPt, fMaxPt);
115 fHistJetsPtNonBias->GetXaxis()->SetTitle("p_{T} [GeV/c]");
116 fHistJetsPtNonBias->GetYaxis()->SetTitle("counts");
117 fOutput->Add(fHistJetsPtNonBias);
118
119 fHistLeadingJetPt = new TH1F("fHistLeadingJetPt", "fHistLeadingJetPt", fNbins, fMinPt, fMaxPt);
120 fHistLeadingJetPt->GetXaxis()->SetTitle("p_{T} [GeV]");
121 fHistLeadingJetPt->GetYaxis()->SetTitle("counts");
122 fOutput->Add(fHistLeadingJetPt);
123
124 fHistJetsZvsPt = new TH2F("fHistJetsZvsPt", "fHistJetsZvsPt", fNbins, 0, 1.2, fNbins, fMinPt, fMaxPt);
125 fHistJetsZvsPt->GetXaxis()->SetTitle("Z");
126 fHistJetsZvsPt->GetYaxis()->SetTitle("p_{T} [GeV/c]");
127 fOutput->Add(fHistJetsZvsPt);
128
129 if (fAnaType == kEMCAL) {
130 fHistJetsNEFvsPt = new TH2F("fHistJetsNEFvsPt", "fHistJetsNEFvsPt", fNbins, 0, 1.2, fNbins, fMinPt, fMaxPt);
131 fHistJetsNEFvsPt->GetXaxis()->SetTitle("NEF");
132 fHistJetsNEFvsPt->GetYaxis()->SetTitle("p_{T} [GeV/c]");
133 fOutput->Add(fHistJetsNEFvsPt);
134 }
135}
136
137//________________________________________________________________________
138void AliJetResponseMaker::FillHistograms()
139{
140 // Fill histograms.
141
142 Int_t maxJetIndex = -1;
143 Int_t maxMCJetIndex = -1;
144
145 DoJetLoop(maxJetIndex, fJets, fTracks, fCaloClusters);
146 if (maxJetIndex < 0)
147 return;
148 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJets->At(maxJetIndex));
149 if (!jet)
150 return;
151
152 DoJetLoop(maxMCJetIndex, fMCJets, fMCParts);
153 if (maxMCJetIndex < 0)
154 return;
155 AliEmcalJet* mcjet = dynamic_cast<AliEmcalJet*>(fMCJets->At(maxMCJetIndex));
156 if (!mcjet)
157 return;
158
159 fHistLeadingJetPt->Fill(jet->Pt());
160 fHistMCLeadingJetPt->Fill(mcjet->Pt());
161}
162
163//________________________________________________________________________
164void AliJetResponseMaker::DoJetLoop(Int_t &maxJetIndex, TClonesArray *jets, TClonesArray *tracks, TClonesArray *clusters)
165{
166 // Do the jet loop.
167
168 if (!fJets)
169 return;
170
171 Int_t njets = jets->GetEntriesFast();
172
173 Float_t maxJetPt = 0;
174 for (Int_t ij = 0; ij < njets; ij++) {
175
176 AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(jets->At(ij));
177
178 if (!jet) {
179 AliError(Form("Could not receive jet %d", ij));
180 continue;
181 }
182
183 if (!AcceptJet(jet))
184 continue;
185
186 fHistJetsPtNonBias->Fill(jet->Pt());
187
188 if (jet->MaxTrackPt() > fPtBiasJetTrack)
189 fHistJetsPtTrack->Fill(jet->Pt());
190
191 if (fAnaType == kEMCAL && jet->MaxClusterPt() > fPtBiasJetClus)
192 fHistJetsPtClus->Fill(jet->Pt());
193
194 if (jet->MaxTrackPt() < fPtBiasJetTrack && (fAnaType == kTPC || jet->MaxClusterPt() < fPtBiasJetClus))
195 continue;
196
197 if (maxJetPt < jet->Pt()) {
198 maxJetPt = jet->Pt();
199 maxJetIndex = ij;
200 }
201
202 fHistJetsPt->Fill(jet->Pt());
203
204 fHistJetPhiEta->Fill(jet->Eta(), jet->Phi());
205
206 if (fAnaType == kEMCAL)
207 fHistJetsNEFvsPt->Fill(jet->NEF(), jet->Pt());
208
209 for (Int_t it = 0; it < jet->GetNumberOfTracks(); it++) {
210 AliVParticle *track = jet->TrackAt(it, tracks);
211 if (track)
212 fHistJetsZvsPt->Fill(track->Pt() / jet->Pt(), jet->Pt());
213 }
214
215 if (fAnaType != kEMCAL || !clusters)
216 continue;
217
218 for (Int_t ic = 0; ic < jet->GetNumberOfClusters(); ic++) {
219 AliVCluster *cluster = jet->ClusterAt(ic, clusters);
220
221 if (cluster) {
222 TLorentzVector nPart;
223 cluster->GetMomentum(nPart, fVertex);
224 fHistJetsZvsPt->Fill(nPart.Et() / jet->Pt(), jet->Pt());
225 }
226 }
227 }
228}
229
230//________________________________________________________________________
231void AliJetResponseMaker::RetrieveEventObjects()
232{
233 // Retrieve event objects.
234
235 AliAnalysisTaskEmcal::RetrieveEventObjects();
236
237 if (strcmp(fMCJetsName,"")) {
238 fMCJets = dynamic_cast<TClonesArray*>(MCEvent()->FindListObject(fMCJetsName));
239 if (!fMCJets) {
240 AliWarning(Form("Could not retrieve MC jets %s!", fMCJetsName.Data()));
241 }
242 }
243}
244
245//________________________________________________________________________
246void AliJetResponseMaker::Terminate(Option_t *)
247{
248 // Called once at the end of the analysis.
249}