]>
Commit | Line | Data |
---|---|---|
13888096 | 1 | #include <iostream.h> |
2 | #include <TROOT.h> | |
3 | #include <TMath.h> | |
4 | #include <TRandom.h> | |
5 | #include <TBranch.h> | |
6 | #include <TVector.h> | |
7 | #include <TClonesArray.h> | |
8 | #include <TFile.h> | |
9 | #include <TTree.h> | |
10 | ||
11 | ||
12 | #include "TParticle.h" | |
13 | #include "AliRun.h" | |
14 | #include "AliITS.h" | |
15 | #include "AliITSgeomSPD.h" | |
16 | #include "AliITSgeomSDD.h" | |
17 | #include "AliITSgeomSSD.h" | |
18 | #include "AliITSgeom.h" | |
19 | #include "AliITSmodule.h" | |
20 | #include "AliITSRecPoint.h" | |
21 | #include "AliMC.h" | |
22 | #include "AliKalmanTrack.h" | |
23 | #include "AliMagF.h" | |
24 | ||
25 | ||
26 | #include "AliITSRad.h" | |
27 | #include "AliITStrack.h" | |
28 | #include "AliITSiotrack.h" | |
29 | #include "AliITStracking.h" | |
30 | #include "../TPC/AliTPC.h" | |
31 | #include "../TPC/AliTPCParam.h" | |
32 | #include "../TPC/AliTPCtracker.h" | |
33 | ||
34 | #include "AliITSgeoinfo.h" | |
35 | #include "AliITSTrackerV1.h" | |
36 | ||
37 | ||
38 | ||
39 | ClassImp(AliITSTrackerV1) | |
40 | ||
41 | ||
42 | //________________________________________________________________ | |
43 | ||
44 | AliITSTrackerV1::AliITSTrackerV1(AliITS* IITTSS) { | |
45 | //Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it | |
46 | // default constructor | |
47 | ITS = IITTSS; | |
48 | ||
49 | } | |
50 | ||
51 | //________________________________________________________________ | |
52 | ||
53 | AliITStrack AliITSTrackerV1::Tracking(AliITStrack &track, AliITStrack *reference,TObjArray *fastpoints, | |
54 | Int_t **vettid, Bool_t flagvert, AliITSRad *rl, AliITSgeoinfo *geoinfo) { | |
55 | ||
56 | //Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it | |
57 | ||
58 | TList *list= new TList(); | |
59 | ||
60 | AliITStrack tr(track); | |
61 | ||
62 | list->AddLast(&tr); | |
63 | ||
64 | Double_t Pt=(tr).GetPt(); | |
65 | //cout << "\n Pt = " << Pt <<"\n"; //stampa | |
66 | ||
67 | AliITStracking obj(list, reference, ITS, fastpoints,TMath::Abs(Pt),vettid, flagvert, rl, geoinfo); // nuova ITS | |
68 | list->Delete(); | |
69 | delete list; | |
70 | ||
71 | Int_t itot=-1; | |
72 | TVector VecTotLabref(18); | |
73 | Int_t lay, k; | |
74 | for(lay=5; lay>=0; lay--) { | |
75 | TVector VecLabref(3); | |
76 | VecLabref=(*reference).GetLabTrack(lay); | |
77 | Float_t ClustZ=(*reference).GetZclusterTrack( lay); | |
78 | for(k=0; k<3; k++){ | |
79 | Int_t lpp=(Int_t)VecLabref(k); | |
80 | if(lpp>=0) { | |
81 | TParticle *p=(TParticle*) gAlice->Particle(lpp); | |
82 | Int_t pcode=p->GetPdgCode(); | |
83 | if(pcode==11) VecLabref(k)=p->GetFirstMother(); | |
84 | } | |
85 | itot++; VecTotLabref(itot)=VecLabref(k); | |
86 | if(VecLabref(k)==0. && ClustZ == 0.) VecTotLabref(itot) =-3.; } | |
87 | } | |
88 | Long_t labref; | |
89 | Int_t freq; | |
90 | (*reference).Search(VecTotLabref, labref, freq); | |
91 | ||
92 | //if(freq < 6) labref=-labref; // cinque - sei | |
93 | if(freq < 5) labref=-labref; // cinque - sei | |
94 | (*reference).SetLabel(labref); | |
95 | ||
96 | return *reference; | |
97 | ||
98 | } | |
99 | ||
100 | ||
101 | ||
102 | //________________________________________________________________ | |
103 | ||
104 | ||
105 | ||
106 | void AliITSTrackerV1::DoTracking(Int_t evNumber, Int_t min_t, Int_t max_t, TFile *file, Bool_t flagvert) { | |
107 | //Origin A. Badala' and G.S. Pappalardo: e-mail Angela.Badala@ct.infn.it, Giuseppe.S.Pappalardo@ct.infn.it | |
108 | // ex macro for tracking ITS | |
109 | ||
110 | printf("begin DoTracking - file %p\n",file); | |
111 | ||
112 | /////////////////////////////////////// gets information on geometry /////////////////////////////////// | |
113 | AliITSgeoinfo *geoinfo = new AliITSgeoinfo; | |
114 | ||
115 | AliITSgeom *g1 = ((AliITS*)gAlice->GetDetector("ITS"))->GetITSgeom(); | |
116 | ||
117 | Int_t ll=1, dd=1; | |
118 | TVector det(9); | |
119 | ||
120 | //cout<<" nlad ed ndet \n"; | |
121 | for(Int_t i=0; i<6; i++) { | |
122 | geoinfo->Nlad[i]=g1->GetNladders(i+1); | |
123 | geoinfo->Ndet[i]=g1->GetNdetectors(i+1); | |
124 | //cout<<geoinfo->Nlad[i]<<" "<<geoinfo->Ndet[i]<<"\n"; | |
125 | } | |
126 | //getchar(); | |
127 | ||
128 | //cout<<" raggio medio = "; | |
129 | for(Int_t i=0; i<6; i++) { | |
130 | g1->GetCenterThetaPhi(i+1,ll,dd,det); | |
131 | geoinfo->Avrad[i]=TMath::Sqrt(det(0)*det(0)+det(1)*det(1)); | |
132 | //cout<<geoinfo->Avrad[i]<<" "; | |
133 | } | |
134 | //cout<<"\n"; getchar(); | |
135 | ||
136 | geoinfo->Detx[0] = ((AliITSgeomSPD*)(g1->GetShape(1, ll, dd)))->GetDx(); | |
137 | geoinfo->Detz[0] = ((AliITSgeomSPD*)(g1->GetShape(1, ll, dd)))->GetDz(); | |
138 | ||
139 | geoinfo->Detx[1] = ((AliITSgeomSPD*)(g1->GetShape(2, ll, dd)))->GetDx(); | |
140 | geoinfo->Detz[1] = ((AliITSgeomSPD*)(g1->GetShape(2, ll, dd)))->GetDz(); | |
141 | ||
142 | geoinfo->Detx[2] = ((AliITSgeomSDD*)(g1->GetShape(3, ll, dd)))->GetDx(); | |
143 | geoinfo->Detz[2] = ((AliITSgeomSDD*)(g1->GetShape(3, ll, dd)))->GetDz(); | |
144 | ||
145 | geoinfo->Detx[3] = ((AliITSgeomSDD*)(g1->GetShape(4, ll, dd)))->GetDx(); | |
146 | geoinfo->Detz[3] = ((AliITSgeomSDD*)(g1->GetShape(4, ll, dd)))->GetDz(); | |
147 | ||
148 | geoinfo->Detx[4] = ((AliITSgeomSSD*)(g1->GetShape(5, ll, dd)))->GetDx(); | |
149 | geoinfo->Detz[4] = ((AliITSgeomSSD*)(g1->GetShape(5, ll, dd)))->GetDz(); | |
150 | ||
151 | geoinfo->Detx[5] = ((AliITSgeomSSD*)(g1->GetShape(6, ll, dd)))->GetDx(); | |
152 | geoinfo->Detz[5] = ((AliITSgeomSSD*)(g1->GetShape(6, ll, dd)))->GetDz(); | |
153 | ||
154 | //cout<<" Detx Detz\n"; | |
155 | //for(Int_t la=0; la<6; la++) cout<<" "<<geoinfo->Detx[la]<<" "<<geoinfo->Detz[la]<<"\n"; | |
156 | //getchar(); | |
157 | ////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
158 | ||
159 | //const char *pname="75x40_100x60"; | |
160 | ||
161 | Int_t imax=200,jmax=450; | |
162 | AliITSRad *rl = new AliITSRad(imax,jmax); | |
163 | //cout<<" dopo costruttore AliITSRad\n"; getchar(); | |
164 | ||
165 | struct GoodTrack { | |
166 | Int_t lab,code; | |
167 | Float_t px,py,pz,x,y,z,pxg,pyg,pzg,ptg; | |
168 | Bool_t flag; | |
169 | }; | |
170 | ||
171 | ||
172 | gAlice->GetEvent(0); | |
173 | ||
174 | AliKalmanTrack *kkprov; | |
175 | kkprov->SetConvConst(100/0.299792458/0.2/gAlice->Field()->Factor()); | |
176 | ||
177 | TFile *cf=TFile::Open("AliTPCclusters.root"); | |
178 | AliTPCParam *digp= (AliTPCParam*)cf->Get("75x40_100x60"); | |
179 | if (!digp) { cerr<<"TPC parameters have not been found !\n"; getchar();} | |
180 | ||
181 | AliTPCtracker *tracker = new AliTPCtracker(digp); | |
182 | ||
183 | // Load clusters | |
184 | tracker->LoadInnerSectors(); | |
185 | tracker->LoadOuterSectors(); | |
186 | ||
187 | ||
188 | GoodTrack gt[15000]; | |
189 | Int_t ngood=0; | |
190 | ifstream in("itsgood_tracks"); | |
191 | ||
192 | cerr<<"Reading itsgood tracks...\n"; | |
193 | while (in>>gt[ngood].lab>>gt[ngood].code | |
194 | >>gt[ngood].px >>gt[ngood].py>>gt[ngood].pz | |
195 | >>gt[ngood].x >>gt[ngood].y >>gt[ngood].z | |
196 | >>gt[ngood].pxg >>gt[ngood].pyg >>gt[ngood].pzg | |
197 | >>gt[ngood].ptg >>gt[ngood].flag) { | |
198 | ngood++; | |
199 | cerr<<ngood<<'\r'; | |
200 | if (ngood==15000) { | |
201 | cerr<<"Too many good tracks !\n"; | |
202 | break; | |
203 | } | |
204 | } | |
205 | if (!in.eof()) cerr<<"Read error (itsgood_tracks) !\n"; | |
206 | ||
207 | ||
208 | // Load tracks | |
209 | TFile *tf=TFile::Open("AliTPCtracks.root"); | |
210 | if (!tf->IsOpen()) {cerr<<"Can't open AliTPCtracks.root !\n"; return ;} | |
211 | TObjArray tracks(200000); | |
212 | TTree *tracktree=(TTree*)tf->Get("TPCf"); | |
213 | if (!tracktree) {cerr<<"Can't get a tree with TPC tracks !\n";} | |
214 | TBranch *tbranch=tracktree->GetBranch("tracks"); | |
215 | Int_t nentr=(Int_t)tracktree->GetEntries(); | |
216 | Int_t kk; | |
217 | AliTPCtrack *iotracktpc=0; | |
218 | for (kk=0; kk<nentr; kk++) { | |
219 | iotracktpc=new AliTPCtrack; | |
220 | tbranch->SetAddress(&iotracktpc); | |
221 | tracktree->GetEvent(kk); | |
222 | tracker->CookLabel(iotracktpc,0.1); | |
223 | tracks.AddLast(iotracktpc); | |
224 | } | |
225 | delete tracker; | |
226 | tf->Close(); | |
227 | ||
228 | ||
229 | Int_t nt = tracks.GetEntriesFast(); | |
230 | cerr<<"Number of found tracks "<<nt<<endl; | |
231 | ||
232 | TVector DataOut(9); | |
233 | Int_t kkk=0; | |
234 | ||
235 | Double_t ptg=0.,pxg=0.,pyg=0.,pzg=0.; | |
236 | ||
237 | ////////////////////////////// good tracks definition in TPC //////////////////////////////// | |
238 | ||
239 | ofstream out1 ("AliITSTrag.out"); | |
240 | Int_t i; | |
241 | for (i=0; i<ngood; i++) out1 << gt[i].ptg << "\n"; | |
242 | out1.close(); | |
243 | ||
244 | ||
245 | TVector vec(5); | |
246 | TTree *TR=gAlice->TreeR(); | |
247 | Int_t nent=(Int_t)TR->GetEntries(); | |
248 | TClonesArray *recPoints = ITS->RecPoints(); | |
249 | ||
250 | Int_t numbpoints; | |
251 | Int_t totalpoints=0; | |
252 | Int_t *np = new Int_t[nent]; | |
253 | Int_t **vettid = new Int_t* [nent]; | |
254 | Int_t mod; | |
255 | ||
256 | for (mod=0; mod<nent; mod++) { | |
257 | vettid[mod]=0; | |
258 | ITS->ResetRecPoints(); | |
259 | //gAlice->TreeR()->GetEvent(mod+1); //first entry in TreeR is empty | |
260 | gAlice->TreeR()->GetEvent(mod); //first entry in TreeR is empty | |
261 | numbpoints = recPoints->GetEntries(); | |
262 | totalpoints+=numbpoints; | |
263 | np[mod] = numbpoints; | |
264 | //cout<<" mod = "<<mod<<" numbpoints = "<<numbpoints<<"\n"; getchar(); | |
265 | vettid[mod] = new Int_t[numbpoints]; | |
266 | Int_t ii; | |
267 | for (ii=0;ii<numbpoints; ii++) *(vettid[mod]+ii)=0; | |
268 | } | |
269 | ||
270 | AliTPCtrack *track=0; | |
271 | ||
272 | ||
273 | if(min_t < 0) {min_t = 0; max_t = nt-1;} | |
274 | ||
275 | /* | |
276 | ///////////////////////////////// Definition of vertex end its error //////////////////////////// | |
277 | ////////////////////////// In the future it will be given by a method /////////////////////////// | |
278 | Double_t Vx=0.; | |
279 | Double_t Vy=0.; | |
280 | Double_t Vz=0.; | |
281 | ||
282 | Float_t sigmavx=0.0050; // 50 microns | |
283 | Float_t sigmavy=0.0050; // 50 microns | |
284 | Float_t sigmavz=0.010; // 100 microns | |
285 | ||
286 | //Vx+=gRandom->Gaus(0,sigmavx); Vy+=gRandom->Gaus(0,sigmavy); Vz+=gRandom->Gaus(0,sigmavz); | |
287 | TVector vertex(3), ervertex(3) | |
288 | vertex(0)=Vx; vertex(1)=Vy; vertex(2)=Vz; | |
289 | ervertex(0)=sigmavx; ervertex(1)=sigmavy; ervertex(2)=sigmavz; | |
290 | ///////////////////////////////////////////////////////////////////////////////////////////////// | |
291 | */ | |
292 | ||
293 | ||
294 | TTree tracktree1("TreeT","Tree with ITS tracks"); | |
295 | AliITSiotrack *iotrack=0; | |
296 | tracktree1.Branch("ITStracks","AliITSiotrack",&iotrack,32000,0); | |
297 | ||
298 | ofstream out ("AliITSTra.out"); | |
299 | ||
300 | Int_t j; | |
301 | for (j=min_t; j<=max_t; j++) { | |
302 | track=(AliTPCtrack*)tracks.UncheckedAt(j); | |
303 | Int_t flaglab=0; | |
304 | if (!track) continue; | |
305 | ////// elimination of not good tracks //////////// | |
306 | Int_t ilab=TMath::Abs(track->GetLabel()); | |
307 | Int_t iii; | |
308 | for (iii=0;iii<ngood;iii++) { | |
309 | //cout<<" ilab, gt[iii].lab = "<<ilab<<" "<<gt[iii].lab<<"\n"; getchar(); | |
310 | if (ilab==gt[iii].lab) { | |
311 | flaglab=1; | |
312 | ptg=gt[iii].ptg; | |
313 | pxg=gt[iii].pxg; | |
314 | pyg=gt[iii].pyg; | |
315 | pzg=gt[iii].pzg; | |
316 | break; | |
317 | } | |
318 | } | |
319 | //cout<<" j flaglab = " <<j<<" "<<flaglab<<"\n"; getchar(); | |
320 | if (!flaglab) continue; | |
321 | //cout<<" j = " <<j<<"\n"; getchar(); | |
322 | ||
323 | ||
324 | ////// new propagation to the end of TPC ////////////// | |
325 | Double_t xk=77.415; | |
326 | track->PropagateTo(xk, 28.94, 1.204e-3); //Ne | |
327 | xk -=0.01; | |
328 | track->PropagateTo(xk, 44.77, 1.71); //Tedlar | |
329 | xk -=0.04; | |
330 | track->PropagateTo(xk, 44.86, 1.45); //Kevlar | |
331 | xk -=2.0; | |
332 | track->PropagateTo(xk, 41.28, 0.029); //Nomex | |
333 | xk-=16; | |
334 | track->PropagateTo(xk,36.2,1.98e-3); //C02 | |
335 | xk -=0.01; | |
336 | track->PropagateTo(xk, 24.01, 2.7); //Al | |
337 | xk -=0.01; | |
338 | track->PropagateTo(xk, 44.77, 1.71); //Tedlar | |
339 | xk -=0.04; | |
340 | track->PropagateTo(xk, 44.86, 1.45); //Kevlar | |
341 | xk -=0.5; | |
342 | track->PropagateTo(xk, 41.28, 0.029); //Nomex | |
343 | ||
344 | /////////////////////////////////////////////////////////////// | |
345 | ||
346 | /////////////////////////////////////////////////////////////// | |
347 | AliITStrack trackITS(*track); | |
348 | AliITStrack result(*track); | |
349 | AliITStrack primarytrack(*track); | |
350 | ||
351 | /////////////////////////////////////////////////////////////////////////////////////////////// | |
352 | TVector Vgeant(3); | |
353 | Vgeant=result.GetVertex(); | |
354 | ||
355 | // Definition of Dv and Zv for vertex constraint | |
356 | Double_t sigmaDv=0.0050; Double_t sigmaZv=0.010; | |
357 | //Double_t sigmaDv=0.0015; Double_t sigmaZv=0.0015; | |
358 | Double_t uniform= gRandom->Uniform(); | |
359 | Double_t signdv; | |
360 | if(uniform<=0.5) signdv=-1.; | |
361 | else | |
362 | signdv=1.; | |
363 | ||
364 | Double_t Vr=TMath::Sqrt(Vgeant(0)*Vgeant(0)+ Vgeant(1)*Vgeant(1)); | |
365 | Double_t Dv=gRandom->Gaus(signdv*Vr,(Float_t)sigmaDv); | |
366 | Double_t Zv=gRandom->Gaus(Vgeant(2),(Float_t)sigmaZv); | |
367 | ||
368 | //cout<<" Dv e Zv = "<<Dv<<" "<<Zv<<"\n"; | |
369 | trackITS.SetDv(Dv); trackITS.SetZv(Zv); | |
370 | trackITS.SetsigmaDv(sigmaDv); trackITS.SetsigmaZv(sigmaZv); | |
371 | result.SetDv(Dv); result.SetZv(Zv); | |
372 | result.SetsigmaDv(sigmaDv); result.SetsigmaZv(sigmaZv); | |
373 | primarytrack.SetDv(Dv); primarytrack.SetZv(Zv); | |
374 | primarytrack.SetsigmaDv(sigmaDv); primarytrack.SetsigmaZv(sigmaZv); | |
375 | ||
376 | ///////////////////////////////////////////////////////////////////////////////////////////////// | |
377 | ||
378 | primarytrack.PrimaryTrack(rl); | |
379 | TVector d2=primarytrack.Getd2(); | |
380 | TVector tgl2=primarytrack.Gettgl2(); | |
381 | TVector dtgl=primarytrack.Getdtgl(); | |
382 | trackITS.Setd2(d2); trackITS.Settgl2(tgl2); trackITS.Setdtgl(dtgl); | |
383 | result.Setd2(d2); result.Settgl2(tgl2); result.Setdtgl(dtgl); | |
384 | /* | |
385 | trackITS.SetVertex(vertex); trackITS.SetErrorVertex(ervertex); | |
386 | result.SetVertex(vertex); result.SetErrorVertex(ervertex); | |
387 | */ | |
388 | ||
389 | Tracking(trackITS,&result,recPoints,vettid, flagvert,rl,geoinfo); | |
390 | ||
391 | // cout<<" progressive track number = "<<j<<"\r"; | |
392 | // cout<<j<<"\r"; | |
393 | Int_t NumofCluster=result.GetNumClust(); | |
394 | // cout<<" progressive track number = "<<j<<"\n"; // stampa | |
395 | Long_t labITS=result.GetLabel(); | |
396 | // cout << " ITS track label = " << labITS << "\n"; // stampa | |
397 | int lab=track->GetLabel(); | |
398 | //cout << " TPC track label = " << lab <<"\n"; // stampa | |
399 | ||
400 | ||
401 | //propagation to vertex | |
402 | ||
403 | Double_t rbeam=3.; | |
404 | ||
405 | result.Propagation(rbeam); | |
406 | ||
407 | Double_t C00,C10,C11,C20,C21,C22,C30,C31,C32,C33,C40,C41,C42,C43,C44; | |
408 | result.GetCElements(C00,C10,C11,C20,C21,C22,C30,C31,C32,C33,C40,C41,C42,C43,C44); | |
409 | ||
410 | Double_t pt=TMath::Abs(result.GetPt()); | |
411 | Double_t Dr=result.GetD(); | |
412 | Double_t Z=result.GetZ(); | |
413 | Double_t tgl=result.GetTgl(); | |
414 | Double_t C=result.GetC(); | |
415 | Double_t Cy=C/2.; | |
416 | Double_t Dz=Z-(tgl/Cy)*TMath::ASin(result.arga(rbeam)); | |
417 | Dz-=Vgeant(2); | |
418 | ||
419 | // cout<<" Dr e dz alla fine = "<<Dr<<" "<<Dz<<"\n"; getchar(); | |
420 | Double_t phi=result.Getphi(); | |
421 | Double_t phivertex = phi - TMath::ASin(result.argA(rbeam)); | |
422 | Double_t duepi=2.*TMath::Pi(); | |
423 | if(phivertex>duepi) phivertex-=duepi; | |
424 | if(phivertex<0.) phivertex+=duepi; | |
425 | Double_t Dtot=TMath::Sqrt(Dr*Dr+Dz*Dz); | |
426 | ||
427 | ////////////////////////////////////////////////////////////////////////////////////////// | |
428 | ||
429 | Int_t idmodule,idpoint; | |
430 | if(NumofCluster >=5) { // cinque - sei | |
431 | //if(NumofCluster ==6) { // cinque - sei | |
432 | ||
433 | ||
434 | AliITSiotrack outtrack; | |
435 | ||
436 | iotrack=&outtrack; | |
437 | ||
438 | iotrack->SetStatePhi(phi); | |
439 | iotrack->SetStateZ(Z); | |
440 | iotrack->SetStateD(Dr); | |
441 | iotrack->SetStateTgl(tgl); | |
442 | iotrack->SetStateC(C); | |
443 | Double_t radius=result.Getrtrack(); | |
444 | iotrack->SetRadius(radius); | |
445 | Int_t charge; | |
446 | if(C>0.) charge=-1; else charge=1; | |
447 | iotrack->SetCharge(charge); | |
448 | ||
449 | ||
450 | ||
451 | iotrack->SetCovMatrix(C00,C10,C11,C20,C21,C22,C30,C31,C32,C33,C40,C41,C42,C43,C44); | |
452 | ||
453 | Double_t px=pt*TMath::Cos(phivertex); | |
454 | Double_t py=pt*TMath::Sin(phivertex); | |
455 | Double_t pz=pt*tgl; | |
456 | ||
457 | Double_t xtrack=Dr*TMath::Sin(phivertex); | |
458 | Double_t ytrack=Dr*TMath::Cos(phivertex); | |
459 | Double_t ztrack=Dz+Vgeant(2); | |
460 | ||
461 | ||
462 | iotrack->SetPx(px); | |
463 | iotrack->SetPy(py); | |
464 | iotrack->SetPz(pz); | |
465 | iotrack->SetX(xtrack); | |
466 | iotrack->SetY(ytrack); | |
467 | iotrack->SetZ(ztrack); | |
468 | iotrack->SetLabel(labITS); | |
469 | ||
470 | Int_t il; | |
471 | for(il=0;il<6; il++){ | |
472 | iotrack->SetIdPoint(il,result.GetIdPoint(il)); | |
473 | iotrack->SetIdModule(il,result.GetIdModule(il)); | |
474 | } | |
475 | tracktree1.Fill(); | |
476 | ||
477 | //cout<<" labITS = "<<labITS<<"\n"; | |
478 | //cout<<" phi z Dr tgl C = "<<phi<<" "<<Z<<" "<<Dr<<" "<<tgl<<" "<<C<<"\n"; getchar(); | |
479 | ||
480 | DataOut(kkk) = ptg; kkk++; DataOut(kkk)=labITS; kkk++; DataOut(kkk)=lab; kkk++; | |
481 | ||
482 | for (il=0;il<6;il++) { | |
483 | idpoint=result.GetIdPoint(il); | |
484 | idmodule=result.GetIdModule(il); | |
485 | *(vettid[idmodule]+idpoint)=1; | |
486 | iotrack->SetIdPoint(il,idpoint); | |
487 | iotrack->SetIdModule(il,idmodule); | |
488 | } | |
489 | ||
490 | Double_t difpt= (pt-ptg)/ptg*100.; | |
491 | DataOut(kkk)=difpt; kkk++; | |
492 | Double_t lambdag=TMath::ATan(pzg/ptg); | |
493 | Double_t lam=TMath::ATan(tgl); | |
494 | Double_t diflam = (lam - lambdag)*1000.; | |
495 | DataOut(kkk) = diflam; kkk++; | |
496 | Double_t phig=TMath::ATan2(pyg,pxg); if(phig<0) phig=2.*TMath::Pi()+phig; | |
497 | Double_t phi=phivertex; | |
498 | ||
499 | Double_t difphi = (phi - phig)*1000.; | |
500 | DataOut(kkk)=difphi; kkk++; | |
501 | DataOut(kkk)=Dtot*1.e4; kkk++; | |
502 | DataOut(kkk)=Dr*1.e4; kkk++; | |
503 | DataOut(kkk)=Dz*1.e4; kkk++; | |
504 | Int_t r; | |
505 | for (r=0; r<9; r++) { out<<DataOut(r)<<" ";} | |
506 | out<<"\n"; | |
507 | kkk=0; | |
508 | ||
509 | ||
510 | } // end if on NumofCluster | |
511 | //gObjectTable->Print(); // stampa memoria | |
512 | } // end for (int j=min_t; j<=max_t; j++) | |
513 | ||
514 | out.close(); | |
515 | ||
516 | ||
517 | static Bool_t first=kTRUE; | |
518 | static TFile *tfile; | |
519 | ||
520 | if(first) { | |
521 | tfile=new TFile("itstracks.root","RECREATE"); | |
522 | //cout<<"I have opened itstracks.root file "<<endl; | |
523 | } | |
524 | first=kFALSE; | |
525 | tfile->cd(); | |
526 | tfile->ls(); | |
527 | ||
528 | char hname[30]; | |
529 | sprintf(hname,"TreeT%d",evNumber); | |
530 | ||
531 | tracktree1.Write(hname); | |
532 | ||
533 | ||
534 | ||
535 | TTree *fAli=gAlice->TreeK(); | |
536 | TFile *fileAli=0; | |
537 | ||
538 | if (fAli) fileAli =fAli->GetCurrentFile(); | |
539 | fileAli->cd(); | |
540 | ||
541 | //////////////////////////////////////////////////////////////////////////////////////////////// | |
542 | ||
543 | printf("delete vectors\n"); | |
544 | if(np) delete [] np; | |
545 | if(vettid) delete [] vettid; | |
546 | ||
547 | if(geoinfo) delete geoinfo; | |
548 | ||
549 | } |