* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-
+
+//-------------------------------------------------------------------------
// Jet ESD Reader
// ESD reader for jet analysis
// Author: Mercedes Lopez Noriega (mercedes.lopez.noriega@cern.ch)
+//-------------------------------------------------------------------------
+
#include <Riostream.h>
#include <TSystem.h>
ClassImp(AliJetESDReader)
-AliJetESDReader::AliJetESDReader()
+AliJetESDReader::AliJetESDReader():
+ fMass(0),
+ fSign(0)
{
// Constructor
- printf("\nIn reader constructor\n");
fReaderHeader = 0x0;
- fMass = 0;
- fSign = 0;
}
//____________________________________________________________________________
void AliJetESDReader::OpenInputFiles()
{
- // Open input files
- printf("\nOpening files\n");
// chain for the ESDs
fChain = new TChain("esdTree");
- fChainMC = new TChain("mcStackTree");
// get directory and pattern name from the header
const char* dirName=fReaderHeader->GetDirectory();
// Add files matching patters to the chain
void *dir = gSystem->OpenDirectory(dirName);
const char *name = 0x0;
+ int nesd = fReaderHeader->GetNesd();
+ int a = 0;
while ((name = gSystem->GetDirEntry(dir))){
+ if (a>=nesd) continue;
if (strstr(name,pattern)){
printf("Adding %s\n",name);
char path[256];
sprintf(path,"%s/%s",dirName,name);
fChain->AddFile(path,-1);
- fChainMC->AddFile(path,-1);
- }
+ a++;
+ }
}
-
- gSystem ->FreeDirectory(dir);
- fChain ->SetBranchAddress("ESD", &fESD);
- fChainMC->SetBranchAddress("Header", &fAliHeader);
- fChainMC->SetBranchAddress("Stack", &fArrayMC);
-
+ printf("%d ESDs added\n",a);
+
+ gSystem->FreeDirectory(dir);
+ fChain->SetBranchAddress("ESD", &fESD);
+
int nMax = fChain->GetEntries();
printf("\nTotal number of events in chain= %d",nMax);
-
+
// set number of events in header
if (fReaderHeader->GetLastEvent() == -1)
fReaderHeader->SetLastEvent(nMax);
void AliJetESDReader::FillMomentumArray(Int_t event)
{
- // Fill the momentum array for each track
+ // Fill momentum array
+
Int_t goodTrack = 0;
Int_t nt = 0;
Float_t pt, eta;
TVector3 p3;
-
+
// clear momentum array
ClearArray();
-
+
// get event from chain
fChain->GetEntry(event);
- fChainMC->GetEntry(event);
-
+
// get number of tracks in event (for the loop)
nt = fESD->GetNumberOfTracks();
-
- // temporary storage of signal and pt cut flag
+
+ // temporary storage of signal and pt cut flag
Int_t* sflag = new Int_t[nt];
Int_t* cflag = new Int_t[nt];
-
+
// get cuts set by user
Float_t ptMin = fReaderHeader->GetPtCut();
Float_t etaMin = fReaderHeader->GetFiducialEtaMin();
Float_t etaMax = fReaderHeader->GetFiducialEtaMax();
-
+
//loop over tracks
for (Int_t it = 0; it < nt; it++) {
- AliESDtrack *track = fESD->GetTrack(it);
- UInt_t status = track->GetStatus();
-
- Double_t mom[3];
- track->GetPxPyPz(mom);
-
- p3.SetXYZ(mom[0],mom[1],mom[2]);
- pt = p3.Pt();
- if (((status & AliESDtrack::kITSrefit) == 0) ||
- ((status & AliESDtrack::kTPCrefit) == 0)) continue; // quality check
- if (((AliJetESDReaderHeader*) fReaderHeader)->ReadSignalOnly()
- && TMath::Abs(track->GetLabel()) > 10000) continue; // quality check
- if (((AliJetESDReaderHeader*) fReaderHeader)->ReadBkgdOnly()
- && TMath::Abs(track->GetLabel()) < 10000) continue; // quality check
- eta = p3.Eta();
- if ( (eta > etaMax) || (eta < etaMin)) continue; // checking eta cut
-
- new ((*fMomentumArray)[goodTrack]) TLorentzVector(p3,p3.Mag());
- sflag[goodTrack]=0;
- if (TMath::Abs(track->GetLabel()) < 10000) sflag[goodTrack]=1;
- cflag[goodTrack]=0;
- if (pt > ptMin) cflag[goodTrack]=1; // pt cut
- goodTrack++;
+ AliESDtrack *track = fESD->GetTrack(it);
+ UInt_t status = track->GetStatus();
+
+ Double_t mom[3];
+ track->GetPxPyPz(mom);
+ p3.SetXYZ(mom[0],mom[1],mom[2]);
+ pt = p3.Pt();
+ if ((status & AliESDtrack::kTPCrefit) == 0) continue; // quality check
+ //if ((status & AliESDtrack::kITSrefit) == 0) continue; // quality check
+ if (((AliJetESDReaderHeader*) fReaderHeader)->ReadSignalOnly()
+ && TMath::Abs(track->GetLabel()) > 10000) continue; // quality check
+ if (((AliJetESDReaderHeader*) fReaderHeader)->ReadBkgdOnly()
+ && TMath::Abs(track->GetLabel()) < 10000) continue; // quality check
+ eta = p3.Eta();
+ if ( (eta > etaMax) || (eta < etaMin)) continue; // checking eta cut
+
+ new ((*fMomentumArray)[goodTrack]) TLorentzVector(p3,p3.Mag());
+ sflag[goodTrack]=0;
+ if (TMath::Abs(track->GetLabel()) < 10000) sflag[goodTrack]=1;
+ cflag[goodTrack]=0;
+ if (pt > ptMin) cflag[goodTrack]=1; // pt cut
+ goodTrack++;
}
// set the signal flags
fSignalFlag.Set(goodTrack,sflag);
fCutFlag.Set(goodTrack,cflag);
-
- //printf("\nIn event %d, number of good tracks %d \n", event, goodTrack);
}