1 /*************************************************************************
3 * Task for fast embedding *
4 * read extra input from AOD *
6 *************************************************************************/
9 /**************************************************************************
10 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
12 * Author: The ALICE Off-line Project. *
13 * Contributors are mentioned in the code where appropriate. *
15 * Permission to use, copy, modify and distribute this software and its *
16 * documentation strictly for non-commercial purposes is hereby granted *
17 * without fee, provided that the above copyright notice appears in all *
18 * copies and that both the copyright notice and this permission notice *
19 * appear in the supporting documentation. The authors make no claims *
20 * about the suitability of this software for any purpose. It is *
21 * provided "as is" without express or implied warranty. *
22 **************************************************************************/
29 #include <TClonesArray.h>
30 #include <TDirectory.h>
38 #include "AliAnalysisTaskFastEmbedding.h"
39 #include "AliAnalysisManager.h"
40 #include "AliESDtrack.h"
41 #include "AliAODEvent.h"
42 #include "AliAODTrack.h"
43 #include "AliAODJet.h"
44 #include "AliAODMCParticle.h"
48 ClassImp(AliAnalysisTaskFastEmbedding)
50 //__________________________________________________________________________
51 AliAnalysisTaskFastEmbedding::AliAnalysisTaskFastEmbedding()
59 ,fAODPath("AliAOD.root")
60 ,fTrackBranch("aodExtraTracks")
61 ,fMCparticlesBranch("aodExtraMCparticles")
68 ,fEvtSelMinJetEta(-999.)
69 ,fEvtSelMaxJetEta( 999.)
71 ,fEvtSelMaxJetPhi(TMath::Pi()*2.)
76 ,fToyDistributionTrackPt(0.)
80 ,fToyMaxTrackPhi(2*TMath::Pi())
96 // default constructor
101 //__________________________________________________________________________
102 AliAnalysisTaskFastEmbedding::AliAnalysisTaskFastEmbedding(const char *name)
103 : AliAnalysisTaskSE(name)
110 ,fAODPath("AliAOD.root")
111 ,fTrackBranch("aodExtraTracks")
112 ,fMCparticlesBranch("aodExtraMCparticles")
119 ,fEvtSelMinJetEta(-999.)
120 ,fEvtSelMaxJetEta( 999.)
121 ,fEvtSelMinJetPhi(0.)
122 ,fEvtSelMaxJetPhi(TMath::Pi()*2.)
123 ,fToyMinNbOfTracks(1)
124 ,fToyMaxNbOfTracks(1)
127 ,fToyDistributionTrackPt(0.)
128 ,fToyMinTrackEta(-.5)
131 ,fToyMaxTrackPhi(2*TMath::Pi())
146 DefineOutput(1, TList::Class());
150 //__________________________________________________________________________
151 AliAnalysisTaskFastEmbedding::AliAnalysisTaskFastEmbedding(const AliAnalysisTaskFastEmbedding ©)
152 : AliAnalysisTaskSE()
153 ,fAODout(copy.fAODout)
154 ,fAODevent(copy.fAODevent)
155 ,fAODtree(copy.fAODtree)
156 ,fAODfile(copy.fAODfile)
158 ,fAODPathArray(copy.fAODPathArray)
159 ,fAODPath(copy.fAODPath)
160 ,fTrackBranch(copy.fTrackBranch)
161 ,fMCparticlesBranch(copy.fMCparticlesBranch)
162 ,fJetBranch(copy.fJetBranch)
164 ,fEmbedMode(copy.fEmbedMode)
165 ,fEvtSelecMode(copy.fEvtSelecMode)
166 ,fEvtSelMinJetPt(copy.fEvtSelMinJetPt)
167 ,fEvtSelMaxJetPt(copy.fEvtSelMaxJetPt)
168 ,fEvtSelMinJetEta(copy.fEvtSelMinJetEta)
169 ,fEvtSelMaxJetEta(copy.fEvtSelMaxJetEta)
170 ,fEvtSelMinJetPhi(copy.fEvtSelMinJetPhi)
171 ,fEvtSelMaxJetPhi(copy.fEvtSelMaxJetPhi)
172 ,fToyMinNbOfTracks(copy.fToyMinNbOfTracks)
173 ,fToyMaxNbOfTracks(copy.fToyMaxNbOfTracks)
174 ,fToyMinTrackPt(copy.fToyMinTrackPt)
175 ,fToyMaxTrackPt(copy.fToyMaxTrackPt)
176 ,fToyDistributionTrackPt(copy.fToyDistributionTrackPt)
177 ,fToyMinTrackEta(copy.fToyMinTrackEta)
178 ,fToyMaxTrackEta(copy.fToyMaxTrackEta)
179 ,fToyMinTrackPhi(copy.fToyMinTrackPhi)
180 ,fToyMaxTrackPhi(copy.fToyMaxTrackPhi)
181 ,fToyFilterMap(copy.fToyFilterMap)
182 ,fHistList(copy.fHistList)
183 ,fh1TrackPt(copy.fh1TrackPt)
184 ,fh2TrackEtaPhi(copy.fh2TrackEtaPhi)
185 ,fh1TrackN(copy.fh1TrackN)
186 ,fh1JetPt(copy.fh1JetPt)
187 ,fh2JetEtaPhi(copy.fh2JetEtaPhi)
188 ,fh1JetN(copy.fh1JetN)
189 ,fh1MCTrackPt(copy.fh1MCTrackPt)
190 ,fh2MCTrackEtaPhi(copy.fh2MCTrackEtaPhi)
191 ,fh1MCTrackN(copy.fh1MCTrackN)
192 ,fh1AODfile(copy.fh1AODfile)
198 //__________________________________________________________________________
199 AliAnalysisTaskFastEmbedding& AliAnalysisTaskFastEmbedding::operator=(const AliAnalysisTaskFastEmbedding& o)
204 AliAnalysisTaskSE::operator=(o);
206 fAODevent = o.fAODevent;
207 fAODtree = o.fAODtree;
208 fAODfile = o.fAODfile;
210 fAODPathArray = o.fAODPathArray;
211 fAODPath = o.fAODPath;
212 fTrackBranch = o.fTrackBranch;
213 fMCparticlesBranch = o.fMCparticlesBranch;
214 fJetBranch = o.fJetBranch;
216 fEmbedMode = o.fEmbedMode;
217 fEvtSelecMode = o.fEvtSelecMode;
218 fEvtSelMinJetPt = o.fEvtSelMinJetPt;
219 fEvtSelMaxJetPt = o.fEvtSelMaxJetPt;
220 fEvtSelMinJetEta = o.fEvtSelMinJetEta;
221 fEvtSelMaxJetEta = o.fEvtSelMaxJetEta;
222 fEvtSelMinJetPhi = o.fEvtSelMinJetPhi;
223 fEvtSelMaxJetPhi = o.fEvtSelMaxJetPhi;
224 fToyMinNbOfTracks = o.fToyMinNbOfTracks;
225 fToyMaxNbOfTracks = o.fToyMaxNbOfTracks;
226 fToyMinTrackPt = o.fToyMinTrackPt;
227 fToyMaxTrackPt = o.fToyMaxTrackPt;
228 fToyDistributionTrackPt = o.fToyDistributionTrackPt;
229 fToyMinTrackEta = o.fToyMinTrackEta;
230 fToyMaxTrackEta = o.fToyMaxTrackEta;
231 fToyMinTrackPhi = o.fToyMinTrackPhi;
232 fToyMaxTrackPhi = o.fToyMaxTrackPhi;
233 fToyFilterMap = o.fToyFilterMap;
234 fHistList = o.fHistList;
235 fh1TrackPt = o.fh1TrackPt;
236 fh2TrackEtaPhi = o.fh2TrackEtaPhi;
237 fh1TrackN = o.fh1TrackN;
238 fh1JetPt = o.fh1JetPt;
239 fh2JetEtaPhi = o.fh2JetEtaPhi;
241 fh1MCTrackPt = o.fh1MCTrackPt;
242 fh2MCTrackEtaPhi = o.fh2MCTrackEtaPhi;
243 fh1MCTrackN = o.fh1MCTrackN;
244 fh1AODfile = o.fh1AODfile;
251 //__________________________________________________________________________
252 AliAnalysisTaskFastEmbedding::~AliAnalysisTaskFastEmbedding()
259 //__________________________________________________________________________
260 void AliAnalysisTaskFastEmbedding::UserCreateOutputObjects()
262 // create output objects
263 if(fDebug > 1) Printf("AliAnalysisTaskFastEmbedding::UserCreateOutputObjects()");
265 // connect output aod
266 // create a new branch for extra tracks
267 fAODout = AODEvent();
269 AliError("Output AOD not found.");
272 if(!fAODout->FindListObject(fTrackBranch.Data()) && strlen(fTrackBranch.Data())){
273 AliInfo(Form("Add AOD branch %s", fTrackBranch.Data()));
274 TClonesArray *tracks = new TClonesArray("AliAODTrack",0);
275 tracks->SetName(fTrackBranch.Data());
276 AddAODBranch("TClonesArray", &tracks);
278 // create new branch for extra mcparticle if available as input
279 if(fAODevent && fAODevent->FindListObject("mcparticles") && strlen(fMCparticlesBranch.Data())){
280 AliInfo(Form("Add AOD branch %s", fMCparticlesBranch.Data()));
281 TClonesArray *mcparticles = new TClonesArray("AliAODMCParticle",0);
282 mcparticles->SetName(fMCparticlesBranch.Data());
283 AddAODBranch("TClonesArray", &mcparticles);
292 if(!fHistList) fHistList = new TList();
293 fHistList->SetOwner(kTRUE);
295 Bool_t oldStatus = TH1::AddDirectoryStatus();
296 TH1::AddDirectory(kFALSE);
298 fh1TrackPt = new TH1F("fh1TrackPt","pT of extra tracks;p_{T};entries", 250, 0., 250.);
299 fh2TrackEtaPhi = new TH2F("fh2TrackEtaPhi","eta-phi distribution of extra tracks;#eta;#phi", 20, -1., 1., 60, 0., 2*TMath::Pi());
300 fh1TrackN = new TH1F("fh1TrackN", "nb. of extra tracks per event;nb. of tracks;entries",300, 0., 300.);
302 fHistList->Add(fh1TrackPt);
303 fHistList->Add(fh2TrackEtaPhi);
304 fHistList->Add(fh1TrackN);
306 if(fEmbedMode==kAODFull || fEmbedMode==kAODJetTracks || fEmbedMode==kAODJet4Mom){
308 fh1JetPt = new TH1F("fh1JetPt", "pT of extra jets;p_{T};entries", 250, 0., 250.);
309 fh2JetEtaPhi = new TH2F("fh2JetEtaPhi", "eta-phi distribution of extra jets;#eta;#phi", 20, -1., 1., 60, 0., 2*TMath::Pi());
310 fh1JetN = new TH1F("fh1JetN", "nb. of extra jets per event;nb. of jets;entries",20,0.,20.);
312 fHistList->Add(fh1JetPt);
313 fHistList->Add(fh2JetEtaPhi);
314 fHistList->Add(fh1JetN);
318 if(fAODevent && fAODevent->FindListObject("mcparticles") && strlen(fMCparticlesBranch.Data())){
320 fh1MCTrackPt = new TH1F("fh1MCTrackPt","pT of MC extra tracks;p_{T};entries", 250, 0., 250.);
321 fh2MCTrackEtaPhi = new TH2F("fh2MCTrackEtaPhi","eta-phi distribution of MC extra tracks;#eta;#phi", 20, -1., 1., 60, 0., 2*TMath::Pi());
322 fh1MCTrackN = new TH1F("fh1MCTrackN", "nb. of MC extra tracks per event;nb. of tracks;entries",300, 0., 300.);
324 fHistList->Add(fh1MCTrackPt);
325 fHistList->Add(fh2MCTrackEtaPhi);
326 fHistList->Add(fh1MCTrackN);
330 fh1AODfile = new TH1I("fh1AODfile", "overview of opened AOD files from the array", 100, 0, 100);
331 fHistList->Add(fh1AODfile);
333 // =========== Switch on Sumw2 for all histos ===========
334 for (Int_t i=0; i<fHistList->GetEntries(); ++i) {
335 TH1 *h1 = dynamic_cast<TH1*>(fHistList->At(i));
342 TH1::AddDirectory(oldStatus);
346 rndm = new TRandom3();
347 Int_t id = GetJobID();
348 if(id>-1) rndm->SetSeed(id);
349 else rndm->SetSeed(); // a TTUID is generated and used for seed
350 AliInfo(Form("TRandom3 seed: %d", rndm->GetSeed()));
352 // embed mode with AOD
353 if(fEmbedMode==kAODFull || fEmbedMode==kAODJetTracks || fEmbedMode==kAODJet4Mom){
356 Int_t rc = OpenAODfile();
358 fh1AODfile->Fill(rc);
360 } //end: embed mode with AOD
364 PostData(1, fHistList);
368 //__________________________________________________________________________
369 void AliAnalysisTaskFastEmbedding::Init()
372 if(fDebug > 1) Printf("AliAnalysisTaskFastEmbedding::Init()");
377 //__________________________________________________________________________
378 void AliAnalysisTaskFastEmbedding::UserExec(Option_t *)
380 if(fDebug > 1) Printf("AliAnalysisTaskFastEmbedding::UserExec()");
383 AliError("Need output AOD, but is not connected.");
384 PostData(1, fHistList);
389 TClonesArray *tracks = (TClonesArray*)(fAODout->FindListObject(fTrackBranch.Data()));
391 AliError("Extra track branch not found in output.");
392 PostData(1, fHistList);
401 // === embed mode with AOD ===
402 if(fEmbedMode==kAODFull || fEmbedMode==kAODJetTracks || fEmbedMode==kAODJet4Mom){
404 AliError("Need input AOD, but is not connected.");
405 PostData(1, fHistList);
410 TClonesArray *aodJets = 0;
411 if(fJetBranch.Length()) aodJets = dynamic_cast<TClonesArray*>(fAODevent->FindListObject(fJetBranch.Data()));
412 else aodJets = fAODevent->GetJets();
414 AliError("Could not find jets in AOD. Check jet branch when indicated.");
415 PostData(1, fHistList);
420 Int_t nEvents = fAODtree->GetEntries();
422 Bool_t useEntry = kFALSE;
423 while(!useEntry){ // protection need, if no event fulfills requierment
427 AliDebug(AliLog::kDebug, "Last event in AOD reached, start from entry 0 again.");
430 AliDebug(AliLog::kDebug, "Last event in AOD reached, select new AOD file ...");
432 Int_t rc = OpenAODfile();
434 PostData(1, fHistList);
437 fh1AODfile->Fill(rc);
439 // new file => we must use the new jet array
440 if(fJetBranch.Length()) aodJets = dynamic_cast<TClonesArray*>(fAODevent->FindListObject(fJetBranch.Data()));
441 else aodJets = fAODevent->GetJets();
443 AliError("Could not find jets in AOD. Check jet branch when indicated.");
444 PostData(1, fHistList);
450 fAODtree->GetEvent(fEntry);
453 if(fEvtSelecMode==kEventsJetPt){
454 Int_t nJets = aodJets->GetEntries();
455 for(Int_t ij=0; ij<nJets; ++ij){
456 AliAODJet *jet = dynamic_cast<AliAODJet*>(aodJets->At(ij));
459 if( (fEvtSelMinJetPt==-1. || jet->Pt()>=fEvtSelMinJetPt)
460 && (fEvtSelMaxJetPt==-1. || jet->Pt()<=fEvtSelMaxJetPt)
461 && (jet->Eta()>=fEvtSelMinJetEta && jet->Eta()<=fEvtSelMaxJetEta)
462 && (jet->Phi()>=fEvtSelMinJetPhi && jet->Phi()<=fEvtSelMaxJetPhi)){
470 if(fEvtSelecMode==kEventsAll){
476 AliInfo(Form("Use entry %d from extra AOD.", fEntry-1));
479 TClonesArray *mcpartIN = (TClonesArray*)(fAODevent->FindListObject("mcparticles"));
480 TClonesArray *mcpartOUT = 0x0;
482 mcpartOUT = (TClonesArray*)(fAODout->FindListObject(fMCparticlesBranch.Data()));
485 AliInfo("No extra MC particles found.");
489 if(fEmbedMode==kAODFull || fEmbedMode==kAODJetTracks){ // take all tracks or jet tracks
490 // loop over input tracks
493 Int_t nJets = aodJets->GetEntries();
494 Int_t nSelectedJets = 0;
495 AliAODJet *leadJet = 0x0; // used for jet tracks only
497 if(fEmbedMode==kAODFull){
498 nTracks = fAODevent->GetNumberOfTracks();
500 for(Int_t ij=0; ij<nJets; ++ij){
501 AliAODJet *jet = dynamic_cast<AliAODJet*>(aodJets->At(ij));
503 if( (fEvtSelMinJetPt==-1. || jet->Pt()>=fEvtSelMinJetPt)
504 && (fEvtSelMaxJetPt==-1. || jet->Pt()<=fEvtSelMaxJetPt)
505 && (jet->Eta()>=fEvtSelMinJetEta && jet->Eta()<=fEvtSelMaxJetEta)
506 && (jet->Phi()>=fEvtSelMinJetPhi && jet->Eta()<=fEvtSelMaxJetPhi)){
508 fh1JetPt->Fill(jet->Pt());
509 fh2JetEtaPhi->Fill(jet->Eta(), jet->Phi());
514 fh1JetN->Fill(nSelectedJets);
517 if(fEmbedMode==kAODJetTracks){
518 // look for leading jet within selection
519 // get reference tracks for this jet
520 Float_t leadJetPt = 0.;
521 for(Int_t ij=0; ij<nJets; ++ij){
522 AliAODJet *jet = dynamic_cast<AliAODJet*>(aodJets->At(ij));
524 if( (fEvtSelMinJetPt==-1. || jet->Pt()>=fEvtSelMinJetPt)
525 && (fEvtSelMaxJetPt==-1. || jet->Pt()<=fEvtSelMaxJetPt)
526 && (jet->Eta()>=fEvtSelMinJetEta && jet->Eta()<=fEvtSelMaxJetEta)
527 && (jet->Phi()>=fEvtSelMinJetPhi && jet->Eta()<=fEvtSelMaxJetPhi)){
528 if(jet->Pt()>leadJetPt){
529 leadJetPt = jet->Pt();
535 nTracks = leadJet->GetRefTracks()->GetEntriesFast();
536 fh1JetPt->Fill(leadJet->Pt());
537 fh2JetEtaPhi->Fill(leadJet->Eta(), leadJet->Pt());
542 fh1TrackN->Fill((Float_t)nTracks);
544 for(Int_t it=0; it<nTracks; ++it){
545 AliAODTrack *tmpTr = 0x0;
546 if(fEmbedMode==kAODFull) tmpTr = fAODevent->GetTrack(it);
547 if(fEmbedMode==kAODJetTracks) tmpTr = dynamic_cast<AliAODTrack*>(leadJet->GetRefTracks()->At(it));
550 tmpTr->SetStatus(AliESDtrack::kEmbedded);
552 new ((*tracks)[nAODtracks++]) AliAODTrack(*tmpTr);
553 dummy = (*tracks)[nAODtracks-1];
555 fh1TrackPt->Fill(tmpTr->Pt());
556 fh2TrackEtaPhi->Fill(tmpTr->Eta(), tmpTr->Phi());
560 Int_t nMCpart = mcpartIN->GetEntriesFast();
562 Int_t nPhysicalPrimary=0;
564 for(Int_t ip=0; ip<nMCpart; ++ip){
565 AliAODMCParticle *tmpPart = (AliAODMCParticle*) mcpartIN->At(ip);
567 if(fEmbedMode==kAODJetTracks){
568 // jet track? else continue
569 // not implemented yet
573 new((*mcpartOUT)[nAODmcpart++]) AliAODMCParticle(*tmpPart);
574 dummy = (*mcpartOUT)[nAODmcpart-1];
576 if(tmpPart->IsPhysicalPrimary() && tmpPart->Charge()!=0. && tmpPart->Charge()!=-99. ){
577 fh1MCTrackPt->Fill(tmpPart->Pt());
578 fh2MCTrackEtaPhi->Fill(tmpPart->Eta(), tmpPart->Phi());
582 fh1MCTrackN->Fill((Float_t)nPhysicalPrimary);
585 } // end: embed all tracks or jet tracks
588 if(fEmbedMode==kAODJet4Mom){
591 Int_t nJets = aodJets->GetEntries();
592 fh1TrackN->Fill((Float_t)nJets);
593 for(Int_t ij=0; ij<nJets; ++ij){
594 AliAODJet *jet = dynamic_cast<AliAODJet*>(aodJets->At(ij));
596 AliAODTrack *tmpTr = (AliAODTrack*)jet;
597 tmpTr->SetFlags(AliESDtrack::kEmbedded);
599 new ((*tracks)[nAODtracks++]) AliAODTrack(*tmpTr);
600 dummy = (*tracks)[nAODtracks-1];
602 fh1TrackPt->Fill(tmpTr->Pt());
603 fh2TrackEtaPhi->Fill(tmpTr->Eta(), tmpTr->Phi());
606 } // end: embed jets as 4-momenta
609 } //end: embed mode with AOD
612 // === embed mode with toy ===
613 if(fEmbedMode==kToyTracks){
614 Int_t nT = (Int_t)(rndm->Uniform(fToyMinNbOfTracks, fToyMaxNbOfTracks)+0.5);
616 fh1TrackN->Fill((Float_t)nT);
618 for(Int_t i=0; i<nT; ++i){
621 if(fToyMinTrackPt!=fToyMaxTrackPt){
622 if(fToyDistributionTrackPt==0){
623 pt = rndm->Uniform(fToyMinTrackPt, fToyMaxTrackPt);
625 while(pt<fToyMinTrackPt||pt>fToyMaxTrackPt){
626 pt = rndm->Exp(fToyDistributionTrackPt); // no power law yet!!
627 pt += fToyMinTrackPt;
633 Double_t eta = rndm->Uniform(fToyMinTrackEta,fToyMaxTrackEta);
634 Double_t phi = rndm->Uniform(fToyMinTrackPhi,fToyMaxTrackPhi);
635 phi = TVector2::Phi_0_2pi(phi);
637 if(fDebug) Printf("Add track #%d: pt %.2f, eta %.2f, phi %.2f", i, pt, eta, phi);
639 Double_t theta = 2*TMath::ATan(1/TMath::Exp(eta));
650 AliAODTrack *tmpTr = new AliAODTrack( -999, // id
661 kFALSE, // used for vertex fit
662 kFALSE, // used for prim vtx fit
663 AliAODTrack::kUndef, // type
664 fToyFilterMap, // select info
665 -999. // chi2 per NDF
667 tmpTr->SetFlags(AliESDtrack::kEmbedded);
669 new((*tracks)[nAODtracks++]) AliAODTrack(*tmpTr);
670 dummy = (*tracks)[nAODtracks-1];
672 fh1TrackPt->Fill(pt);
673 fh2TrackEtaPhi->Fill(eta,phi);
677 } //end: embed mode with toy
680 PostData(1, fHistList);
684 //__________________________________________________________________________
685 void AliAnalysisTaskFastEmbedding::Terminate(Option_t *)
687 if(fDebug > 1) Printf("AliAnalysisTaskFastEmbedding::Terminate()");
689 if(fAODfile && fAODfile->IsOpen())
694 //__________________________________________________________________________
695 Int_t AliAnalysisTaskFastEmbedding::GetJobID()
699 const char* env = gSystem->Getenv("ALIEN_PROC_ID"); // GRID
700 //if(!env || !strlen(env)) env = gSystem->Getenv("LSB_JOBINDEX"); // GSI
702 if(env && strlen(env)){
704 AliInfo(Form("Job index %d", id));
707 AliInfo("Job index not found. Okay if running locally.");
713 //__________________________________________________________________________
715 Int_t AliAnalysisTaskFastEmbedding::SelectAODfile(){
717 Int_t nFiles = fAODPathArray->GetEntries();
718 Int_t n = rndm->Integer(nFiles);
719 AliInfo(Form("Select AOD file %d", n));
720 TObjString *objStr = (TObjString*) fAODPathArray->At(n);
722 AliError("Could not get path of aod file.");
725 fAODPath = objStr->GetString();
730 //__________________________________________________________________________
732 Int_t AliAnalysisTaskFastEmbedding::OpenAODfile(Int_t trial){
735 AliError("Could not open AOD files, give up ...");
740 if(fAODPathArray) rc = SelectAODfile();
743 TDirectory *owd = gDirectory;
746 fAODfile = TFile::Open(fAODPath.Data());
752 AliError(Form("Could not open AOD file %s, try another from the list ...", fAODPath.Data()));
753 rc = OpenAODfile(trial+1);
755 AliError(Form("Could not open AOD file %s.", fAODPath.Data()));
761 fAODtree = (TTree*)fAODfile->Get("aodTree");
764 AliError("AOD tree not found.");
769 fAODevent = new AliAODEvent();
770 fAODevent->ReadFromTree(fAODtree);
771 return rc; // file position in AOD path array, if array available