1 //********************************************************************
2 // Example of the reconstruction that generates the ESD
4 // a) AliTPCclusters.root containing the TPC clusters
5 // (the AliTPCFindClusters.C macro can be used to generate it)
6 // b) AliITSclustersV2.root containing the ITS clusters
7 // (the AliITSFindClustersV2.C macro can be used to generate it)
9 // AliESDs.root containing the ESD events
11 // Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
12 //********************************************************************
15 #include <Riostream.h>
17 #include "TStopwatch.h"
20 #include "AliESDpid.h"
21 #include "AliTPCpidESD.h"
22 #include "AliTPCParam.h"
23 #include "AliTPCtracker.h"
24 #include "AliITSgeom.h"
25 #include "AliITStrackerV2.h"
26 #include "AliTRDtracker.h"
27 #include "AliTRDPartID.h"
28 #include "AliITSpidESD.h"
31 Int_t AliESDtest(Int_t nev=1,
32 const char* fileNameITSClusters = "its.clusters.root",
33 const char* fileNameTPCClusters = "tpc.clusters.root",
34 const char* fileNameTRDClusters = "trd.clusters.root") {
36 //File with the TPC clusters
37 TFile *tpccf=TFile::Open(fileNameTPCClusters);
38 if (!tpccf->IsOpen()) {
39 cerr<<"Can't open "<<fileNameTPCClusters<<" !\n";
42 AliTPCParam *par=(AliTPCParam*)tpccf->Get("75x40_100x60_150x60");
43 if (!par) {cerr<<"Can't get TPC parameters !\n"; return 3;}
45 //An instance of the TPC tracker
46 AliTPCtracker tpcTracker(par);
48 //An instance of the TPC PID maker
49 Double_t parTPC[]={47.,0.1,3.};
50 AliTPCpidESD tpcPID(parTPC);
52 //File with the ITS clusters
53 TFile *itscf=TFile::Open(fileNameITSClusters);
54 if (!itscf->IsOpen()) {
55 cerr<<"Can't open "<<fileNameITSClusters<<".root !\n";
58 AliITSgeom *geom=(AliITSgeom*)itscf->Get("AliITSgeom");
59 if (!geom) {cerr<<"Can't get AliITSgeom !\n"; return 5;}
61 //An instance of the ITS tracker
62 AliITStrackerV2 itsTracker(geom);
64 //An instance of the ITS PID maker
65 Double_t parITS[]={34.,0.12,3.};
66 AliITSpidESD itsPID(parITS);
68 //File with the TRD clusters
69 TFile *trdcf=TFile::Open(fileNameTRDClusters);
70 if (!trdcf->IsOpen()) {
71 cerr<<"Can't open "<<fileNameTRDClusters<<".root !\n";
75 //An instance of the TRD tracker
76 AliTRDtracker trdTracker(trdcf);
78 //An instance of the TRD PID maker
79 TFile* pidFile = TFile::Open("pid.root");
80 if (!pidFile->IsOpen()) {
81 cerr << "Can't get pid.root !\n";
84 AliTRDPartID* trdPID = (AliTRDPartID*) pidFile->Get("AliTRDPartID");
86 cerr << "Can't get PID object !\n";
90 TFile *ef=TFile::Open("AliESDs.root","RECREATE");
91 if (!ef->IsOpen()) {cerr<<"Can't AliESDs.root !\n"; return 1;}
95 //The loop over events
96 for (Int_t i=0; i<nev; i++) {
97 cerr<<"\n\nProcessing event number : "<<i<<endl;
98 AliESD *event=new AliESD();
100 tpcTracker.SetEventNumber(i);
101 tpcTracker.LoadClusters(tpccf);
103 itsTracker.SetEventNumber(i);
104 itsTracker.LoadClusters(itscf);
106 rc+=tpcTracker.Clusters2Tracks(event);
108 rc+=itsTracker.Clusters2Tracks(event);
110 rc+=itsTracker.PropagateBack(event);
111 itsTracker.UnloadClusters();
113 itsPID.MakePID(event);
115 rc+=tpcTracker.PropagateBack(event);
116 tpcTracker.UnloadClusters();
118 tpcPID.MakePID(event);
120 trdTracker.SetEventNumber(i);
122 trdTracker.LoadClusters();
124 rc+=trdTracker.PropagateBack(event);
125 trdTracker.UnloadClusters();
127 for (Int_t iTrack = 0; iTrack < event->GetNumberOfTracks(); iTrack++) {
128 AliESDtrack* track = event->GetTrack(iTrack);
129 trdPID->MakePID(track);
132 //Here is the combined PID
133 AliESDpid::MakePID(event);
137 sprintf(ename,"%d",i);
139 if (!event->Write(ename)) rc++;
142 cerr<<"Something bad happened...\n";
146 timer.Stop(); timer.Print();