2 #include "AliHBTReader.h"
4 ClassImp(AliHBTReaderITSv1)
6 AliHBTReaderITSv1::AliHBTReaderITSv1(const Char_t* goodtracksfilename):
7 fGoodITSTracksFileName(goodtracksfilename)
10 fParticles = new AliHBTRun();
11 fTracks = new AliHBTRun();
14 AliHBTReaderITSv1::AliHBTReaderITSv1()
19 AliHBTEvent* AliHBTReaderITSv1::GetParticleEvent(Int_t n)
21 //returns Nth event with simulated particles
22 if (!fIsRead) Read(fParticles,fTracks);
23 return fParticles->GetEvent(n);
25 /********************************************************************/
26 AliHBTEvent* AliHBTReaderITSv1::GetTrackEvent(Int_t n)
28 //returns Nth event with reconstructed tracks
29 if (!fIsRead) Read(fParticles,fTracks);
30 return fTracks->GetEvent(n);
32 /********************************************************************/
34 Int_t AliHBTReaderITSv1::GetNumberOfPartEvents()
36 //returns number of events of particles
37 if (!fIsRead) Read(fParticles,fTracks);
38 return fParticles->GetNumberOfEvents();
41 /********************************************************************/
42 Int_t AliHBTReaderITSv1::GetNumberOfTrackEvents()
44 //returns number of events of tracks
45 if (!fIsRead) Read(fParticles,fTracks);
46 return fTracks->GetNumberOfEvents();
48 /********************************************************************/
50 Int_t AliHBTReaderITSv1::Read(AliHBTRun* particles, AliHBTRun *tracks)
52 AliGoodTracksITSv1 *goodITStracks = new AliGoodTracksITSv1(fGoodITSTracksFileName);
56 Error("AliHBTReaderITSv1::Read","Exiting due to problems with opening files. Errorcode %d",i);
59 for (Int_t currentEvent = 0; currentEvent < goodITStracks->fNevents; currentEvent++)
61 for(Int_t i =0; i<goodITStracks->fGoodInEvent[currentEvent]; i++)
63 const struct GoodTrackITSv1 & gt = goodTPCTracks->GetTrack(currentEvent,i);
65 if(Pass(gt.code)) continue;
67 Double_t mass = TDatabasePDG::Instance()->GetParticle(gt.code)->Mass();
68 Double_t pEtot = TMath::Sqrt(gt.px*gt.px + gt.py*gt.py + gt.pz*gt.pz + mass*mass);
70 AliHBTParticle* part = new AliHBTParticle(gt.code, gt.px, gt.py, gt.pz, pEtot, gt.x, gt.y, gt.z, 0.0);
71 if(Pass(part)) { delete part; continue;}
73 Double_t tEtot = TMath::Sqrt( gt.pxg*gt.pxg + gt.pyg*gt.pyg + gt.pzg*gt.pzg + mass*mass);
75 AliHBTParticle* track = new AliHBTParticle(gt.code, gt.pxg, gt.pyg , gt.pzg, tEtot, 0., 0., 0., 0.);
76 if(Pass(track)) { delete track;continue;}
78 particles->AddParticle(currentEvent,part);
79 tracks->AddParticle(currentEvent,track);
87 /********************************************************************/
89 /********************************************************************/
90 /********************************************************************/
91 /********************************************************************/
94 AliGoodTracksITSv1::~AliGoodTracksITSv1()
96 delete [] fGoodInEvent;
97 for (Int_t i = 0;i<fNevents;i++)
101 /********************************************************************/
102 AliGoodTracksITSv1::AliGoodTracksITSv1(const TString& infilename)
105 cout<<"AliGoodTracksITSv1::AliGoodTracksITSv1() ....\n";
109 Int_t maxevents = 500;
111 ifstream in(infilename.Data());
115 cerr<<"Can not open file with Good ITSv1 Tracks named:"<<infilename.Data()<<endl;
121 fGoodInEvent = new Int_t[maxevents];
122 fData = new struct GoodTrack* [maxevents];
127 fData[0] = new struct GoodTrack[50000];
134 for(i = lastevent;i<=evno;i++)
137 fData[i] = new struct GoodTrack[50000];
141 if(fGoodInEvent[evno]>=50000)
143 cerr<<"AliGoodTracksITSv1::AliGoodTracksITSv1() : Not enough place in the array\n";
146 in>>fData[evno][fGoodInEvent[evno]].lab;
147 in>>fData[evno][fGoodInEvent[evno]].code;
148 in>>fData[evno][fGoodInEvent[evno]].px;
149 in>>fData[evno][fGoodInEvent[evno]].py;
150 in>>fData[evno][fGoodInEvent[evno]].pz;
151 in>>fData[evno][fGoodInEvent[evno]].x;
152 in>>fData[evno][fGoodInEvent[evno]].y;
153 in>>fData[evno][fGoodInEvent[evno]].z;
156 cout<<fData[evno][fGoodInEvent[evno]].lab;
157 cout<<" ";cout<<fData[evno][fGoodInEvent[evno]].code;
158 cout<<" ";cout<<fData[evno][fGoodInEvent[evno]].px;
159 cout<<" ";cout<<fData[evno][fGoodInEvent[evno]].py;
160 cout<<" ";cout<<fData[evno][fGoodInEvent[evno]].pz;
161 cout<<" ";cout<<fData[evno][fGoodInEvent[evno]].x;
162 cout<<" ";cout<<fData[evno][fGoodInEvent[evno]].y;
163 cout<<" ";cout<<fData[evno][fGoodInEvent[evno]].z;
166 fGoodInEvent[evno]++;
170 cout<<"AliGoodTracksITSv1::AliGoodTracksITSv1() .... Done\n";
175 const GoodTrack& AliGoodTracksITSv1::GetTrack(Int_t event, Int_t n) const
178 if( (event>fNevents) || (event<0))
180 gROOT->Fatal("AliGoodTracksITSv1::GetTrack","No such Event %d",event);
182 if( (n>fGoodInEvent[event]) || (n<0))
184 gROOT->Fatal("AliGoodTracksITSv1::GetTrack","No such Good TPC Track %d",n);
186 return fData[event][n];