]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSreconstruction.cxx
Removed warning from part of code not properly implimneted yet.
[u/mrichter/AliRoot.git] / ITS / AliITSreconstruction.cxx
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  
16 /*
17 $Log$
18 Revision 1.3.6.2  2002/10/14 13:14:08  hristov
19 Updating VirtualMC to v3-09-02
20
21 Revision 1.6  2002/09/09 17:30:02  nilsen
22 Added new creator which passes a pointer to type AliRun. Can now use either
23 gAlice or a local instance of AliRun.
24
25 Revision 1.5  2002/05/13 14:27:57  hristov
26 TreeC created once per event (M.Masera)
27
28 Revision 1.4  2002/05/10 22:31:30  nilsen
29 Changes by Massimo Masera to allow Recpoints and Clusters to be written
30 to separate files.
31
32 Revision 1.3  2002/02/06 13:52:27  barbera
33 gAlice deletion corrected (from M. Masera)
34
35 Revision 1.2  2002/01/31 18:52:09  nilsen
36 Minor change to allow the use of files that are already open. grun.C macro
37 that also does ITS digitizationa and Reconstruction all in one go.
38
39 Revision 1.1  2002/01/30 22:20:22  nilsen
40 New TTask based method to do Digits To clusters. Works with files of multiple
41 events in the file. Macro added to show how to use. Also the changes made
42 in the nessesary complilation files.
43
44 */
45 #include <TROOT.h>
46 #include <TFile.h>
47 #include <TSeqCollection.h>
48 #include <TString.h>
49 #include <TClonesArray.h>
50
51 #include "AliRun.h"
52
53 #include "AliITS.h"
54 #include "AliITSDetType.h"
55 #include "AliITSreconstruction.h"
56 #include "AliITSsegmentationSPD.h"
57 #include "AliITSsegmentationSDD.h"
58 #include "AliITSsegmentationSSD.h"
59 #include "AliITSClusterFinderSPD.h"
60 #include "AliITSClusterFinderSDD.h"
61 #include "AliITSClusterFinderSSD.h"
62 #include "AliITSresponseSDD.h"
63 #include "AliITSgeom.h"
64
65 ClassImp(AliITSreconstruction)
66
67 //______________________________________________________________________
68 AliITSreconstruction::AliITSreconstruction(){
69     // Default constructor.
70     // Inputs:
71     //  none.
72     // Outputs:
73     //   none.
74     // Return:
75     //    A zero-ed constructed AliITSreconstruction class.
76
77     fFilename = "";
78     fFile     = 0;
79     fFile2    = 0;
80     fITS      = 0;
81     fDet[0] = fDet[1] = fDet[2] = kTRUE;
82     fInit     = kFALSE;
83     fArp      = 0;
84     fDfArp    = kFALSE;
85 }
86 //______________________________________________________________________
87 AliITSreconstruction::AliITSreconstruction(AliRun *ar){
88     // Standard constructor.
89     // Inputs:
90     //  AliRun *ar   Pointer to an existing AliRun object. Assumed that
91     //               this AliRun object will not be deleted by this distructor.
92     // Outputs:
93     //   none.
94     // Return:
95     //    A standardly constructed AliITSreconstruction class.
96
97     fFilename = "";
98     fFile     = 0;
99     fFile2    = 0;
100     fITS      = 0;
101     fDet[0] = fDet[1] = fDet[2] = kTRUE;
102     fInit     = kFALSE;
103     fDfArp    = kFALSE;
104     fArp      = ar;
105 }
106 //______________________________________________________________________
107 AliITSreconstruction::AliITSreconstruction(const char* filename){
108     // Standard constructor.
109     // Inputs:
110     //  const char* filename    filename containing the digits to be
111     //                          reconstructed. If filename = 0 (nil)
112     //                          then no file is opened but a file is
113     //                          assumed to already be opened. This 
114     //                          already opened file will be used.
115     // Outputs:
116     //   none.
117     // Return:
118     //    A standardly constructed AliITSreconstruction class.
119
120     fFilename = filename;
121     fFile2 = 0;
122     fFile = 0;
123     fArp      = 0;
124     fDfArp    = kTRUE;
125     if(filename){
126         fFile = (TFile*)gROOT->GetListOfFiles()->FindObject(fFilename.Data());
127         if(fFile) fFile->Close();
128         fFile = new TFile(fFilename.Data(),"UPDATE");
129     if(fArp) {
130       delete fArp;
131       fArp = 0;
132     }
133         fArp = (AliRun*)fFile->Get("gAlice");
134         if(!fArp) {
135             cout << "gAlice not found on file. Aborting." << endl;
136             fInit = kFALSE;
137             return;
138         } // end if !fArp
139     } // end if !filename.
140 }
141 //______________________________________________________________________
142 AliITSreconstruction::~AliITSreconstruction(){
143     // Default constructor.
144     // Inputs:
145     //  none.
146     // Outputs:
147     //   none.
148     // Return:
149     //    A destroyed AliITSreconstruction class.
150
151     if(fFile) fFile->Close();
152     fFile     = 0;
153     fITS      = 0;
154     if(fDfArp){
155         if(fArp) delete fArp;
156     } // end if
157 }
158 //______________________________________________________________________
159 Bool_t AliITSreconstruction::Init(){
160     // Class Initilizer.
161     // Inputs:
162     //  none.
163     // Outputs:
164     //   none.
165     // Return:
166     //    kTRUE if no errors initilizing this class occurse else kFALSE
167     Int_t nparticles;
168     fITS = (AliITS*) fArp->GetDetector("ITS");
169     if(!fITS){
170         cout << "ITS not found aborting. fITS=" << fITS << endl;
171         fInit = kFALSE;
172         return fInit;
173     } // end if !fITS
174     if(!(fITS->GetITSgeom())){
175         cout << "ITSgeom not found aborting."<< endl;
176         fInit = kFALSE;
177         return fInit;
178     } // end if !GetITSgeom()
179     // Now ready to init.
180
181     fDet[0] = fDet[1] = fDet[2] = kTRUE;
182     fEnt0 = 0;
183     fEnt  = fArp->GetEventsPerRun();
184     fITS->MakeTreeC();
185     nparticles = fArp->GetEvent(fEnt0);
186     
187     // finished init.
188     fInit = InitRec();
189     return fInit;
190 }
191 //______________________________________________________________________
192 Bool_t AliITSreconstruction::InitRec(){
193     // Sets up Reconstruction part of AliITSDetType..
194     // Inputs:
195     //      none.
196     // Outputs:
197     //      none.
198     // Return:
199     //      none.
200     AliITSDetType *idt;
201
202     // SPD
203     if(fDet[kSPD]){
204         idt = fITS->DetType(kSPD);
205         AliITSsegmentationSPD *segSPD = (AliITSsegmentationSPD*)
206                                                idt->GetSegmentationModel();
207         TClonesArray *digSPD = fITS->DigitsAddress(kSPD);
208         TClonesArray *recpSPD = fITS->ClustersAddress(kSPD);
209         AliITSClusterFinderSPD *recSPD = new AliITSClusterFinderSPD(segSPD,
210                                                                     digSPD,
211                                                                     recpSPD);
212         fITS->SetReconstructionModel(kSPD,recSPD);
213     } // end if fDet[kSPD].
214     // SDD
215     if(fDet[kSDD]){
216         idt = fITS->DetType(kSDD);
217         AliITSsegmentationSDD *segSDD = (AliITSsegmentationSDD*)
218                                            idt->GetSegmentationModel();
219         AliITSresponseSDD *resSDD = (AliITSresponseSDD*)
220                                            idt->GetResponseModel();
221         TClonesArray *digSDD = fITS->DigitsAddress(kSDD);
222         TClonesArray *recpSDD = fITS->ClustersAddress(kSDD);
223         AliITSClusterFinderSDD *recSDD =new AliITSClusterFinderSDD(segSDD,
224                                                                    resSDD,
225                                                                digSDD,recpSDD);
226         fITS->SetReconstructionModel(kSDD,recSDD);
227     } // end if fDet[kSDD]
228     // SSD
229     if(fDet[kSSD]){
230         idt = fITS->DetType(kSSD);
231         AliITSsegmentationSSD *segSSD = (AliITSsegmentationSSD*)
232                                          idt->GetSegmentationModel();
233         TClonesArray *digSSD = fITS->DigitsAddress(kSSD);
234         AliITSClusterFinderSSD *recSSD =new AliITSClusterFinderSSD(segSSD,
235                                                                    digSSD);
236         fITS->SetReconstructionModel(kSSD,recSSD);
237     } // end if fDet[kSSD]
238
239     return kTRUE;
240 }
241 //______________________________________________________________________ 
242 void AliITSreconstruction::Exec(const Option_t *opt){
243     // Main reconstruction function.
244     // Inputs:
245     //      Option_t * opt   list of subdetector to digitize. =0 all.
246     // Outputs:
247     //      none.
248     // Return:
249     //      none.
250     Option_t *lopt;
251     Int_t nparticles,evnt;
252
253     if(strstr(opt,"All")||strstr(opt,"ALL")||strstr(opt,"ITS")||opt==0){
254         fDet[0] = fDet[1] = fDet[2] = kTRUE;
255         lopt = "All";
256     }else{
257         fDet[0] = fDet[1] = fDet[2] = kFALSE;
258         if(strstr(opt,"SPD")) fDet[kSPD] = kTRUE;
259         if(strstr(opt,"SDD")) fDet[kSDD] = kTRUE;
260         if(strstr(opt,"SSD")) fDet[kSSD] = kTRUE;
261         if(fDet[kSPD] && fDet[kSDD] && fDet[kSSD]) lopt = "All";
262         else lopt = opt;
263     } // end if strstr(opt,...)
264
265     if(!fInit){
266         cout << "Initilization Failed, Can't run Exec." << endl;
267         return;
268     } // end if !fInit
269     TDirectory *curr = gDirectory;
270     if(fFile2)fFile2->cd();
271     for(evnt=0;evnt<fEnt;evnt++){
272       nparticles = fArp->GetEvent(evnt);
273       fArp->SetEvent(evnt);
274       if(!fArp->TreeR()){
275         if(fFile2){
276           fArp->MakeTree("R",fFile2);
277         }
278         else {
279           fArp->MakeTree("R");
280         }
281       }
282       fITS->MakeBranch("R");
283       fITS->MakeTreeC();
284       fITS->DigitsToRecPoints(evnt,0,lopt);
285     } // end for evnt
286     curr->cd();
287 }
288 //______________________________________________________________________ 
289 void AliITSreconstruction::SetOutputFile(TString filename){
290   // Set a file name for recpoints. Used only if this file is not the file
291   // containing digits. This obj is deleted by AliRun.
292   fFile2 = fArp->InitTreeFile("R",filename);
293 }
294
295
296
297
298