Implementing ESD functionality in the NewIO (Yu.Belikov)
[u/mrichter/AliRoot.git] / STEER / AliESDtest.C
1 //********************************************************************
2 //     Example of the reconstruction that generates the ESD
3 // Input files: 
4 //   a) file containing the ITS clusters
5 //      (the AliITSFindClustersV2.C macro can be used to generate it)
6 //   b) file containing the TPC clusters
7 //      (the AliTPCFindClusters.C macro can be used to generate it)
8 //   c) file containing the TRD clusters
9 //      (the AliTRDdigits2cluster.C macro can be used to generate it)
10 //   d) file containing the TOF digits
11 //      (the AliTOFSDigits2Digits.C macro can be used to generate it)
12 // Ouput file:
13 //      AliESDs.root containing the ESD events 
14 //
15 // Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
16 //********************************************************************
17
18 #if !defined(__CINT__) || defined(__MAKECINT__)
19   #include <Riostream.h>
20   #include "TFile.h"
21   #include "TSystem.h"
22   #include "TStopwatch.h"
23   #include "TGeant3.h"
24
25   #include "AliMagF.h"
26   #include "AliRun.h"
27   #include "AliRunLoader.h"
28   #include "AliLoader.h"
29
30   #include "AliESD.h"
31   #include "AliESDpid.h"
32
33   #include "AliITS.h"
34   #include "AliITSgeom.h"
35   #include "AliITStrackerV2.h"
36   #include "AliITSpidESD.h"
37   #include "AliITSLoader.h"
38
39   #include "AliTPCParam.h"
40   #include "AliTPCtracker.h"
41   #include "AliTPCpidESD.h"
42   #include "AliTPCLoader.h"
43
44   #include "AliTRDtracker.h"
45   #include "AliTRDPartID.h"
46
47   #include "AliTOFpidESD.h"
48 #endif
49
50 extern TSystem *gSystem;
51 extern AliRun *gAlice;
52 extern TFile *gFile;
53
54 Int_t AliESDtest(Int_t nev=1) {
55
56 /**** Initialization of the NewIO *******/
57
58    if (gAlice) {
59       delete gAlice->GetRunLoader();
60       delete gAlice; 
61       gAlice=0;
62    }
63
64    gSystem->Load("libgeant321");     // needed for the PID in TOF 
65    new TGeant3("");                  // must be re-done !
66
67    AliRunLoader *rl = AliRunLoader::Open("galice.root");
68    if (rl == 0x0) {
69       cerr<<"Can not open session"<<endl;
70       return 1;
71    }
72    Int_t retval = rl->LoadgAlice();
73    if (retval) {
74       cerr<<"AliESDtest.C : LoadgAlice returned error"<<endl;
75       delete rl;
76       return 1;
77    }
78    retval = rl->LoadHeader();
79    if (retval) {
80       cerr<<"AliESDtest.C : LoadHeader returned error"<<endl;
81       delete rl;
82       return 2;
83    }
84    gAlice=rl->GetAliRun();
85        
86
87    AliKalmanTrack::SetConvConst(
88       1000/0.299792458/gAlice->Field()->SolenoidField()
89    );
90
91
92
93 /**** The ITS corner ********************/
94
95    AliITSLoader* itsl = (AliITSLoader*)rl->GetLoader("ITSLoader");
96    if (itsl == 0x0) {
97       cerr<<"AliESDtest.C : Can not get the ITS loader"<<endl;
98       return 3;
99    }
100    itsl->LoadRecPoints("read");
101
102    AliITS *dITS = (AliITS*)gAlice->GetDetector("ITS");
103    if (!dITS) {
104       cerr<<"AliESDtest.C : Can not find the ITS detector !"<<endl;
105       return 4;
106    }
107    AliITSgeom *geom = dITS->GetITSgeom();
108
109    //An instance of the ITS tracker
110    AliITStrackerV2 itsTracker(geom);
111    
112    //An instance of the ITS PID maker
113    Double_t parITS[]={34.,0.15,10.};
114    AliITSpidESD itsPID(parITS);
115
116
117 /**** The TPC corner ********************/
118
119    AliTPCLoader* tpcl = (AliTPCLoader*)rl->GetLoader("TPCLoader");
120    if (tpcl == 0x0) {
121       cerr<<"AliESDtest.C : can not get the TPC loader"<<endl;
122       return 5;
123    }
124    tpcl->LoadRecPoints("read");
125
126    rl->CdGAFile();
127    AliTPCParam *par=(AliTPCParam *)gDirectory->Get("75x40_100x60_150x60");
128    if (!par) { 
129       cerr<<"TPC parameters have not been found !\n";
130       return 6;
131    }
132    
133    //An instance of the TPC tracker
134    AliTPCtracker tpcTracker(par);
135
136    //An instance of the TPC PID maker
137    Double_t parTPC[]={47.,0.10,10.};
138    AliTPCpidESD tpcPID(parTPC);
139
140
141 /**** The TRD corner ********************/
142
143    AliLoader* trdl = rl->GetLoader("TRDLoader");
144    if (trdl == 0x0) {
145       cerr<<"AliESDtest.C : can not get the TRD loader"<<endl;
146       return 5;
147    }
148    trdl->LoadRecPoints("read");
149
150    //An instance of the TRD tracker
151    rl->CdGAFile();
152    AliTRDtracker trdTracker(gFile);  //galice.root file
153
154 /*
155    //An instance of the TRD PID maker
156    TFile* pidFile = TFile::Open("pid.root");
157    if (!pidFile->IsOpen()) {
158      cerr << "Can't get pid.root !\n";
159      return 7;
160    }
161    AliTRDPartID* trdPID = (AliTRDPartID*) pidFile->Get("AliTRDPartID");
162    if (!trdPID) {
163      cerr << "Can't get PID object !\n";
164      return 8;
165    }
166 */
167
168
169 /**** The TOF corner ********************/
170
171    AliLoader* tofl = rl->GetLoader("TOFLoader");
172    if (tofl == 0x0) {
173       cerr<<"AliESDtest.C : can not get the TOF loader"<<endl;
174       return 5;
175    }
176    tofl->LoadDigits("read");
177
178
179    //Instance of the TOF PID maker
180    Double_t parTOF[]={130.,5.};
181    AliTOFpidESD tofPID(parTOF);
182
183
184    //rl->UnloadgAlice();
185
186
187    TFile *ef=TFile::Open("AliESDs.root","RECREATE");
188    if (!ef->IsOpen()) {cerr<<"Can't AliESDs.root !\n"; return 1;}
189
190    TStopwatch timer;
191    Int_t rc=0;
192    if (nev>rl->GetNumberOfEvents()) nev=rl->GetNumberOfEvents();
193    //The loop over events
194    for (Int_t i=0; i<nev; i++) {
195      cerr<<"\n\nProcessing event number : "<<i<<endl;
196      AliESD *event=new AliESD(); 
197
198      rl->GetEvent(i);
199  
200      TTree *tpcTree=tpcl->TreeR();
201      if (!tpcTree) {
202         cerr<<"Can't get the TPC cluster tree !\n";
203         return 4;
204      }     
205      tpcTracker.LoadClusters(tpcTree);
206      rc+=tpcTracker.Clusters2Tracks(event);
207
208
209      TTree *itsTree=itsl->TreeR();
210      if (!itsTree) {
211         cerr<<"Can't get the TPC cluster tree !\n";
212         return 4;
213      }     
214      itsTracker.LoadClusters(itsTree);
215      rc+=itsTracker.Clusters2Tracks(event);
216
217      rc+=itsTracker.PropagateBack(event); 
218      itsTracker.UnloadClusters();
219      itsPID.MakePID(event);
220      
221      rc+=tpcTracker.PropagateBack(event);
222      tpcTracker.UnloadClusters();
223      tpcPID.MakePID(event);
224
225
226      TTree *trdTree=trdl->TreeR();
227      if (!trdTree) {
228         cerr<<"Can't get the TPC cluster tree !\n";
229         return 4;
230      } 
231      trdTracker.LoadClusters(trdTree);
232      rc+=trdTracker.PropagateBack(event);
233      trdTracker.UnloadClusters();
234
235 /*
236      for (Int_t iTrack = 0; iTrack < event->GetNumberOfTracks(); iTrack++) {
237        AliESDtrack* track = event->GetTrack(iTrack);
238        trdPID->MakePID(track);
239      }
240 */
241
242      TTree *tofTree=tofl->TreeD();
243      if (!tofTree) {
244         cerr<<"Can't get the TOF cluster tree !\n";
245         return 4;
246      } 
247      tofPID.LoadClusters(tofTree);
248      tofPID.MakePID(event);
249      tofPID.UnloadClusters();
250
251
252     //Here is the combined PID
253      AliESDpid::MakePID(event);
254
255      if (rc==0) {
256         Char_t ename[100]; 
257         sprintf(ename,"%d",i);
258         ef->cd();
259         if (!event->Write(ename)) rc++;
260      } 
261      if (rc) {
262         cerr<<"Something bad happened...\n";
263      }
264      delete event;
265    }
266    timer.Stop(); timer.Print();
267
268    //pidFile->Close();
269
270    delete par;
271
272    ef->Close();
273
274    delete rl;
275
276    return rc;
277 }