1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 //-------------------------------------------------------------------------
18 // ESD reader for jet analysis
19 // Author: Mercedes Lopez Noriega (mercedes.lopez.noriega@cern.ch)
20 //-------------------------------------------------------------------------
23 #include <Riostream.h>
25 #include <TLorentzVector.h>
27 #include "AliJetESDReader.h"
28 #include "AliJetESDReaderHeader.h"
30 #include "AliESDtrack.h"
32 ClassImp(AliJetESDReader)
34 AliJetESDReader::AliJetESDReader():
42 //____________________________________________________________________________
44 AliJetESDReader::~AliJetESDReader()
49 //____________________________________________________________________________
51 void AliJetESDReader::OpenInputFiles()
54 fChain = new TChain("esdTree");
56 // get directory and pattern name from the header
57 const char* dirName=fReaderHeader->GetDirectory();
58 const char* pattern=fReaderHeader->GetPattern();
60 // // Add files matching patters to the chain
62 void *dir = gSystem->OpenDirectory(dirName);
63 const char *name = 0x0;
64 int nesd = fReaderHeader->GetNesd();
66 while ((name = gSystem->GetDirEntry(dir))){
67 if (a>=nesd) continue;
69 if (strstr(name,pattern)){
71 sprintf(path,"%s/%s/AliESDs.root",dirName,name);
72 fChain->AddFile(path);
77 gSystem->FreeDirectory(dir);
81 fChain->SetBranchAddress("ESD", &fESD);
83 int nMax = fChain->GetEntries();
85 printf("\nTotal number of events in chain= %d",nMax);
87 // set number of events in header
88 if (fReaderHeader->GetLastEvent() == -1)
89 fReaderHeader->SetLastEvent(nMax);
91 Int_t nUsr = fReaderHeader->GetLastEvent();
92 fReaderHeader->SetLastEvent(TMath::Min(nMax,nUsr));
96 void AliJetESDReader::ConnectTree(TTree* tree) {
97 fChain = (TChain*) tree;
99 fChain->SetBranchAddress("ESD", &fESD);
100 Int_t nMax = fChain->GetEntries();
101 printf("\nTotal number of events in chain= %5d", nMax);
102 // set number of events in header
103 if (fReaderHeader->GetLastEvent() == -1)
104 fReaderHeader->SetLastEvent(nMax);
106 Int_t nUsr = fReaderHeader->GetLastEvent();
107 fReaderHeader->SetLastEvent(TMath::Min(nMax,nUsr));
111 //____________________________________________________________________________
113 Bool_t AliJetESDReader::FillMomentumArray(Int_t event)
115 // Fill momentum array
122 // clear momentum array
125 // get event from chain
126 fChain->GetTree()->GetEntry(event);
132 // get number of tracks in event (for the loop)
133 nt = fESD->GetNumberOfTracks();
134 // temporary storage of signal and pt cut flag
135 Int_t* sflag = new Int_t[nt];
136 Int_t* cflag = new Int_t[nt];
138 // get cuts set by user
139 Float_t ptMin = fReaderHeader->GetPtCut();
140 Float_t etaMin = fReaderHeader->GetFiducialEtaMin();
141 Float_t etaMax = fReaderHeader->GetFiducialEtaMax();
144 for (Int_t it = 0; it < nt; it++) {
145 AliESDtrack *track = fESD->GetTrack(it);
146 UInt_t status = track->GetStatus();
149 track->GetPxPyPz(mom);
150 p3.SetXYZ(mom[0],mom[1],mom[2]);
152 if ((status & AliESDtrack::kTPCrefit) == 0) continue; // quality check
153 if ((status & AliESDtrack::kITSrefit) == 0) continue; // quality check
154 if (((AliJetESDReaderHeader*) fReaderHeader)->ReadSignalOnly()
155 && TMath::Abs(track->GetLabel()) > 10000) continue; // quality check
156 if (((AliJetESDReaderHeader*) fReaderHeader)->ReadBkgdOnly()
157 && TMath::Abs(track->GetLabel()) < 10000) continue; // quality check
159 if ( (eta > etaMax) || (eta < etaMin)) continue; // checking eta cut
161 new ((*fMomentumArray)[goodTrack]) TLorentzVector(p3,p3.Mag());
163 if (TMath::Abs(track->GetLabel()) < 10000) sflag[goodTrack]=1;
165 if (pt > ptMin) cflag[goodTrack]=1; // pt cut
168 // set the signal flags
169 fSignalFlag.Set(goodTrack,sflag);
170 fCutFlag.Set(goodTrack,cflag);