]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/AliJetEmbeddingFromAODTask.cxx
Updates from Salvatore for Embedding
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliJetEmbeddingFromAODTask.cxx
CommitLineData
b16bb001 1// $Id: AliJetEmbeddingFromAODTask.cxx $
2//
3// Jet embedding from AOD task.
4//
5// Author: S.Aiola, C.Loizides
6
7#include "AliJetEmbeddingFromAODTask.h"
8
b16bb001 9#include <TFile.h>
10#include <TTree.h>
11#include <TClonesArray.h>
12#include <TObjArray.h>
13#include <TObjString.h>
14#include <TGrid.h>
15#include <TH2C.h>
cd6431de 16#include <TList.h>
17#include <TStreamerInfo.h>
b16bb001 18
19#include "AliVEvent.h"
20#include "AliAODTrack.h"
21#include "AliESDtrack.h"
22#include "AliPicoTrack.h"
23#include "AliVTrack.h"
24#include "AliVCluster.h"
25#include "AliVCaloCells.h"
26#include "AliCentrality.h"
27#include "AliVHeader.h"
28#include "AliVVertex.h"
29#include "AliAODHeader.h"
30#include "AliLog.h"
31#include "AliInputEventHandler.h"
32
33ClassImp(AliJetEmbeddingFromAODTask)
34
35//________________________________________________________________________
36AliJetEmbeddingFromAODTask::AliJetEmbeddingFromAODTask() :
37 AliJetModelBaseTask("AliJetEmbeddingFromAODTask"),
38 fFileList(0),
39 fAODTreeName(),
40 fAODHeaderName(),
41 fAODVertexName(),
42 fAODTrackName(),
43 fAODClusName(),
44 fAODCellsName(),
45 fMinCentrality(0),
46 fMaxCentrality(10),
47 fTriggerMask(AliVEvent::kAny),
48 fZVertexCut(10),
49 fIncludeNoITS(kTRUE),
50 fTotalFiles(2200),
51 fEsdTreeMode(kFALSE),
52 fCurrentFileID(0),
53 fCurrentAODFileID(-1),
54 fCurrentAODFile(0),
cd6431de 55 fPicoTrackVersion(0),
b16bb001 56 fAODHeader(0),
57 fAODVertex(0),
58 fAODTracks(0),
59 fAODClusters(0),
60 fAODCaloCells(0),
61 fHistFileIDs(0)
62{
63 // Default constructor.
64 SetSuffix("AODEmbedding");
65 fMarkMC = kFALSE;
66 fAODfilterBits[0] = -1;
67 fAODfilterBits[1] = -1;
68}
69
70//________________________________________________________________________
71AliJetEmbeddingFromAODTask::AliJetEmbeddingFromAODTask(const char *name, Bool_t drawqa) :
72 AliJetModelBaseTask(name, drawqa),
73 fFileList(0),
74 fAODTreeName("aodTree"),
75 fAODHeaderName("header"),
76 fAODVertexName("vertices"),
77 fAODTrackName("tracks"),
78 fAODClusName("caloClusters"),
79 fAODCellsName("emcalCells"),
80 fMinCentrality(0),
81 fMaxCentrality(10),
82 fTriggerMask(AliVEvent::kAny),
83 fZVertexCut(10),
84 fIncludeNoITS(kTRUE),
85 fTotalFiles(2200),
86 fEsdTreeMode(kFALSE),
87 fCurrentFileID(0),
88 fCurrentAODFileID(-1),
89 fCurrentAODFile(0),
cd6431de 90 fPicoTrackVersion(0),
b16bb001 91 fAODHeader(0),
92 fAODVertex(0),
93 fAODTracks(0),
94 fAODClusters(0),
95 fAODCaloCells(0),
96 fHistFileIDs(0)
97{
98 // Standard constructor.
99 SetSuffix("AODEmbedding");
100 fMarkMC = kFALSE;
101 fAODfilterBits[0] = -1;
102 fAODfilterBits[1] = -1;
103}
104
105//________________________________________________________________________
106AliJetEmbeddingFromAODTask::~AliJetEmbeddingFromAODTask()
107{
108 // Destructor
109
110 if (fCurrentAODFile) {
111 fCurrentAODFile->Close();
112 delete fCurrentAODFile;
113 }
114}
115
116//________________________________________________________________________
117void AliJetEmbeddingFromAODTask::UserCreateOutputObjects()
118{
119 if (!fQAhistos)
120 return;
121
122 AliJetModelBaseTask::UserCreateOutputObjects();
123
124 fHistFileIDs = new TH2C("fHistFileIDs", "fHistFileIDs", fTotalFiles, -0.5, fTotalFiles - 0.5, fFileList->GetEntriesFast(), -0.5, fFileList->GetEntriesFast() -0.5);
125 fHistFileIDs->GetXaxis()->SetTitle("File no. (PYTHIA)");
126 fHistFileIDs->GetYaxis()->SetTitle("File no. (Embedded AOD)");
127 fOutput->Add(fHistFileIDs);
128
129 PostData(1, fOutput);
130}
131
132//________________________________________________________________________
133Bool_t AliJetEmbeddingFromAODTask::UserNotify()
134{
135 TString path(fInputHandler->GetTree()->GetCurrentFile()->GetPath());
136 if (path.EndsWith("/"))
137 path.Remove(path.Length()-1);
138 path.Remove(path.Last('/'));
139 path.Remove(0, path.Last('/')+1);
140 if (!path.IsDec()) {
141 AliWarning(Form("Could not extract file number from path %s", path.Data()));
142 return kTRUE;
143 }
144 fCurrentFileID = path.Atoi();
145 fCurrentAODFileID = fFileList->GetEntriesFast() * fCurrentFileID / fTotalFiles;
146 AliInfo(Form("Start embedding from file ID %d", fCurrentAODFileID));
147 return kTRUE;
148}
149
150//________________________________________________________________________
151Bool_t AliJetEmbeddingFromAODTask::ExecOnce()
152{
153 if (fAODTreeName.Contains("aod"))
154 fEsdTreeMode = kFALSE;
155 else
156 fEsdTreeMode = kTRUE;
157
158 return AliJetModelBaseTask::ExecOnce();
159}
160
161//________________________________________________________________________
162Bool_t AliJetEmbeddingFromAODTask::OpenNextFile()
163{
164 if (fCurrentAODFile) {
165 fCurrentAODFile->Close();
166 delete fCurrentAODFile;
167 fCurrentAODFile = 0;
168 }
169
170 if (fCurrentAODFileID >= fFileList->GetEntriesFast())
171 return kFALSE;
172
173 TObjString *objFileName = static_cast<TObjString*>(fFileList->At(fCurrentAODFileID));
174 TString fileName = objFileName->GetString();
175
176 if (fileName.BeginsWith("alien://") && !gGrid) {
177 AliInfo("Trying to connect to AliEn ...");
178 TGrid::Connect("alien://");
179 }
180
181 fCurrentAODFile = TFile::Open(fileName);
182
183 if (!fCurrentAODFile || fCurrentAODFile->IsZombie()) {
184 return kFALSE;
185 }
186
cd6431de 187 const TList *clist = fCurrentAODFile->GetStreamerInfoCache();
188 if(clist) {
189 TStreamerInfo *cinfo = static_cast<TStreamerInfo*>(clist->FindObject("AliPicoTrack"));
190 if(cinfo)
191 fPicoTrackVersion = cinfo->GetClassVersion();
192 else
193 fPicoTrackVersion = 0;
194 }
195
b16bb001 196 if (fQAhistos)
197 fHistFileIDs->Fill(fCurrentFileID, fCurrentAODFileID);
198
199 fCurrentAODFileID++;
200 return kTRUE;
201}
202
203//________________________________________________________________________
204Bool_t AliJetEmbeddingFromAODTask::GetNextEntry()
205{
206 static TTree *tree = 0;
207 static Int_t entry = 0;
208
209 Int_t attempts = 0;
210
211 do {
212
213 if (!fCurrentAODFile || !tree || entry >= tree->GetEntries()) {
214 if (!OpenNextFile())
215 return kFALSE;
216
217 tree = static_cast<TTree*>(fCurrentAODFile->Get(fAODTreeName));
218 if (!tree)
219 return kFALSE;
220
221 if (!fAODHeaderName.IsNull())
222 tree->SetBranchAddress(fAODHeaderName, &fAODHeader);
223
224 if (!fAODVertexName.IsNull())
225 tree->SetBranchAddress(fAODVertexName, &fAODVertex);
226
227 if (!fAODTrackName.IsNull())
228 tree->SetBranchAddress(fAODTrackName, &fAODTracks);
229
230 if (!fAODClusName.IsNull())
231 tree->SetBranchAddress(fAODClusName, &fAODClusters);
232
233 if (!fAODCellsName.IsNull())
234 tree->SetBranchAddress(fAODCellsName, &fAODCaloCells);
235
236 entry = 0;
237 }
238
239 tree->GetEntry(entry);
240 entry++;
241 attempts++;
242
243 if (attempts == 1000)
244 AliWarning("After 1000 attempts no event has been accepted by the event selection (trigger, centrality...)!");
245
246 } while (!IsAODEventSelected() && tree);
247
248 return (tree!=0);
249}
250
251//________________________________________________________________________
252Bool_t AliJetEmbeddingFromAODTask::IsAODEventSelected()
253{
254 if (!fEsdTreeMode && fAODHeader) {
255 AliAODHeader *aodHeader = static_cast<AliAODHeader*>(fAODHeader);
256
257 UInt_t offlineTrigger = aodHeader->GetOfflineTrigger();
258
259 if ((offlineTrigger & fTriggerMask) == 0) {
260 AliDebug(2, Form("Event rejected due to physics selection. Event trigger mask: %d, trigger mask selection: %d.", offlineTrigger, fTriggerMask));
261 return kFALSE;
262 }
263
264 AliCentrality *cent = aodHeader->GetCentralityP();
265 Float_t centVal = cent->GetCentralityPercentile("V0M");
266 if (centVal < fMinCentrality || centVal >= fMaxCentrality) {
267 AliDebug(2, Form("Event rejected due to centrality selection. Event centrality: %f, centrality range selection: %f to %f", centVal, fMinCentrality, fMaxCentrality));
268 return kFALSE;
269 }
270 }
271
272 if (fAODVertex) {
273 Double_t vert[3]={0};
274 ((AliVVertex*)fAODVertex->At(0))->GetXYZ(vert);
275 if (TMath::Abs(vert[2]) > fZVertexCut) {
276 AliDebug(2,Form("Event rejected due to Z vertex selection. Event Z vertex: %f, Z vertex cut: %f", vert[2], fZVertexCut));
277 return kFALSE;
278 }
279 }
280
281 return kTRUE;
282}
283
284//________________________________________________________________________
285void AliJetEmbeddingFromAODTask::Run()
286{
287 if (!GetNextEntry()) {
288 AliError("Unable to get AOD event to embed. Nothing will be embedded.");
289 return;
290 }
291
292 if (fTracks && fOutTracks) {
293
294 if (fCopyArray)
295 CopyTracks();
296
297 if (fAODTracks) {
298 AliDebug(2, Form("%d tracks will be processed for embedding.", fAODTracks->GetEntriesFast()));
299 for (Int_t i = 0; i < fAODTracks->GetEntriesFast(); i++) {
300 AliVTrack *track = static_cast<AliVTrack*>(fAODTracks->At(i));
301 if (!track) {
302 AliError(Form("Could not find track %d in branch %s of tree %s!", i, fAODTrackName.Data(), fAODTreeName.Data()));
303 continue;
304 }
305
306 Int_t type = 0;
307 Bool_t isEmc = kFALSE;
308 if (!fEsdTreeMode) {
309 AliAODTrack *aodtrack = static_cast<AliAODTrack*>(track);
310 if (aodtrack->TestFilterBit(fAODfilterBits[0])) {
311 type = 0;
312 }
313 else if (aodtrack->TestFilterBit(fAODfilterBits[1])) {
314 if ((aodtrack->GetStatus()&AliESDtrack::kITSrefit)==0) {
315 if (fIncludeNoITS)
316 type = 2;
317 else
318 continue;
319 }
320 else {
321 type = 1;
322 }
323 }
324 else { /*not a good track*/
325 continue;
326 }
327
328 if (TMath::Abs(aodtrack->GetTrackEtaOnEMCal()) < 0.75 &&
329 aodtrack->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
330 aodtrack->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
331 isEmc = kTRUE;
332 }
cd6431de 333 else if (fPicoTrackVersion > 0) { /*not AOD mode, let's see if it is PicoTrack*/
b16bb001 334 AliPicoTrack *ptrack = dynamic_cast<AliPicoTrack*>(track);
335 if (ptrack) {
cd6431de 336 if (fPicoTrackVersion >= 3)
337 type = ptrack->GetTrackType();
338 else
339 type = ptrack->GetLabel();
b16bb001 340 isEmc = ptrack->IsEMCAL();
341 }
342 }
343
344 AliDebug(3, Form("Embedding track with pT = %f, eta = %f, phi = %f", track->Pt(), track->Eta(), track->Phi()));
345 AddTrack(track->Pt(), track->Eta(), track->Phi(), type, track->GetTrackEtaOnEMCal(), track->GetTrackPhiOnEMCal(), isEmc);
346 }
347 }
348 }
349
350 if (fClusters && fOutClusters) {
351
352 if (fCopyArray)
353 CopyClusters();
354
355 if (fAODClusters) {
356 for (Int_t i = 0; i < fAODClusters->GetEntriesFast(); i++) {
357 AliVCluster *clus = static_cast<AliVCluster*>(fAODClusters->At(i));
358 if (!clus) {
359 AliError(Form("Could not find cluster %d in branch %s of tree %s!", i, fAODClusName.Data(), fAODTreeName.Data()));
360 continue;
361 }
362 TLorentzVector vect;
363 Double_t vert[3] = {0,0,0};
364 clus->GetMomentum(vect,vert);
365 AddCluster(clus->E(), vect.Eta(), vect.Phi());
366 }
367 }
368 }
369
370 if (fCaloCells && fOutCaloCells) {
371
372 Int_t totalCells = fCaloCells->GetNumberOfCells();
373 if (fAODCaloCells)
374 totalCells += fAODCaloCells->GetNumberOfCells();
375
376 SetNumberOfOutCells(totalCells);
377
378 CopyCells();
379
380 if (fAODCaloCells) {
381 for (Short_t i = 0; i < fAODCaloCells->GetNumberOfCells(); i++) {
382 Short_t mclabel = -1;
383 Double_t efrac = 0.;
384 Double_t time = -1;
385 Short_t cellNum = -1;
386 Double_t amp = -1;
387
388 fAODCaloCells->GetCell(i, cellNum, amp, time, mclabel, efrac);
389 AliDebug(3,Form("Adding cell with amplitude %f, absolute ID %d, time %f", amp, cellNum, time));
390 AddCell(amp, cellNum, time);
391 }
392 }
cd6431de 393
394 AliDebug(2,Form("Added cells = %d, total cells = %d", fAddedCells, totalCells));
b16bb001 395 }
396}