]>
Commit | Line | Data |
---|---|---|
887eddf8 | 1 | /**************************************************************************** |
2 | * This macro is used to create a DataBase for the TPC tracking * | |
3 | * parameterization. * | |
4 | * 1) the function CreateAllGeantTracks gives all tracks at the 1st hit of * | |
5 | * the TPC * | |
6 | * 2) the function TrackCompare compares them with track found by the * | |
7 | * Kalman filter for the same event and computes efficiency and * | |
8 | * resolution on the track parameters for the Kalman filter. * | |
9 | * 3) the function BuildDataBase calls many functions of AliTPCtrackerParam:* | |
10 | * - merge results from TrackCompare for many events and compute * | |
11 | * average efficiency. * | |
12 | * - analyze the pulls of the covariance matrix * | |
13 | * - analyze the dE/dx * | |
14 | * - regularize the covariance matrix as a function of the momentum * | |
15 | * - write all the informations and the trees with regularized cov. * | |
16 | * matrices in the DataBase file. * | |
17 | * * | |
18 | * Origin: A.Dainese, Padova, andrea.dainese@pd,infn.it * | |
19 | * * | |
20 | ****************************************************************************/ | |
21 | ||
22 | #ifndef __CINT__ | |
b2bca9d4 | 23 | #include "Riostream.h" |
887eddf8 | 24 | #include <TFile.h> |
a654e257 | 25 | #include <TTree.h> |
887eddf8 | 26 | #include <TStopwatch.h> |
27 | #include <TObject.h> | |
28 | #include "alles.h" | |
29 | #include "AliRun.h" | |
30 | #include "AliHeader.h" | |
31 | #include "AliGenEventHeader.h" | |
32 | #include "AliMagF.h" | |
33 | #include "AliModule.h" | |
34 | #include "AliArrayI.h" | |
35 | #include "AliDigits.h" | |
36 | #include "AliITS.h" | |
37 | #include "AliTPC.h" | |
38 | #include "AliITSgeom.h" | |
39 | #include "AliITSRecPoint.h" | |
40 | #include "AliITSclusterV2.h" | |
41 | #include "AliITSsimulationFastPoints.h" | |
42 | #include "AliITStrackerV2.h" | |
43 | #include "AliKalmanTrack.h" | |
44 | #include "AliTPCtrackerParam.h" | |
a654e257 | 45 | #include "AliTracker.h" |
46 | #include "AliESD.h" | |
47 | #include "AliRun.h" | |
48 | #include "AliRunLoader.h" | |
887eddf8 | 49 | #endif |
50 | ||
a654e257 | 51 | Int_t TPCParamTracks(const Int_t coll=1,Int_t firstEvent=0,Int_t lastEvent=0); |
52 | void CreateAllGeantTracks(const Int_t coll=1,Int_t nev=1); | |
b2bca9d4 | 53 | void TrackCompare(const Int_t coll,const Double_t Bfield,Int_t n); |
887eddf8 | 54 | void BuildDataBase(const Int_t coll,const Double_t Bfield); |
55 | ||
887eddf8 | 56 | //_____________________________________________________________________________ |
a654e257 | 57 | Int_t TPCParamTracks(const Int_t coll,Int_t firstEvent,Int_t lastEvent) { |
887eddf8 | 58 | // |
59 | // Ordinary TPC tracking parameterization | |
60 | // | |
887eddf8 | 61 | |
a654e257 | 62 | /**** Initialization of the NewIO *******/ |
63 | ||
64 | if (gAlice) { | |
65 | delete gAlice->GetRunLoader(); | |
66 | delete gAlice; | |
67 | gAlice=0; | |
68 | } | |
69 | ||
70 | AliRunLoader *rl = AliRunLoader::Open("galice.root"); | |
71 | if (rl == 0x0) { | |
72 | cerr<<"Can not open session"<<endl; | |
73 | return; | |
74 | } | |
75 | Int_t retval = rl->LoadgAlice(); | |
76 | if (retval) { | |
77 | cerr<<"LoadgAlice returned error"<<endl; | |
78 | delete rl; | |
79 | return; | |
80 | } | |
81 | retval = rl->LoadHeader(); | |
82 | if (retval) { | |
83 | cerr<<"LoadHeader returned error"<<endl; | |
84 | delete rl; | |
85 | return; | |
86 | } | |
87 | gAlice=rl->GetAliRun(); | |
88 | ||
89 | ||
90 | TDatabasePDG *DataBase = TDatabasePDG::Instance(); | |
91 | ||
92 | // Get field from galice.root | |
93 | AliMagF *fiel = (AliMagF*)gAlice->Field(); | |
94 | Double_t fieval=TMath::Abs((Double_t)fiel->SolenoidField()/10.); | |
95 | // Set the conversion constant between curvature and Pt | |
96 | AliTracker::SetFieldMap(fiel,kTRUE); | |
97 | ||
98 | /**** The TPC corner ********************/ | |
99 | ||
100 | AliTPCtrackerParam tpcTrackerPar(coll,fieval); | |
101 | tpcTrackerPar.Init(); | |
102 | ||
103 | /***** The TREE is born *****/ | |
104 | ||
105 | TTree *esdTree=new TTree("esdTree","Tree with ESD objects"); | |
106 | AliESD *event=0; | |
107 | esdTree->Branch("ESD","AliESD",&event); | |
108 | ||
109 | if(firstEvent>rl->GetNumberOfEvents()) firstEvent=rl->GetNumberOfEvents()-1; | |
110 | if(lastEvent>rl->GetNumberOfEvents()) lastEvent=rl->GetNumberOfEvents()-1; | |
111 | cout<<" Number of events: "<<1+lastEvent-firstEvent<<endl; | |
112 | ||
113 | //<----------------------------------The Loop over events begins | |
114 | TStopwatch timer; | |
115 | Int_t trc; | |
116 | for(Int_t i=firstEvent; i<=lastEvent; i++) { | |
117 | ||
118 | cerr<<" Processing event number : "<<i<<endl; | |
119 | AliESD *event = new AliESD(); | |
120 | event->SetRunNumber(gAlice->GetRunNumber()); | |
121 | event->SetEventNumber(i); | |
122 | event->SetMagneticField(gAlice->Field()->SolenoidField()); | |
123 | rl->GetEvent(i); | |
124 | ||
125 | if ( (trc=tpcTrackerPar.BuildTPCtracks(event)) ) { | |
126 | printf("exiting tracker with code %d in event %d\n",trc,i); | |
127 | esdTree->Fill(); delete event; | |
128 | continue; | |
129 | } | |
130 | ||
131 | esdTree->Fill(); | |
132 | delete event; | |
133 | ||
134 | }//<-----------------------------------The Loop over events ends here | |
135 | timer.Stop(); timer.Print(); | |
136 | ||
137 | // The AliESDs.root is born | |
138 | TFile *ef = TFile::Open("AliESDs.root","RECREATE"); | |
139 | if (!ef || !ef->IsOpen()) {cerr<<"Can't open AliESDs.root !\n"; return;} | |
140 | ||
141 | esdTree->Write(); //Write the TREE and close everything | |
142 | delete esdTree; | |
143 | ef->Close(); | |
144 | ||
145 | delete rl; | |
146 | ||
147 | return; | |
887eddf8 | 148 | } |
149 | //_____________________________________________________________________________ | |
a654e257 | 150 | void CreateAllGeantTracks(const Int_t coll,Int_t nev) { |
887eddf8 | 151 | // |
152 | // Get all tracks at TPC 1st hit w/o selection and smearing | |
153 | // | |
154 | cerr<<"\n*******************************************************************\n"; | |
155 | ||
156 | const Char_t *name="CreateAllGeantTracks"; | |
157 | cerr<<'\n'<<name<<"...\n"; | |
158 | gBenchmark->Start(name); | |
159 | ||
160 | TFile *outfile=TFile::Open(outname,"recreate"); | |
161 | TFile *infile =TFile::Open(galice); | |
162 | ||
b2bca9d4 | 163 | AliTPCtrackerParam tracker(coll,Bfield,n); |
887eddf8 | 164 | tracker.AllGeantTracks(); // this is to switch-off selection and smearing |
b2bca9d4 | 165 | tracker.BuildTPCtracks(infile,outfile); |
887eddf8 | 166 | |
167 | delete gAlice; gAlice=0; | |
168 | ||
169 | infile->Close(); | |
170 | outfile->Close(); | |
171 | ||
172 | gBenchmark->Stop(name); | |
173 | gBenchmark->Show(name); | |
174 | ||
175 | return; | |
176 | } | |
177 | //_____________________________________________________________________________ | |
b2bca9d4 | 178 | void TrackCompare(const Int_t coll,const Double_t Bfield,Int_t n) { |
887eddf8 | 179 | // |
180 | // Compare Kalman tracks with tracks at TPC 1st hit | |
181 | // | |
182 | cerr<<"\n*******************************************************************\n"; | |
183 | ||
184 | const Char_t *name="TrackCompare"; | |
185 | cerr<<'\n'<<name<<"...\n"; | |
186 | gBenchmark->Start(name); | |
187 | ||
b2bca9d4 | 188 | AliTPCtrackerParam tracker(coll,Bfield,n); |
887eddf8 | 189 | tracker.CompareTPCtracks(); |
190 | ||
191 | gBenchmark->Stop(name); | |
192 | gBenchmark->Show(name); | |
193 | ||
194 | return; | |
195 | } | |
196 | //_____________________________________________________________________________ | |
197 | void BuildDataBase(const Int_t coll,const Double_t Bfield) { | |
198 | // | |
199 | // | |
200 | // | |
201 | cerr<<"\n*******************************************************************\n"; | |
202 | ||
203 | AliTPCtrackerParam tracker(coll,Bfield); | |
204 | ||
205 | // Merge files with cov. matrix and compute average efficiencies | |
206 | cerr<<"\n --- Merging Events ---\n\n"; | |
207 | tracker.MergeEvents(1,5); | |
208 | ||
209 | // Compute the pulls for pions, kaons, electrons | |
210 | cerr<<"\n --- Analyzing Pulls ---\n\n"; | |
211 | tracker.AnalyzePulls("pulls.root"); | |
212 | ||
213 | // Draw pulls and efficiencies | |
214 | tracker.DrawPulls("CovMatrixDB_PbPb6000_B0.4T.root",211,0); | |
215 | tracker.DrawEffs("CovMatrixDB_PbPb6000_B0.4T.root",13); | |
216 | ||
217 | // Regularize the covariance matrix | |
218 | tracker.RegularizeCovMatrix("regPi.root",211); | |
219 | ||
220 | // Analyze the dE/dx | |
221 | tracker.AnalyzedEdx("dEdxPi.root",211); | |
222 | ||
223 | ||
224 | // Put everything together and create the DB file | |
225 | tracker.MakeDataBase(); | |
226 | ||
227 | return; | |
228 | } | |
229 | ||
230 | ||
231 | ||
232 | ||
233 | ||
234 | ||
235 |