]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EMCAL/AliEMCALLoader.cxx
Update the Print methods (Laurent)
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALLoader.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 /* $Id$ */
17
18 //_________________________________________________________________________
19 //  A singleton. This class should be used in the analysis stage to get 
20 //  reconstructed objects: Digits, RecPoints, TrackSegments and RecParticles,
21 //  instead of directly reading them from galice.root file. 
22 //                  
23 //  MvL Feb 2006:
24 //  The AliEMCALLoader now holds the TClonesArray and TObjArray for reading
25 //  Hits, Dgits, SDigits and RecPoints. Filling is managed in the GetEvent()
26 //  method.
27 //
28 //  Creation/writing of files is managed by the relevant parts of the 
29 //  reconstruction software (AliEMCALDigitiser etx)
30 //
31 //*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
32 //*--         Completely redesigned by Dmitri Peressounko March 2001  
33 //
34 //*-- YS June 2001 : renamed the original AliEMCALIndexToObject and make
35 //*--         systematic usage of TFolders without changing the interface
36 // 
37 //*-- Marco van Leeuwen, Jan 2006: complete revision to simplify reading
38 //*--         and fit better in general ALICE scheme
39 //
40 //////////////////////////////////////////////////////////////////////////////
41
42 // --- ROOT system ---
43 #include "TMath.h"
44 #include "TTree.h"
45
46 // --- Standard library ---
47
48 // --- AliRoot header files ---
49 #include "AliEMCALLoader.h"
50 #include "AliLog.h"
51 #include "AliCDBLocal.h"
52 #include "AliCDBStorage.h"
53 #include "AliCDBManager.h"
54 #include "AliCDBEntry.h"
55 #include "AliEMCALHit.h"
56
57 ClassImp(AliEMCALLoader)
58   
59 const TString AliEMCALLoader::fgkECARecPointsBranchName("EMCALECARP");//Name for branch with ECA Reconstructed Points
60 AliEMCALCalibData* AliEMCALLoader::fgCalibData = 0; //calibation data
61
62 //____________________________________________________________________________ 
63 AliEMCALLoader::AliEMCALLoader()
64   : fDebug(0),
65     fHits(0),
66     fDigits(0),
67     fSDigits(0),
68     fRecPoints(0)
69 {
70   //Default constructor for EMCAL Loader Class
71
72   fDebug = 0;
73   fHits = new TClonesArray("AliEMCALHit");
74   fDigits = new TClonesArray("AliEMCALDigit");
75   fSDigits = new TClonesArray("AliEMCALDigit");
76   fRecPoints = new TObjArray();
77 }
78
79 //____________________________________________________________________________ 
80 AliEMCALLoader::AliEMCALLoader(const Char_t *detname,const Char_t *eventfoldername)
81   : AliLoader(detname,eventfoldername),
82     fDebug(0),
83     fHits(0),
84     fDigits(0),
85     fSDigits(0),
86     fRecPoints(0)
87 {
88   //Specific constructor for EMCAL Loader class
89
90   fDebug=0;
91   fHits = new TClonesArray("AliEMCALHit");
92   fDigits = new TClonesArray("AliEMCALDigit");
93   fSDigits = new TClonesArray("AliEMCALDigit");
94   fRecPoints = new TObjArray();
95 }
96
97 //____________________________________________________________________________
98 AliEMCALLoader::AliEMCALLoader(const Char_t *name, TFolder *topfolder)
99   : AliLoader(name,topfolder),
100     fDebug(0),
101     fHits(0),
102     fDigits(0),
103     fSDigits(0),
104     fRecPoints(0)
105 {
106   //Specific constructor for EMCAL Loader class
107
108   fDebug=0;
109   fHits = new TClonesArray("AliEMCALHit");
110   fDigits = new TClonesArray("AliEMCALDigit");
111   fSDigits = new TClonesArray("AliEMCALDigit");
112   fRecPoints = new TObjArray();
113 }
114
115 //____________________________________________________________________________
116 AliEMCALLoader::AliEMCALLoader(const AliEMCALLoader & obj)
117   : AliLoader(obj),
118     fDebug(obj.fDebug),
119     fHits(obj.fHits),
120     fDigits(obj.fDigits),
121     fSDigits(obj.fSDigits),
122     fRecPoints(obj.fRecPoints)
123 {
124   //copy ctor
125 }
126
127 //____________________________________________________________________________ 
128 AliEMCALLoader::~AliEMCALLoader()
129 {
130   // Disconnect trees and remove arrays
131   if (TreeH())
132     TreeH()->SetBranchAddress(fDetectorName,0);
133   if (TreeD())
134     TreeD()->SetBranchAddress(fDetectorName,0);
135   if (TreeS())
136     TreeS()->SetBranchAddress(fDetectorName,0);
137   if (TreeR())
138     TreeR()->SetBranchAddress(fgkECARecPointsBranchName,0);
139   if (fHits) {
140     fHits->Delete();
141     delete fHits;
142   }
143   delete fDigits;
144   delete fSDigits;
145   delete fRecPoints;
146 }
147
148 //____________________________________________________________________________ 
149 AliEMCALCalibData* AliEMCALLoader::CalibData()
150
151   // Check if the instance of AliEMCALCalibData exists, if not, create it if 
152   // the OCDB is available, and finally return it.
153
154   if(!fgCalibData && (AliCDBManager::Instance()->IsDefaultStorageSet()))
155     {
156       AliCDBEntry *entry = (AliCDBEntry*) 
157         AliCDBManager::Instance()->Get("EMCAL/Calib/Data");
158       if (entry) fgCalibData =  (AliEMCALCalibData*) entry->GetObject();
159     }
160   
161   if(!fgCalibData)
162     AliFatal("Calibration parameters not found in CDB!");
163   
164   return fgCalibData;
165   
166 }
167
168 //____________________________________________________________________________ 
169 Int_t AliEMCALLoader::CalibrateRaw(Double_t energy, Int_t module, 
170                                    Int_t column, Int_t row)
171 {
172   // Convert energy into digitized amplitude for a cell relId
173   // It is a user responsilibity to open CDB and set
174   // AliEMCALCalibData object by the following operators:
175   // 
176   // AliCDBLocal *loc = new AliCDBLocal("deCalibDB");
177   // AliEMCALCalibData* clb = (AliEMCALCalibData*)AliCDBStorage::Instance()
178   //    ->Get(path_to_calibdata,run_number);
179   // AliEMCALGetter* gime = AliEMCALGetter::Instance("galice.root");
180   // gime->SetCalibData(clb);
181
182   if (CalibData() == 0)
183     Warning("CalibrateRaw","Calibration DB is not initiated!");
184
185   Float_t gainFactor = 0.00305;//0.0015; // width of one ADC channel in GeV
186   Float_t pedestal   = 0.009;//0.005;  // pedestals
187
188   if(CalibData()) {
189     gainFactor = CalibData()->GetADCchannel (module,column,row);
190     pedestal   = CalibData()->GetADCpedestal(module,column,row);
191   }
192   
193   Int_t   amp = static_cast<Int_t>( (energy - pedestal) / gainFactor + 0.5 ) ; 
194   return amp;
195 }
196
197 //____________________________________________________________________________ 
198 Int_t AliEMCALLoader::GetEvent() 
199 {
200   //Method to load all of the data
201   //members of the EMCAL for a given
202   //event from the Trees
203
204   AliLoader::GetEvent();  // First call AliLoader to do all the groundwork
205   
206   // Now connect and fill TClonesArray
207
208   // Hits
209    TTree *treeH = TreeH();
210    
211    if (treeH) {
212      Int_t nEnt = treeH->GetEntries();  // TreeH has array of hits for every primary
213      fHits->Clear();
214      Int_t index = 0;
215      TClonesArray *tempArr = 0x0;
216      TBranch * branchH = treeH->GetBranch(fDetectorName);
217      branchH->SetAddress(&tempArr);
218      for (Int_t iEnt = 0; iEnt < nEnt; iEnt++) {
219        treeH->GetEntry(iEnt);
220        Int_t nHit = tempArr->GetEntriesFast();
221        for (Int_t iHit = 0; iHit < nHit; iHit++) {
222          new ((*fHits)[index]) AliEMCALHit(*((AliEMCALHit*)tempArr->At(iHit)));
223          index++;
224        }
225      }
226      branchH->ResetAddress();
227      if (tempArr) {
228        tempArr->Delete();
229        delete tempArr;
230      }
231    }
232   
233    // SDigits
234    TTree *treeS = TreeS();
235    if (treeS) {
236      TBranch * branchS = treeS->GetBranch(fDetectorName);
237      branchS->ResetAddress();
238      if (fSDigits) {
239        fSDigits->Delete();
240        delete fSDigits;
241        fSDigits = 0x0;
242      }
243      branchS->SetAddress(&fSDigits);
244      treeS->GetEvent(0);
245    }
246    
247    // Digits
248    TTree *treeD = TreeD();
249    if (treeD) {
250      TBranch * branchD = treeD->GetBranch(fDetectorName);
251      branchD->ResetAddress();
252      if (fDigits) {
253        fDigits->Delete();
254        delete fDigits;
255        fDigits = 0x0;
256      }
257      branchD->SetAddress(&fDigits);
258      treeD->GetEvent(0);
259    }
260
261    // RecPoints
262    TTree *treeR = TreeR();
263    if (treeR) {
264      TBranch * branchR = treeR->GetBranch(fgkECARecPointsBranchName);
265      branchR->ResetAddress();
266      if (fRecPoints) {
267        fRecPoints->Delete();
268        delete fRecPoints;
269        fRecPoints = 0x0;
270      }
271      branchR->SetAddress(&fRecPoints);
272      treeR->GetEvent(0);
273    }
274    
275    return 0;
276 }