]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderESD.cxx
Migration of PWG2/FEMTOSCOPY to PWGCF/FEMTOSCOPY
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemto / AliFemtoEventReaderESD.cxx
CommitLineData
76ce4b5b 1////////////////////////////////////////////////////////////////////////////////
2/// ///
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 ///
8/// ///
9////////////////////////////////////////////////////////////////////////////////
10
11/*
12 *$Id$
13 *$Log$
14 *Revision 1.2.2.2 2007/10/04 13:10:52 akisiel
15 *Add Kink index storageAliFemtoEventReaderESD.cxx AliFemtoTrack.cxx AliFemtoTrack.h
16 *
17 *Revision 1.2.2.1 2007/09/30 11:38:59 akisiel
18 *Adapt the readers to the new AliESDEvent structure
19 *
20 *Revision 1.2 2007/05/22 09:01:42 akisiel
21 *Add the possibiloity to save cut settings in the ROOT file
22 *
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
25 *
26 *Revision 1.5 2007/05/03 09:45:20 akisiel
27 *Fixing Effective C++ warnings
28 *
29 *Revision 1.4 2007/04/27 07:28:34 akisiel
30 *Remove event number reading due to interface changes
31 *
32 *Revision 1.3 2007/04/27 07:25:16 akisiel
33 *Make revisions needed for compilation from the main AliRoot tree
34 *
35 *Revision 1.1.1.1 2007/04/25 15:38:41 panos
36 *Importing the HBT code dir
37 *
38 */
39
40#include "AliFemtoEventReaderESD.h"
41
42#include "TFile.h"
43#include "TTree.h"
44#include "AliESDEvent.h"
45#include "AliESDtrack.h"
46#include "AliESDVertex.h"
47
48//#include "TSystem.h"
49
50#include "AliFmPhysicalHelixD.h"
51#include "AliFmThreeVectorF.h"
52
53#include "SystemOfUnits.h"
54
55#include "AliFemtoEvent.h"
56#include "AliFemtoModelHiddenInfo.h"
57
58ClassImp(AliFemtoEventReaderESD)
59
60#if !(ST_NO_NAMESPACES)
61 using namespace units;
62#endif
63
64using namespace std;
65//____________________________
66//constructor with 0 parameters , look at default settings
67AliFemtoEventReaderESD::AliFemtoEventReaderESD():
68 fInputFile(" "),
69 fFileName(" "),
70 fConstrained(true),
71 fReadInner(false),
72 fNumberofEvent(0),
73 fCurEvent(0),
74 fTree(0x0),
75 fEsdFile(0x0),
76 fEvent(0x0)
77{
78 // default constructor
79}
80
81AliFemtoEventReaderESD::AliFemtoEventReaderESD(const AliFemtoEventReaderESD &aReader) :
82 AliFemtoEventReader(aReader),
83 fInputFile(" "),
84 fFileName(" "),
85 fConstrained(true),
86 fReadInner(false),
87 fNumberofEvent(0),
88 fCurEvent(0),
89 fTree(0x0),
90 fEsdFile(0x0),
91 fEvent(0x0)
92{
93 // copy constructor
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());
104}
105//__________________
106//Destructor
107AliFemtoEventReaderESD::~AliFemtoEventReaderESD()
108{
109 // destructor
110 //delete fListOfFiles;
111 delete fTree;
112 delete fEvent;
113 delete fEsdFile;
114}
115
116//__________________
117AliFemtoEventReaderESD& AliFemtoEventReaderESD::operator=(const AliFemtoEventReaderESD& aReader)
118{
119 // assignment operator
120 if (this == &aReader)
121 return *this;
122
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());
135
136 return *this;
137}
138//__________________
139AliFemtoString AliFemtoEventReaderESD::Report()
140{
141 // create reader report
142 AliFemtoString temp = "\n This is the AliFemtoEventReaderESD\n";
143 return temp;
144}
145
146//__________________
147void AliFemtoEventReaderESD::SetInputFile(const char* inputFile)
148{
149 //setting the name of file where names of ESD file are written
150 //it takes only this files which have good trees
151 char buffer[256];
152 fInputFile=string(inputFile);
153 cout<<"Input File set on "<<fInputFile<<endl;
154 ifstream infile(inputFile);
155
156 fTree = new TChain("esdTree");
157
158 if(infile.good()==true)
159 {
160 //checking if all give files have good tree inside
161 while (infile.eof()==false)
162 {
163 infile.getline(buffer,256);
164 //ifstream test_file(buffer);
165 TFile *esdFile=TFile::Open(buffer,"READ");
166 if (esdFile!=0x0)
167 {
168 TTree* tree = (TTree*) esdFile->Get("esdTree");
169 if (tree!=0x0)
170 {
171 cout<<"putting file "<<string(buffer)<<" into analysis"<<endl;
172 fTree->AddFile(buffer);
173 delete tree;
174 }
175 esdFile->Close();
176 }
177 delete esdFile;
178 }
179 }
180}
181
182void AliFemtoEventReaderESD::SetConstrained(const bool constrained)
183{
184 fConstrained=constrained;
185}
186
187bool AliFemtoEventReaderESD::GetConstrained() const
188{
189 return fConstrained;
190}
191
192void AliFemtoEventReaderESD::SetReadTPCInner(const bool readinner)
193{
194 fReadInner=readinner;
195}
196
197bool AliFemtoEventReaderESD::GetReadTPCInner() const
198{
199 return fReadInner;
200}
201
202AliFemtoEvent* AliFemtoEventReaderESD::ReturnHbtEvent()
203{
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;
208
209 if (fCurEvent==fNumberofEvent)//open next file
210 {
211 if(fNumberofEvent==0)
212 {
213 // delete fEvent;//added 1.04.2007
214 fEvent=new AliESDEvent();
215 // delete fTree;
216 //fTree=0;
217 // delete fEsdFile;
218
219 //ESD data
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);
233
234 fNumberofEvent=fTree->GetEntries();
235 cout<<"Number of Entries in file "<<fNumberofEvent<<endl;
236 fCurEvent=0;
237 //sim data
238 }
239 else //no more data to read
240 {
241 cout<<"no more files "<<hbtEvent<<endl;
242 fReaderStatus=1;
243 return hbtEvent;
244 }
245 }
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
250
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());
265
266 //Vertex
267 double fV1[3];
268 fEvent->GetVertex()->GetXYZ(fV1);
269
270 AliFmThreeVectorF vertex(fV1[0],fV1[1],fV1[2]);
271 hbtEvent->SetPrimVertPos(vertex);
272
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;
278
279 for (int i=0;i<nofTracks;i++)
280 {
281 bool tGoodMomentum=true; //flaga to chcek if we can read momentum of this track
282
283 AliFemtoTrack* trackCopy = new AliFemtoTrack();
284 const AliESDtrack *esdtrack=fEvent->GetTrack(i);//getting next track
285 // const AliESDfriendTrack *tESDfriendTrack = esdtrack->GetFriendTrack();
286
287 trackCopy->SetCharge((short)esdtrack->GetSign());
288
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
292 double esdpid[5];
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]);
299
300 double pxyz[3];
301 if (fReadInner == true) {
302
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
307 delete param;
308
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);
314 }
315 }
316 if (fConstrained==true)
317 tGoodMomentum=esdtrack->GetConstrainedPxPyPz(pxyz); //reading constrained momentum
318 else
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) {
325 delete trackCopy;
326 continue;
327 }
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);
332
333 trackCopy->SetTrackId(esdtrack->GetID());
334 trackCopy->SetFlags(esdtrack->GetStatus());
335 trackCopy->SetLabel(esdtrack->GetLabel());
336
337 //some stuff which could be useful
338 float impact[2];
339 float covimpact[3];
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());
353
354 trackCopy->SetTPCClusterMap(esdtrack->GetTPCClusterMap());
355 trackCopy->SetTPCSharedMap(esdtrack->GetTPCSharedMap());
356
357 double pvrt[3];
358 fEvent->GetPrimaryVertex()->GetXYZ(pvrt);
359
360 double xtpc[3];
361 esdtrack->GetInnerXYZ(xtpc);
362 xtpc[2] -= pvrt[2];
363 trackCopy->SetNominalTPCEntrancePoint(xtpc);
364
365 esdtrack->GetOuterXYZ(xtpc);
366 xtpc[2] -= pvrt[2];
367 trackCopy->SetNominalTPCExitPoint(xtpc);
368
369 int indexes[3];
370 for (int ik=0; ik<3; ik++) {
371 indexes[ik] = esdtrack->GetKinkIndex(ik);
372 }
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)
378 {
379 hbtEvent->TrackCollection()->push_back(trackCopy);//adding track to analysis
380 realnofTracks++;//real number of tracks
381 }
382 else
383 {
384 delete trackCopy;
385 }
386
387 }
388
389 hbtEvent->SetNumberOfTracks(realnofTracks);//setting number of track which we read in event
390 fCurEvent++;
391 cout<<"end of reading nt "<<nofTracks<<" real number "<<realnofTracks<<endl;
392// if (fCurEvent== fNumberofEvent)//if end of current file close all
393// {
394// fTree->Reset();
395// delete fTree;
396// fEsdFile->Close();
397// }
398 return hbtEvent;
399}
400
401
402
403
404
405
406
407
408