]> git.uio.no Git - u/mrichter/AliRoot.git/blame - JETAN/AliJetESDReader.cxx
Preliminary solution for AOD connection.
[u/mrichter/AliRoot.git] / JETAN / AliJetESDReader.cxx
CommitLineData
99e5fe42 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
1994c1b0 15
16//-------------------------------------------------------------------------
99e5fe42 17// Jet ESD Reader
18// ESD reader for jet analysis
b45b0c92 19// Authors: Mercedes Lopez Noriega (mercedes.lopez.noriega@cern.ch)
20// Magali Estienne <magali.estienne@IReS.in2p3.fr>
1994c1b0 21//-------------------------------------------------------------------------
22
99e5fe42 23
24#include <Riostream.h>
25#include <TSystem.h>
26#include <TLorentzVector.h>
83a444b1 27#include <TVector3.h>
b45b0c92 28#include <TGeoManager.h>
29
99e5fe42 30#include "AliJetESDReader.h"
31#include "AliJetESDReaderHeader.h"
1b307662 32#include "AliESDEvent.h"
99e5fe42 33#include "AliESDtrack.h"
5b81d1ce 34//#include "AliEMCALGeometry.h"
35#include "AliJetDummyGeo.h"
b45b0c92 36#include "AliJetFillUnitArrayTracks.h"
37#include "AliJetUnitArray.h"
99e5fe42 38
39ClassImp(AliJetESDReader)
40
1b7d5d7e 41AliJetESDReader::AliJetESDReader():
b45b0c92 42 AliJetReader(),
43 fGeom(0),
44 fChain(0x0),
45 fESD(0x0),
46 fHadCorr(0x0),
47 fTpcGrid(0x0),
48 fEmcalGrid(0x0),
49 fPtCut(0),
50 fHCorrection(0),
51 fNumUnits(0),
52 fDebug(0),
53 fNIn(0),
54 fOpt(0),
55 fNeta(0),
56 fNphi(0),
57 fArrayInitialised(0)
99e5fe42 58{
59 // Constructor
99e5fe42 60}
61
62//____________________________________________________________________________
63
64AliJetESDReader::~AliJetESDReader()
65{
66 // Destructor
b45b0c92 67 delete fChain;
68 delete fESD;
69 delete fTpcGrid;
70 delete fEmcalGrid;
99e5fe42 71}
72
73//____________________________________________________________________________
74
75void AliJetESDReader::OpenInputFiles()
99e5fe42 76{
77 // chain for the ESDs
78 fChain = new TChain("esdTree");
99e5fe42 79
80 // get directory and pattern name from the header
7d0f353c 81 const char* dirName=fReaderHeader->GetDirectory();
82 const char* pattern=fReaderHeader->GetPattern();
99e5fe42 83
7d0f353c 84// // Add files matching patters to the chain
85
86 void *dir = gSystem->OpenDirectory(dirName);
87 const char *name = 0x0;
b45b0c92 88 int nesd = ((AliJetESDReaderHeader*) fReaderHeader)->GetNesd();
7d0f353c 89 int a = 0;
90 while ((name = gSystem->GetDirEntry(dir))){
91 if (a>=nesd) continue;
92
93 if (strstr(name,pattern)){
94 char path[256];
95 sprintf(path,"%s/%s/AliESDs.root",dirName,name);
96 fChain->AddFile(path);
97 a++;
98 }
99 }
1994c1b0 100
101 gSystem->FreeDirectory(dir);
7d0f353c 102
103
104 fESD = 0;
1994c1b0 105 fChain->SetBranchAddress("ESD", &fESD);
106
99e5fe42 107 int nMax = fChain->GetEntries();
7d0f353c 108
19e6695b 109 printf("\n AliJetESDReader: Total number of events in chain= %d \n",nMax);
1994c1b0 110
99e5fe42 111 // set number of events in header
112 if (fReaderHeader->GetLastEvent() == -1)
113 fReaderHeader->SetLastEvent(nMax);
114 else {
115 Int_t nUsr = fReaderHeader->GetLastEvent();
116 fReaderHeader->SetLastEvent(TMath::Min(nMax,nUsr));
117 }
118}
119
f3f3617d 120void AliJetESDReader::ConnectTree(TTree* tree, TObject* data) {
b45b0c92 121 // Connect the tree
1b307662 122 fChain = (TChain*) tree;
123 fESD = (AliESDEvent*) data;
7d0f353c 124
7d0f353c 125 Int_t nMax = fChain->GetEntries();
19e6695b 126 printf("\n AliJetESDReader: Total number of events in chain= %5d \n", nMax);
7d0f353c 127 // set number of events in header
128 if (fReaderHeader->GetLastEvent() == -1)
129 fReaderHeader->SetLastEvent(nMax);
130 else {
131 Int_t nUsr = fReaderHeader->GetLastEvent();
132 fReaderHeader->SetLastEvent(TMath::Min(nMax,nUsr));
133 }
134}
135
99e5fe42 136//____________________________________________________________________________
137
58e3c1fe 138Bool_t AliJetESDReader::FillMomentumArray(Int_t /*event*/)
99e5fe42 139{
1994c1b0 140 // Fill momentum array
141
99e5fe42 142 Int_t goodTrack = 0;
143 Int_t nt = 0;
83a444b1 144 Float_t pt, eta;
145 TVector3 p3;
1994c1b0 146
99e5fe42 147 // clear momentum array
69b18641 148 ClearArray();
149 fDebug = fReaderHeader->GetDebug();
99e5fe42 150 // get event from chain
76c48857 151 // fChain->GetTree()->GetEntry(event);
5a50fd9a 152
7d0f353c 153 if (!fESD) {
154 return kFALSE;
155 }
1994c1b0 156
99e5fe42 157 // get number of tracks in event (for the loop)
158 nt = fESD->GetNumberOfTracks();
1b307662 159 printf("Fill Momentum Array %5d ", nt);
160
1994c1b0 161 // temporary storage of signal and pt cut flag
83a444b1 162 Int_t* sflag = new Int_t[nt];
163 Int_t* cflag = new Int_t[nt];
1994c1b0 164
99e5fe42 165 // get cuts set by user
7d0f353c 166 Float_t ptMin = fReaderHeader->GetPtCut();
83a444b1 167 Float_t etaMin = fReaderHeader->GetFiducialEtaMin();
168 Float_t etaMax = fReaderHeader->GetFiducialEtaMax();
1994c1b0 169
99e5fe42 170 //loop over tracks
171 for (Int_t it = 0; it < nt; it++) {
7d0f353c 172 AliESDtrack *track = fESD->GetTrack(it);
173 UInt_t status = track->GetStatus();
174
175 Double_t mom[3];
176 track->GetPxPyPz(mom);
177 p3.SetXYZ(mom[0],mom[1],mom[2]);
178 pt = p3.Pt();
b45b0c92 179 if ((status & AliESDtrack::kTPCrefit) == 0) continue; // quality check
180 if ((status & AliESDtrack::kITSrefit) == 0) continue; // quality check
7d0f353c 181 if (((AliJetESDReaderHeader*) fReaderHeader)->ReadSignalOnly()
b45b0c92 182 && TMath::Abs(track->GetLabel()) > 10000) continue; // quality check
7d0f353c 183 if (((AliJetESDReaderHeader*) fReaderHeader)->ReadBkgdOnly()
b45b0c92 184 && TMath::Abs(track->GetLabel()) < 10000) continue; // quality check
7d0f353c 185 eta = p3.Eta();
b45b0c92 186 if ( (eta > etaMax) || (eta < etaMin)) continue; // checking eta cut
7d0f353c 187
188 new ((*fMomentumArray)[goodTrack]) TLorentzVector(p3,p3.Mag());
189 sflag[goodTrack]=0;
190 if (TMath::Abs(track->GetLabel()) < 10000) sflag[goodTrack]=1;
191 cflag[goodTrack]=0;
69b18641 192 if (pt > ptMin) cflag[goodTrack]=1; // pt cut
7d0f353c 193 goodTrack++;
99e5fe42 194 }
8011d399 195 // set the signal flags
83a444b1 196 fSignalFlag.Set(goodTrack,sflag);
197 fCutFlag.Set(goodTrack,cflag);
b45b0c92 198
199//
200//
69b18641 201 if (fTpcGrid || fEmcalGrid) {
202 SetEMCALGeometry();
203 InitParameters();
204 AliJetFillUnitArrayTracks *fillUAFromTracks = new AliJetFillUnitArrayTracks();
205 fillUAFromTracks->SetReaderHeader(fReaderHeader);
206 fillUAFromTracks->SetMomentumArray(fMomentumArray);
207 fillUAFromTracks->SetTPCGrid(fTpcGrid);
208 fillUAFromTracks->SetEMCalGrid(fEmcalGrid);
209 fillUAFromTracks->SetHadCorrection(fHCorrection);
210 fillUAFromTracks->SetHadCorrector(fHadCorr);
211 fNeta = fillUAFromTracks->GetNeta();
212 fNphi = fillUAFromTracks->GetNphi();
213 fillUAFromTracks->SetActive(kFALSE);
214 // TPC only or Digits+TPC or Clusters+TPC
215 if(fOpt%2==!0 && fOpt!=0) {
216 fillUAFromTracks->SetActive(kTRUE);
217 fillUAFromTracks->SetUnitArray(fUnitArray);
218 fillUAFromTracks->ExecuteTask("tpc");
219 }
220
221 delete fillUAFromTracks;
b45b0c92 222 }
69b18641 223
7d0f353c 224 return kTRUE;
99e5fe42 225}
226
b45b0c92 227
228void AliJetESDReader::SetEMCALGeometry()
229{
230 // Define EMCAL geometry to be able to read ESDs
5b81d1ce 231 fGeom = AliJetDummyGeo::GetInstance();
b45b0c92 232 if (fGeom == 0)
5b81d1ce 233 fGeom = AliJetDummyGeo::GetInstance("SHISH_77_TRD1_2X2_FINAL_110DEG","EMCAL");
b45b0c92 234
235 // To be setted to run some AliEMCALGeometry functions
236 TGeoManager::Import("geometry.root");
237 fGeom->GetTransformationForSM();
b45b0c92 238 printf("\n EMCal Geometry set ! \n");
239
240}
7d0f353c 241
b45b0c92 242void AliJetESDReader::InitParameters()
243{
244 // Initialise parameters
245 fHCorrection = 0; // For hadron correction
246 fHadCorr = 0; // For hadron correction
247 fNumUnits = fGeom->GetNCells(); // Number of cells in EMCAL
248 if(fDebug>1) printf("\n EMCal parameters initiated ! \n");
249}
250
251void AliJetESDReader::InitUnitArray()
252{
253 //Initialises unit arrays
254 Int_t nElements = fTpcGrid->GetNEntries();
255 if(fArrayInitialised) delete [] fUnitArray;
256 if(fTpcGrid->GetGridType()==0)
257 fUnitArray = new AliJetUnitArray[nElements];
258 if(fTpcGrid->GetGridType()==1)
259 fUnitArray = new AliJetUnitArray[fNumUnits+nElements];
260 fArrayInitialised = 1;
261}
7d0f353c 262
99e5fe42 263