]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSFindClustersV2.cxx
AliMUONGeometryStore replaced with AliMpExMap (used as the type
[u/mrichter/AliRoot.git] / ITS / AliITSFindClustersV2.cxx
CommitLineData
ab4429d9 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
803d1ab0 16/* $Id$ */
7d62fb64 17///////////////////////////////////////////////////////////////////
18//Class for reconstruction of clusters V2 //
19// //
20// //
21///////////////////////////////////////////////////////////////////
88cb7938 22
ab4429d9 23#include <TFile.h>
24#include <TTree.h>
25#include <TBranch.h>
26#include <TClonesArray.h>
27#include <TParticle.h>
28
29#include "AliRun.h"
30#include "AliHeader.h"
31
ab4429d9 32#include "AliITSRecPoint.h"
33#include "AliITSFindClustersV2.h"
34#include "AliITSclusterV2.h"
35#include "AliITSgeom.h"
5d12ce38 36#include "AliMC.h"
ab4429d9 37
38ClassImp(AliITSFindClustersV2)
39
40//______________________________________________________________________
cb729508 41AliITSFindClustersV2::AliITSFindClustersV2():
42fAr(0),
43fDeletfAr(kFALSE),
44fGeom(0),
45fInFileName(0),
46fOutFileName(0),
47fIn(0),
48fOut(0),
49fInit(kFALSE),
50fSlowFast(kFALSE){
ab4429d9 51 // Default constructor.
52 // Inputs:
53 // none.
54 // Outputs:
55 // none.
56 // Return:
57 // A zero-ed constructed AliITSFindClustersV2 class.
58
ab4429d9 59}
60//______________________________________________________________________
61AliITSFindClustersV2::AliITSFindClustersV2(const TString infile,
cb729508 62 const TString outfile):
63fAr(0),
64fDeletfAr(kFALSE),
65fGeom(0),
66fInFileName(0),
67fOutFileName(0),
68fIn(0),
69fOut(0),
70fInit(kFALSE),
71fSlowFast(kFALSE){
ab4429d9 72 // Standard constructor.
73 // Inputs:
74 // const TString infile Input file name where the RecPoints are
75 // to be read from.
76 // const TString outfile Output file where V2 tracking clulsters
77 // are to be written. if =="" writen to the
78 // same file as input.
79 // Outputs:
80 // none.
81 // Return:
82 // A standardly constructed AliITSFindClustersV2 class.
83
ab4429d9 84 fInFileName = new TString(infile);
85 if(outfile.CompareTo("")!=0){
86 fOutFileName = new TString(outfile);
87 } // end if outfile.CompareeTo("")!=0
88
89 if(fOutFileName!=0){
90 fIn = new TFile(fInFileName->Data(),"READ");
91 fOut = new TFile(fOutFileName->Data(),"UPDATE");
92 }else{ // open fIn file for update
93 fIn = new TFile(fInFileName->Data(),"UPDATE");
94 } // end if
95
96 fAr = (AliRun*) fIn->Get("gAlice");
97 if(!fAr){
98 Warning("AliITSFindClusterV2",
99 "Can't fine gAlice in file %s. Aborting.",fIn->GetName());
100 return;
101 } // end if !fAr
102 fDeletfAr = kTRUE; // Since gAlice was read in, delete it.
7d62fb64 103 /*
ab4429d9 104 AliITS *its = (AliITS*) fAr->GetModule("ITS");
105 if(!its){
106 Warning("AliITSFindClusterV2",
107 "Can't fine the ITS in gAlice. Aborting.");
108 return;
109 } // end if !its
110 fGeom = its->GetITSgeom();
111 if(!fGeom){
112 Warning("AliITSFindClusterV2",
113 "Can't fine the ITS geometry in gAlice. Aborting.");
114 return;
115 } // end if !fGeom
7d62fb64 116 */
117 AliRunLoader* rl = AliRunLoader::Open("galice.root");
118 rl->CdGAFile();
119 fGeom = (AliITSgeom*)gDirectory->Get("AliITSgeom");
120 if(!fGeom){
121 Warning("AliITSFindClusterV2",
122 "Can't fine the ITS geometry in gAlice. Aborting.");
123 return;
124 } // end if !fGeom
125 delete rl;
ab4429d9 126
127 if(fOut) fOut->cd();
128 fInit = kTRUE;
129}
130//______________________________________________________________________
131AliITSFindClustersV2::AliITSFindClustersV2(TFile *in,
cb729508 132 TFile *out):
133fAr(0),
134fDeletfAr(kFALSE),
135fGeom(0),
136fInFileName(0),
137fOutFileName(0),
138fIn(0),
139fOut(0),
140fInit(kFALSE),
141fSlowFast(kFALSE){
ab4429d9 142 // Standard constructor.
143 // Inputs:
144 // const TFile *in Input file where the RecPoints are
145 // to be read from.
146 // const Tfile *out Output file where V2 tracking clulsters
147 // are to be written. if ==0 writen to the
148 // same file as input.
149 // Outputs:
150 // none.
151 // Return:
152 // A standardly constructed AliITSFindClustersV2 class.
153
ab4429d9 154 fIn = in;
155 fOut = out;
156 fAr = (AliRun*) fIn->Get("gAlice");
157 if(!fAr){
158 Warning("AliITSFindClusterV2",
159 "Can't fine gAlice in file %s. Aborting.",fIn->GetName());
160 return;
161 } // end if !fAr
162 fDeletfAr = kTRUE; // Since gAlice was read in, delete it.
7d62fb64 163 /*
ab4429d9 164 AliITS *its = (AliITS*) fAr->GetModule("ITS");
165 if(!its){
166 Warning("AliITSFindClusterV2",
167 "Can't fine the ITS in gAlice. Aborting.");
168 return;
169 } // end if !its
170 fGeom = its->GetITSgeom();
7d62fb64 171 */
172 AliRunLoader* rl = AliRunLoader::Open("galice.root");
173 rl->CdGAFile();
174 fGeom = (AliITSgeom*)gDirectory->Get("AliITSgeom");
ab4429d9 175 if(!fGeom){
176 Warning("AliITSFindClusterV2",
177 "Can't fine the ITS geometry in gAlice. Aborting.");
178 return;
179 } // end if !fGeom
7d62fb64 180 delete rl;
181
ab4429d9 182 if(fOut) fOut->cd();
183 fInit = kTRUE;
184}
185//______________________________________________________________________
186AliITSFindClustersV2::AliITSFindClustersV2(AliRun *ar,
cb729508 187 const TString outfile):
188fAr(0),
189fDeletfAr(kFALSE),
190fGeom(0),
191fInFileName(0),
192fOutFileName(0),
193fIn(0),
194fOut(0),
195fInit(kFALSE),
196fSlowFast(kFALSE){
ab4429d9 197 // Standard constructor.
198 // Inputs:
199 // const TString infile Input file name where the RecPoints are
200 // to be read from.
201 // const TString outfile Output file where V2 tracking clulsters
202 // are to be written. if =="" writen to the
203 // same file as input.
204 // Outputs:
205 // none.
206 // Return:
207 // A standardly constructed AliITSFindClustersV2 class.
208
ab4429d9 209 if(outfile.CompareTo("")!=0){
210 fOutFileName = new TString(outfile);
211 } // end if outfile.CompareeTo("")!=0
212
213 if(fOutFileName!=0){
214 fOut = new TFile(fOutFileName->Data(),"UPDATE");
215 } // end if
216
217 fAr = ar;
218 if(!fAr){
219 Warning("AliITSFindClusterV2",
220 "ar==0. Aborting.");
221 return;
222 } // end if !fAr
7d62fb64 223
224 /* AliITS *its = (AliITS*) fAr->GetModule("ITS");
ab4429d9 225 if(!its){
226 Warning("AliITSFindClusterV2",
227 "Can't fine the ITS in gAlice. Aborting.");
228 return;
229 } // end if !its
230 fGeom = its->GetITSgeom();
7d62fb64 231 */
232 AliRunLoader* rl = AliRunLoader::Open("galice.root");
233 rl->CdGAFile();
234 fGeom = (AliITSgeom*)gDirectory->Get("AliITSgeom");
ab4429d9 235 if(!fGeom){
236 Warning("AliITSFindClusterV2",
237 "Can't fine the ITS geometry in gAlice. Aborting.");
238 return;
239 } // end if !fGeom
7d62fb64 240 delete rl;
ab4429d9 241
242 if(fOut) fOut->cd();
243 fInit = kTRUE;
244}
7d62fb64 245//______________________________________________________________________
cb729508 246AliITSFindClustersV2::AliITSFindClustersV2(const AliITSFindClustersV2 &rec):TTask(rec),
247fAr(rec.fAr),
248fDeletfAr(rec.fDeletfAr),
249fGeom(rec.fGeom),
250fInFileName(rec.fInFileName),
251fOutFileName(rec.fOutFileName),
252fIn(rec.fIn),
253fOut(rec.fOut),
254fInit(rec.fInit),
255fSlowFast(rec.fSlowFast){
7d62fb64 256 // Copy constructor.
257
7d62fb64 258
259}
260//______________________________________________________________________
cb729508 261AliITSFindClustersV2& AliITSFindClustersV2::operator=(const AliITSFindClustersV2& source){
262 // Assignment operator.
263 this->~AliITSFindClustersV2();
264 new(this) AliITSFindClustersV2(source);
265 return *this;
7d62fb64 266}
267
ab4429d9 268//______________________________________________________________________
269AliITSFindClustersV2::~AliITSFindClustersV2(){
270 // Default constructor.
271 // Inputs:
272 // none.
273 // Outputs:
274 // none.
275 // Return:
276 // A destroyed AliITSFindclustersV2 class.
277
278 fGeom = 0; // Deleted when AliRun/ITS is deleted.
279 if(fInFileName!=0){ // input file opened by AliITSFindClustersV2
280 if(fIn!=0){
281 if(fIn->IsOpen()) fIn->Close();
282 delete fIn;
283 fIn = 0;
284 } // end if
285 delete fInFileName;
286 fInFileName = 0;
287 } // end if
288
289 if(fOutFileName!=0){ // input file opened by AliITSFindClustersV2
290 if(fOut!=0){
291 if(fOut->IsOpen()) fOut->Close();
292 delete fOut;
293 fOut = 0;
294 } // end if
295 delete fOutFileName;
296 fOutFileName = 0;
297 } // end if
298 if(fDeletfAr && !fAr){
299 cout << "deleting fAr."<< endl;
300 delete fAr;
301 fAr = 0;
302 cout << "fAr deleted OK."<< endl;
303 } // end if fDeletfAr
304}
305//______________________________________________________________________
306void AliITSFindClustersV2::Exec(const Option_t *opt){
307 // Main FindclustersV2 function.
308 // Inputs:
309 // Option_t * opt list of subdetector to digitize. =0 all.
310 // Outputs:
311 // none.
312 // Return:
313 // none.
314 Char_t name[50];
315
316 if(!fInit){
088e0b8d 317 Warning("Exec","(opt=%s) Initilization not succesfull. Aborting.\n",opt);
ab4429d9 318 return;
319 } // end if !fInit
320
321 fGeom->Write();
322
323 fAr->GetEvent(0);
324 TTree *pTree = fAr->TreeR();
325 if(!pTree){
326 Warning("Exec","Error getting TreeR. TreeR=%p",pTree);
327 return;
328 } // end if !pTree
329 TBranch *branch = 0;
330 if(fSlowFast) sprintf(name,"ITSRecPointsF");
331 else sprintf(name,"ITSRecPoints");
332 branch = pTree->GetBranch(name);
333 if(!branch){
357da3b7 334 Warning("Exec","Can't find branch %s in TreeR fSlowFast=%d",
ab4429d9 335 name,fSlowFast);
336 return;
337 } // end if !branch
338 TClonesArray *points = new TClonesArray("AliITSRecPoint",10000);
339 branch->SetAddress(&points);
340 Int_t nentr = (Int_t) branch->GetEntries();
341
342 if(fOut) fOut->cd();
343 TClonesArray *cluster = new TClonesArray("AliITSclusterV2",10000);
344 sprintf(name,"TreeC_ITS_%d",fAr->GetHeader()->GetEvent());
345 TTree *cTree = new TTree(name,"ITS clusters");
346 cTree->Branch("Clusters",&cluster);
347 TClonesArray &cl = *cluster;
348
349 Float_t lp[5];
350 Int_t lab[6];
351 Int_t i,j,lay,lad,det,nclusters=0,ncl;
352 Float_t kmip,x,y,zshift,yshift;
353 Double_t rot[9];
354 AliITSRecPoint *p;
355 TParticle *part;
356
357 for(i=0;i<nentr;i++){
358 points->Clear();
359 branch->GetEvent(i);
360 ncl = points->GetEntriesFast();
361 if(ncl<=0) {
362 cTree->Fill();
363 continue;
364 } // end if ncl<=0
365 nclusters += ncl;
366 fGeom->GetModuleId(i,lay,lad,det);
367 fGeom->GetTrans(i,x,y,zshift);
368 fGeom->GetRotMatrix(i,rot);
369 yshift = x*rot[0] + y*rot[1];
370 kmip = 1.0; // fGeom->GetModuletype(i)==kSPD
371 if(fGeom->GetModuleType(i)==kSDD) kmip = 280.0;
372 if(fGeom->GetModuleType(i)==kSSD) kmip = 38.0;
373 for(j=0;j<ncl;j++){
374 p = (AliITSRecPoint*)(points->UncheckedAt(j));
00a7cc50 375 lp[0] = - (p->GetDetLocalX() + yshift);
ab4429d9 376 if(lay==1) lp[0] = -lp[0];
377 lp[1] = p->GetZ() + zshift;
00a7cc50 378 lp[2] = p->GetSigmaDetLocX2();
ab4429d9 379 lp[3] = p->GetSigmaZ2();
380 lp[4] = p->GetQ()/kmip;
381 lab[0] = p->GetLabel(0);
382 lab[1] = p->GetLabel(1);
383 lab[2] = p->GetLabel(2);
384 lab[3] = i;
385 lad = lab[0];
386 if(lad>=0){
5d12ce38 387 part = (TParticle*) fAr->GetMCApp()->Particle(lad);
ab4429d9 388 lad = -3;
389 while(part->P() < 0.005){
390 if(part->GetFirstMother()<0){
391 Warning("Exec","Primary momentum: %e",part->P());
392 break;
393 } // end if part->GetFirstMother()<0
394 lad = part->GetFirstMother();
5d12ce38 395 part = (TParticle*) fAr->GetMCApp()->Particle(lad);
ab4429d9 396 } // end while part->P() < 0.005
397 if(lab[1]<0) lab[1] = lad;
398 else if(lab[2]<0) lab[2] = lad;
399 else Warning("Exec","No empty lables!");
400 } // end if lab>=0
babd135a 401 Int_t info[3]={0,0,0};
402 new(cl[j]) AliITSclusterV2(lab,lp,info);
ab4429d9 403 } // end for j
404 cTree->Fill();
405 cluster->Delete();
406 points->Delete();
407 } // end for i
408 cTree->Write();
409
410 delete cTree;
411 delete cluster;
412 delete points;
413}