]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSLoader.cxx
- disable use of SDD correction maps in calibration objects
[u/mrichter/AliRoot.git] / ITS / AliITSLoader.cxx
CommitLineData
9edefa04 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/* $Id$ */
17
7ca4655f 18#include <TClonesArray.h>
9edefa04 19#include <TClass.h>
6f5308d9 20#include <TGeoManager.h>
9edefa04 21
aacedc3e 22#include "AliITSdigit.h"
88cb7938 23#include "AliITSLoader.h"
7d62fb64 24#include "AliRunLoader.h"
6def2bd2 25#include "AliITSInitGeometry.h"
13033bec 26#include "AliLog.h"
88cb7938 27
aacedc3e 28///////////////////////////////////////////////////////////////////////////
eeac5f9f 29// Loader for ITS
30// it manages the I/O for:
31// raw clusters, primary vertices
32// V0 and cascade
33// and tracks propagated to the origin
aacedc3e 34//////////////////////////////////////////////////////////////////////////
88cb7938 35const TString AliITSLoader::fgkDefaultRawClustersContainerName = "TreeC";
36const TString AliITSLoader::fgkDefaultBackTracksContainerName = "TreeB";
37const TString AliITSLoader::fgkDefaultVerticesContainerName = "Vertex";
566abf75 38const TString AliITSLoader::fgkDefaultV0ContainerName = "V0";
39const TString AliITSLoader::fgkDefaultCascadeContainerName = "Cascade";
88cb7938 40ClassImp(AliITSLoader)
41
aacedc3e 42/**********************************************************************/
e56160b8 43 AliITSLoader::AliITSLoader():AliLoader(),
44fITSpid(0),
45fGeom(0){
eeac5f9f 46 // Default constructor
aacedc3e 47}
48/*********************************************************************/
49AliITSLoader::AliITSLoader(const Char_t *name,const Char_t *topfoldername):
e56160b8 50AliLoader(name,topfoldername),
51fITSpid(0),
52fGeom(0){
53 //Constructor
aacedc3e 54 AliDataLoader* rawClustersDataLoader = new AliDataLoader(
55 fDetectorName + ".RawCl.root",fgkDefaultRawClustersContainerName,
56 "Raw Clusters");
57 fDataLoaders->Add(rawClustersDataLoader);
58 rawClustersDataLoader->SetEventFolder(fEventFolder);
59 rawClustersDataLoader->SetFolder(GetDetectorDataFolder());
60
61 AliDataLoader* backTracksDataLoader = new AliDataLoader(
62 fDetectorName + ".BackTracks.root",fgkDefaultBackTracksContainerName,
63 "Back Propagated Tracks");
64 fDataLoaders->Add(backTracksDataLoader);
65 backTracksDataLoader->SetEventFolder(fEventFolder);
66 backTracksDataLoader->SetFolder(GetDetectorDataFolder());
eeac5f9f 67
aacedc3e 68 AliDataLoader* vertexDataLoader = new AliDataLoader(
69 fDetectorName + ".Vertex.root",fgkDefaultVerticesContainerName,
70 "Primary Vertices","O");
71 fDataLoaders->Add(vertexDataLoader);
72 vertexDataLoader->SetEventFolder(fEventFolder);
73 vertexDataLoader->SetFolder(GetDetectorDataFolder());
74
75 AliDataLoader* v0DataLoader = new AliDataLoader(
76 fDetectorName + ".V0s.root",fgkDefaultV0ContainerName,"V0 Vertices");
77 fDataLoaders->Add(v0DataLoader);
78 v0DataLoader->SetEventFolder(fEventFolder);
79 v0DataLoader->SetFolder(GetDetectorDataFolder());
80
81 AliDataLoader* cascadeDataLoader = new AliDataLoader(
82 fDetectorName + ".Cascades.root",fgkDefaultCascadeContainerName,
83 "Cascades");
84 fDataLoaders->Add(cascadeDataLoader);
85 cascadeDataLoader->SetEventFolder(fEventFolder);
86 cascadeDataLoader->SetFolder(GetDetectorDataFolder());
eeac5f9f 87}
aacedc3e 88/**********************************************************************/
89AliITSLoader::AliITSLoader(const Char_t *name,TFolder *topfolder):
e56160b8 90 AliLoader(name,topfolder),
91fITSpid(0),
92fGeom(0){
aacedc3e 93 //ctor
94 AliDataLoader* rawClustersDataLoader = new AliDataLoader(
95 fDetectorName + ".RawCl.root",fgkDefaultRawClustersContainerName,
96 "Raw Clusters");
97 fDataLoaders->Add(rawClustersDataLoader);
98 rawClustersDataLoader->SetEventFolder(fEventFolder);
99 rawClustersDataLoader->SetFolder(GetDetectorDataFolder());
eeac5f9f 100
aacedc3e 101 AliDataLoader* backTracksDataLoader = new AliDataLoader(
102 fDetectorName + ".BackTracks.root",fgkDefaultBackTracksContainerName,
103 "Back Propagated Tracks");
104 fDataLoaders->Add(backTracksDataLoader);
105 backTracksDataLoader->SetEventFolder(fEventFolder);
106 backTracksDataLoader->SetFolder(GetDetectorDataFolder());
107
108 AliDataLoader* vertexDataLoader = new AliDataLoader(
109 fDetectorName + ".Vertex.root",fgkDefaultVerticesContainerName,
110 "Primary Vertices","O");
111 fDataLoaders->Add(vertexDataLoader);
112 vertexDataLoader->SetEventFolder(fEventFolder);
113 vertexDataLoader->SetFolder(GetDetectorDataFolder());
114
115 AliDataLoader* v0DataLoader = new AliDataLoader(
116 fDetectorName + ".V0.root",fgkDefaultV0ContainerName,"V0 Vertices");
117 fDataLoaders->Add(v0DataLoader);
118 v0DataLoader->SetEventFolder(fEventFolder);
119 v0DataLoader->SetFolder(GetDetectorDataFolder());
120
121 AliDataLoader* cascadeDataLoader = new AliDataLoader(
122 fDetectorName + ".Cascade.root",fgkDefaultCascadeContainerName,
123 "Cascades");
124 fDataLoaders->Add(cascadeDataLoader);
125 cascadeDataLoader->SetEventFolder(fEventFolder);
126 cascadeDataLoader->SetFolder(GetDetectorDataFolder());
88cb7938 127}
e62c1aea 128
e62c1aea 129
aacedc3e 130/**********************************************************************/
131AliITSLoader::~AliITSLoader(){
132 //destructor
133 AliDataLoader* dl = 0;
134 UnloadRawClusters();
135 dl = GetRawClLoader();
136 fDataLoaders->Remove(dl);
88cb7938 137
aacedc3e 138 UnloadBackTracks();
139 dl = GetBackTracksDataLoader();
140 fDataLoaders->Remove(dl);
141
142 UnloadVertices();
143 dl = GetVertexDataLoader();
144 fDataLoaders->Remove(dl);
145
146 UnloadV0s();
147 dl = GetV0DataLoader();
148 fDataLoaders->Remove(dl);
149
150 UnloadCascades();
151 dl = GetCascadeDataLoader();
152 fDataLoaders->Remove(dl);
e56160b8 153
8e50d897 154 if(fGeom)delete fGeom;
023ae34b 155 fGeom = 0;
88cb7938 156}
7d62fb64 157/*
aacedc3e 158//----------------------------------------------------------------------
159AliITS* AliITSLoader::GetITS(){
160 // Returns the pointer to the ITS, kept on the file. A short cut metthod
161 // Inputs:
162 // none.
163 // Outputs:
164 // none.
165 // Returns:
166 // Returns a pointer to the ITS, if not found returns 0.
167 AliITS *its;
566abf75 168
aacedc3e 169 if(gAlice){
170 its = dynamic_cast<AliITS*> (gAlice->GetDetector(
171 GetDetectorName().Data()));
172 if(its) return its;
173 } // end if gAlice
174 AliRunLoader *rl=0;
175 rl = GetRunLoader();
176 if(!rl) return 0;
177 AliRun *ar=0;
178 ar = rl->GetAliRun();
179 if(!ar) return 0;
180 its = dynamic_cast<AliITS*> (ar->GetDetector(GetDetectorName().Data()));
181 return its;
88cb7938 182}
aacedc3e 183//----------------------------------------------------------------------
184void AliITSLoader::SetupDigits(AliITS *its){
185 // Sets up to store ITS Digits in side AliITS::fDtype TObjArray
186 // Inputs:
187 // AliITS *its Pointer to the ITS
188 // Outputs:
189 // none.
190 // Return:
191 // none.
88cb7938 192
aacedc3e 193 its->SetTreeAddressD(TreeD());
194}
7d62fb64 195*/
aacedc3e 196//----------------------------------------------------------------------
197void AliITSLoader::SetupDigits(TObjArray *digPerDet,Int_t n,
198 const Char_t **digclass){
199 // Sets up digPerDet to store ITS Digits.
200 // Inputs:
201 // TObjArray *digPerDet A pointer to a TObject Array size>=3.
202 // Int_t n The size of the TObjArray and digclass array
203 // Char_t **digclass Array of digit class names
204 // Outputs:
205 // TObjArray *digPerDet Setup and linked to the tree of digits
206 // Return:
207 // none.
208 Int_t i,m;
209 TClonesArray *cl = 0;
210 TTree *td = 0;
211 TBranch *br = 0;
212 Char_t branch[13];
213 const Char_t *det[3] = {"SPD","SDD","SSD"};
214
215 if(!digPerDet){
216 Error("SetUpDigits","TObject Array digPerDet does not exist");
217 return;
218 } // end if
219 m = digPerDet->GetSize();
220 if(m<n){
221 Error("SetUpDigits","TObject Array digPerDet=%p must have a size"
222 " at least that of n=%d",digPerDet,n);
223 } // end if
224 if(m<3){
225 Error("SetUpDigits","TObject Array digPerDet=%p must have a size >2",
226 digPerDet);
227 return;
228 } // end if
229 td = TreeD();
230 for(i=0;i<n;i++){
231 if(digPerDet->At(i)==0){ // set up TClones Array
232 digPerDet->AddAt(new TClonesArray(digclass[i],1000),i);
233 if(n==3) sprintf(branch,"ITSDigits%s",det[i]);
234 else sprintf(branch,"ITSDigits%d",i+1);
235 br = td->GetBranch(branch);
236 br->SetAddress(&((*digPerDet)[i]));
237 continue; // do next one.
238 } // end if
239 cl = dynamic_cast<TClonesArray*> (digPerDet->At(i));
240 if(!cl && digPerDet->At(i)!=0){ // not a TClonesArray
241 Error("SetUpDigits","TObject Array digPerDet-At(%d)=%p must be "
242 "zeroed or filled with TClonesArrays",i,digPerDet);
243 return;
244 } // end if
245 if(!(cl->GetClass()->GetBaseClass(AliITSdigit::Class()))){
246 Error("SetUPDigits","TClones array at digPerDet[%d}=%p must be"
247 "derived from AliITSdigit",i,digPerDet->At(i));
248 } // end if
249 cl->Clear();
250 if(n==3) sprintf(branch,"ITSDigits%s",det[i]);
251 else sprintf(branch,"ITSDigits%d",i+1);
252 br = td->GetBranch(branch);
253 br->SetAddress(&((*digPerDet)[i]));
254 continue;
255 } // end for i
256}
257//---------------------------------------------------------------------
258AliITSdigit * AliITSLoader::GetDigit(TObjArray *digPerDet,Int_t module,
259 Int_t digit){
260 // Gets the digit for for a specific detector type and module.
261 // To be used in conjustion with Setupdigits(AliITS *its).
262 // Inputs:
263 // TObjArray *digPereDet Pointer to the Array of digits
264 // Int_t module Module number
265 // Int_t digit Digit number
266 // Outputs:
267 // none.
268 // Return:
269 // returns the pointer to the digit. if zero then last digit for that
270 // module.
271
272 if(digPerDet==0){
273 Error("GetDigit","digPerDet=%p, module=%d, digit=%d",
274 digPerDet,module,digit);
275 return 0;
276 } // end if
277 return 0;
278}
7d62fb64 279/*
aacedc3e 280//---------------------------------------------------------------------
281AliITSdigit * AliITSLoader::GetDigit(AliITS *its,Int_t module,Int_t digit){
282 // Gets the digit for for a specific detector type and module.
283 // To be used in conjustion with Setupdigits(AliITS *its).
284 // Inputs:
285 // AliITS *its Pointer to the ITS
286 // Int_t module Module number
287 // Int_t digit Digit number
288 // Outputs:
289 // none.
290 // Return:
291 // returns the pointer to the digit. if zero then last digit for that
292 // module.
293 //AliITSDetType *idtype;
294 AliITSgeom *geom = its->GetITSgeom();
295 Int_t idet = geom->GetModuleType(module);
296 TClonesArray *digits;
297
298 its->ResetDigits();
299 TreeD()->GetEvent(module);
300 digits = its->DigitsAddress(idet);
301 if(digit>-1 && digit<digits->GetEntriesFast()){ // if in range.
302 return (AliITSdigit*) digits->At(digit);
303 } // end if
304 return 0;
305}
7d62fb64 306*/
aacedc3e 307//----------------------------------------------------------------------
88cb7938 308void AliITSLoader::MakeTree(Option_t *opt){
aacedc3e 309 // invokes AliLoader::MakeTree + specific ITS tree(s)
310 // Valid options: H,S,D,R,T and C (C=raw clusters)
311 AliLoader::MakeTree(opt);
312 const char *oC = strstr(opt,"C");
313 if (oC) MakeRawClustersContainer();
314
315 const char *oB = strstr(opt,"B");
316 if (oB) MakeBackTracksContainer();
317
318 const char *oV0 = strstr(opt,"V0");
319 if (oV0) MakeV0Container();
320
321 const char *oX = strstr(opt,"X");
322 if (oX) MakeCascadeContainer();
88cb7938 323}
7d62fb64 324
325//----------------------------------------------------------------------
8e50d897 326AliITSgeom* AliITSLoader::GetITSgeom(Bool_t force) {
7d62fb64 327 // retrieves the ITS geometry from file
8e50d897 328 if(fGeom && !force)return fGeom;
329 if(fGeom && force){
330 delete fGeom;
331 fGeom = 0;
332 }
6f5308d9 333 if(!gGeoManager){
334 AliError("gGeoManager is a null pointer - ITS geometry not built");
335 return fGeom;
336 }
108bd0fe 337 AliITSInitGeometry initgeom;
6def2bd2 338 fGeom = initgeom.CreateAliITSgeom();
339 AliDebug(1,"AliITSgeom object has been initialized from TGeo\n");
108bd0fe 340 AliInfo(Form("Geometry name: %s",(initgeom.GetGeometryName()).Data()));
8e50d897 341 return fGeom;
7d62fb64 342}
023ae34b 343//______________________________________________________________________
344void AliITSLoader::SetITSgeom(AliITSgeom *geom){
345 // Replaces the AliITSgeom object read from file with the one
346 // given.
347 // Inputs:
348 // AliITSgeom *geom The AliITSgeom object to replace the one
349 // read from the file
350 // Outputs:
351 // none.
352 // Return:
353 // none.
354
355 if(fGeom==geom) return; // Same do nothing
356 if(fGeom) {
357 delete fGeom;
358 fGeom=0;
359 }// end if
360 fGeom=geom;
361}
7d62fb64 362