1 ////////////////////////////////////////////////////////////////////////////////
3 /// AliFemtoEventReaderESD - the reader class for the Alice ESD ///
4 /// Reads in ESD information and converts it into internal AliFemtoEvent ///
5 /// Reads in AliESDfriend to create shared hit/quality information ///
6 /// Authors: Marek Chojnacki mchojnacki@knf.pw.edu.pl ///
7 /// Adam Kisiel kisiel@mps.ohio-state.edu ///
9 ////////////////////////////////////////////////////////////////////////////////
14 *Revision 1.2.2.2 2007/10/04 13:10:52 akisiel
15 *Add Kink index storageAliFemtoEventReaderESD.cxx AliFemtoTrack.cxx AliFemtoTrack.h
17 *Revision 1.2.2.1 2007/09/30 11:38:59 akisiel
18 *Adapt the readers to the new AliESDEvent structure
20 *Revision 1.2 2007/05/22 09:01:42 akisiel
21 *Add the possibiloity to save cut settings in the ROOT file
23 *Revision 1.1 2007/05/16 10:22:11 akisiel
24 *Making the directory structure of AliFemto flat. All files go into one common directory
26 *Revision 1.5 2007/05/03 09:45:20 akisiel
27 *Fixing Effective C++ warnings
29 *Revision 1.4 2007/04/27 07:28:34 akisiel
30 *Remove event number reading due to interface changes
32 *Revision 1.3 2007/04/27 07:25:16 akisiel
33 *Make revisions needed for compilation from the main AliRoot tree
35 *Revision 1.1.1.1 2007/04/25 15:38:41 panos
36 *Importing the HBT code dir
40 #include "AliFemtoEventReaderESD.h"
44 #include "AliESDEvent.h"
45 #include "AliESDtrack.h"
46 #include "AliESDVertex.h"
48 //#include "TSystem.h"
50 #include "AliFmPhysicalHelixD.h"
51 #include "AliFmThreeVectorF.h"
53 #include "SystemOfUnits.h"
55 #include "AliFemtoEvent.h"
56 #include "AliFemtoModelHiddenInfo.h"
58 ClassImp(AliFemtoEventReaderESD)
60 #if !(ST_NO_NAMESPACES)
61 using namespace units;
65 //____________________________
66 //constructor with 0 parameters , look at default settings
67 AliFemtoEventReaderESD::AliFemtoEventReaderESD():
78 // default constructor
81 AliFemtoEventReaderESD::AliFemtoEventReaderESD(const AliFemtoEventReaderESD &aReader) :
82 AliFemtoEventReader(aReader),
94 fInputFile = aReader.fInputFile;
95 fFileName = aReader.fFileName;
96 fConstrained = aReader.fConstrained;
97 fReadInner = aReader.fReadInner;
98 fNumberofEvent = aReader.fNumberofEvent;
99 fCurEvent = aReader.fCurEvent;
100 // fTree = aReader.fTree->CloneTree();
101 // fEvent = new AliESD(*aReader.fEvent);
102 fEvent = new AliESDEvent();
103 fEsdFile = new TFile(aReader.fEsdFile->GetName());
107 AliFemtoEventReaderESD::~AliFemtoEventReaderESD()
110 //delete fListOfFiles;
117 AliFemtoEventReaderESD& AliFemtoEventReaderESD::operator=(const AliFemtoEventReaderESD& aReader)
119 // assignment operator
120 if (this == &aReader)
123 fInputFile = aReader.fInputFile;
124 fFileName = aReader.fFileName;
125 fConstrained = aReader.fConstrained;
126 fReadInner = aReader.fReadInner;
127 fNumberofEvent = aReader.fNumberofEvent;
128 fCurEvent = aReader.fCurEvent;
129 if (fTree) delete fTree;
130 // fTree = aReader.fTree->CloneTree();
131 if (fEvent) delete fEvent;
132 fEvent = new AliESDEvent();
133 if (fEsdFile) delete fEsdFile;
134 fEsdFile = new TFile(aReader.fEsdFile->GetName());
139 AliFemtoString AliFemtoEventReaderESD::Report()
141 // create reader report
142 AliFemtoString temp = "\n This is the AliFemtoEventReaderESD\n";
147 void AliFemtoEventReaderESD::SetInputFile(const char* inputFile)
149 //setting the name of file where names of ESD file are written
150 //it takes only this files which have good trees
152 fInputFile=string(inputFile);
153 cout<<"Input File set on "<<fInputFile<<endl;
154 ifstream infile(inputFile);
156 fTree = new TChain("esdTree");
158 if(infile.good()==true)
160 //checking if all give files have good tree inside
161 while (infile.eof()==false)
163 infile.getline(buffer,256);
164 //ifstream test_file(buffer);
165 TFile *esdFile=TFile::Open(buffer,"READ");
168 TTree* tree = (TTree*) esdFile->Get("esdTree");
171 cout<<"putting file "<<string(buffer)<<" into analysis"<<endl;
172 fTree->AddFile(buffer);
182 void AliFemtoEventReaderESD::SetConstrained(const bool constrained)
184 fConstrained=constrained;
187 bool AliFemtoEventReaderESD::GetConstrained() const
192 void AliFemtoEventReaderESD::SetReadTPCInner(const bool readinner)
194 fReadInner=readinner;
197 bool AliFemtoEventReaderESD::GetReadTPCInner() const
202 AliFemtoEvent* AliFemtoEventReaderESD::ReturnHbtEvent()
204 // read in a next hbt event from the chain
205 // convert it to AliFemtoEvent and return
206 // for further analysis
207 AliFemtoEvent *hbtEvent = 0;
209 if (fCurEvent==fNumberofEvent)//open next file
211 if(fNumberofEvent==0)
213 // delete fEvent;//added 1.04.2007
214 fEvent=new AliESDEvent();
220 // fEsdFile=TFile::Open(fFileName.c_str(),"READ");
221 // fTree = (TTree*) fEsdFile->Get("esdTree");
222 // fTree->SetBranchAddress("ESD", &fEvent);
223 fTree->SetBranchStatus("MuonTracks*",0);
224 fTree->SetBranchStatus("PmdTracks*",0);
225 fTree->SetBranchStatus("TrdTracks*",0);
226 fTree->SetBranchStatus("V0s*",0);
227 fTree->SetBranchStatus("Cascades*",0);
228 fTree->SetBranchStatus("Kinks*",0);
229 fTree->SetBranchStatus("CaloClusters*",0);
230 fTree->SetBranchStatus("AliRawDataErrorLogs*",0);
231 fTree->SetBranchStatus("ESDfriend*",0);
232 fEvent->ReadFromTree(fTree);
234 fNumberofEvent=fTree->GetEntries();
235 cout<<"Number of Entries in file "<<fNumberofEvent<<endl;
239 else //no more data to read
241 cout<<"no more files "<<hbtEvent<<endl;
246 cout<<"starting to read event "<<fCurEvent<<endl;
247 fTree->GetEvent(fCurEvent);//getting next event
248 cout << "Read event " << fEvent << " from file " << fTree << endl;
249 // vector<int> tLabelTable;//to check labels
251 hbtEvent = new AliFemtoEvent;
252 //setting basic things
253 // hbtEvent->SetEventNumber(fEvent->GetEventNumber());
254 hbtEvent->SetRunNumber(fEvent->GetRunNumber());
255 //hbtEvent->SetNumberOfTracks(fEvent->GetNumberOfTracks());
256 hbtEvent->SetMagneticField(fEvent->GetMagneticField()*kilogauss);//to check if here is ok
257 hbtEvent->SetZDCN1Energy(fEvent->GetZDCN1Energy());
258 hbtEvent->SetZDCP1Energy(fEvent->GetZDCP1Energy());
259 hbtEvent->SetZDCN2Energy(fEvent->GetZDCN2Energy());
260 hbtEvent->SetZDCP2Energy(fEvent->GetZDCP2Energy());
261 hbtEvent->SetZDCEMEnergy(fEvent->GetZDCEMEnergy());
262 hbtEvent->SetZDCParticipants(fEvent->GetZDCParticipants());
263 hbtEvent->SetTriggerMask(fEvent->GetTriggerMask());
264 hbtEvent->SetTriggerCluster(fEvent->GetTriggerCluster());
268 fEvent->GetVertex()->GetXYZ(fV1);
270 AliFmThreeVectorF vertex(fV1[0],fV1[1],fV1[2]);
271 hbtEvent->SetPrimVertPos(vertex);
273 //starting to reading tracks
274 int nofTracks=0; //number of reconstructed tracks in event
275 nofTracks=fEvent->GetNumberOfTracks();
276 int realnofTracks=0;//number of track which we use ina analysis
277 cout << "Event has " << nofTracks << " tracks " << endl;
279 for (int i=0;i<nofTracks;i++)
281 bool tGoodMomentum=true; //flaga to chcek if we can read momentum of this track
283 AliFemtoTrack* trackCopy = new AliFemtoTrack();
284 const AliESDtrack *esdtrack=fEvent->GetTrack(i);//getting next track
285 // const AliESDfriendTrack *tESDfriendTrack = esdtrack->GetFriendTrack();
287 trackCopy->SetCharge((short)esdtrack->GetSign());
289 //in aliroot we have AliPID
290 //0-electron 1-muon 2-pion 3-kaon 4-proton 5-photon 6-pi0 7-neutron 8-kaon0 9-eleCon
291 //we use only 5 first
293 esdtrack->GetESDpid(esdpid);
294 trackCopy->SetPidProbElectron(esdpid[0]);
295 trackCopy->SetPidProbMuon(esdpid[1]);
296 trackCopy->SetPidProbPion(esdpid[2]);
297 trackCopy->SetPidProbKaon(esdpid[3]);
298 trackCopy->SetPidProbProton(esdpid[4]);
301 if (fReadInner == true) {
303 if (esdtrack->GetTPCInnerParam()) {
304 AliExternalTrackParam *param = new AliExternalTrackParam(*esdtrack->GetTPCInnerParam());
305 param->PropagateToDCA(fEvent->GetPrimaryVertex(), (fEvent->GetMagneticField()), 10000);
306 param->GetPxPyPz(pxyz);//reading noconstarined momentum
309 AliFemtoModelHiddenInfo *tInfo = new AliFemtoModelHiddenInfo();
310 tInfo->SetPDGPid(211);
311 tInfo->SetTrueMomentum(pxyz[0], pxyz[1], pxyz[2]);
312 tInfo->SetMass(0.13957);
313 trackCopy->SetHiddenInfo(tInfo);
316 if (fConstrained==true)
317 tGoodMomentum=esdtrack->GetConstrainedPxPyPz(pxyz); //reading constrained momentum
319 tGoodMomentum=esdtrack->GetPxPyPz(pxyz);//reading noconstarined momentum
320 AliFemtoThreeVector v(pxyz[0],pxyz[1],pxyz[2]);
321 trackCopy->SetP(v);//setting momentum
322 trackCopy->SetPt(sqrt(pxyz[0]*pxyz[0]+pxyz[1]*pxyz[1]));
323 const AliFmThreeVectorD ktP(pxyz[0],pxyz[1],pxyz[2]);
324 if (ktP.Mag() == 0) {
328 const AliFmThreeVectorD origin(fV1[0],fV1[1],fV1[2]);
329 //setting helix I do not if it is ok
330 AliFmPhysicalHelixD helix(ktP,origin,(double)(fEvent->GetMagneticField())*kilogauss,(double)(trackCopy->Charge()));
331 trackCopy->SetHelix(helix);
333 trackCopy->SetTrackId(esdtrack->GetID());
334 trackCopy->SetFlags(esdtrack->GetStatus());
335 trackCopy->SetLabel(esdtrack->GetLabel());
337 //some stuff which could be useful
340 esdtrack->GetImpactParameters(impact,covimpact);
341 trackCopy->SetImpactD(impact[0]);
342 trackCopy->SetImpactZ(impact[1]);
343 trackCopy->SetCdd(covimpact[0]);
344 trackCopy->SetCdz(covimpact[1]);
345 trackCopy->SetCzz(covimpact[2]);
346 trackCopy->SetITSchi2(esdtrack->GetITSchi2());
347 trackCopy->SetITSncls(esdtrack->GetNcls(0));
348 trackCopy->SetTPCchi2(esdtrack->GetTPCchi2());
349 trackCopy->SetTPCncls(esdtrack->GetTPCNcls());
350 trackCopy->SetTPCnclsF(esdtrack->GetTPCNclsF());
351 trackCopy->SetTPCsignalN((short)esdtrack->GetTPCsignalN()); //due to bug in aliesdtrack class
352 trackCopy->SetTPCsignalS(esdtrack->GetTPCsignalSigma());
354 trackCopy->SetTPCClusterMap(esdtrack->GetTPCClusterMap());
355 trackCopy->SetTPCSharedMap(esdtrack->GetTPCSharedMap());
358 fEvent->GetPrimaryVertex()->GetXYZ(pvrt);
361 esdtrack->GetInnerXYZ(xtpc);
363 trackCopy->SetNominalTPCEntrancePoint(xtpc);
365 esdtrack->GetOuterXYZ(xtpc);
367 trackCopy->SetNominalTPCExitPoint(xtpc);
370 for (int ik=0; ik<3; ik++) {
371 indexes[ik] = esdtrack->GetKinkIndex(ik);
373 trackCopy->SetKinkIndexes(indexes);
374 //decision if we want this track
375 //if we using diffrent labels we want that this label was use for first time
376 //if we use hidden info we want to have match between sim data and ESD
377 if (tGoodMomentum==true)
379 hbtEvent->TrackCollection()->push_back(trackCopy);//adding track to analysis
380 realnofTracks++;//real number of tracks
389 hbtEvent->SetNumberOfTracks(realnofTracks);//setting number of track which we read in event
391 cout<<"end of reading nt "<<nofTracks<<" real number "<<realnofTracks<<endl;
392 // if (fCurEvent== fNumberofEvent)//if end of current file close all
396 // fEsdFile->Close();