]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EMCAL/AliEMCALLoader.cxx
- FillESD: Reject digits with time larger than 256*256/1e9*100 and diminish
[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
43 // --- ROOT system ---
44
45 #include "TTree.h"
46
47 // --- Standard library ---
48
49 // --- AliRoot header files ---
50 #include "AliEMCALLoader.h"
51 #include "AliLog.h"
52 #include "AliCDBLocal.h"
53 #include "AliCDBStorage.h"
54 #include "AliCDBManager.h"
55
56 ClassImp(AliEMCALLoader)
57   
58 const TString AliEMCALLoader::fgkECARecPointsBranchName("EMCALECARP");//Name for branch with ECA Reconstructed Points
59 AliEMCALCalibData* AliEMCALLoader::fCalibData = 0; //calibation data
60 AliEMCALAlignData* AliEMCALLoader::fAlignData = 0; //alignment data
61
62 //____________________________________________________________________________ 
63 AliEMCALLoader::AliEMCALLoader()
64 {
65   fDebug = 0;
66   fHits = new TClonesArray("AliEMCALHit");
67   fDigits = new TClonesArray("AliEMCALDigit");
68   fSDigits = new TClonesArray("AliEMCALDigit");
69   fRecPoints = new TObjArray();
70 }
71
72 //____________________________________________________________________________ 
73 AliEMCALLoader::AliEMCALLoader(const Char_t *detname,const Char_t *eventfoldername):
74   AliLoader(detname,eventfoldername)
75 {
76   fDebug=0;
77   fHits = new TClonesArray("AliEMCALHit");
78   fDigits = new TClonesArray("AliEMCALDigit");
79   fSDigits = new TClonesArray("AliEMCALDigit");
80   fRecPoints = new TObjArray();
81 }
82
83 //____________________________________________________________________________ 
84 AliEMCALLoader::~AliEMCALLoader()
85 {
86   // Disconnect trees and remove arrays
87   if (TreeH())
88     TreeH()->SetBranchAddress(fDetectorName,0);
89   if (TreeD())
90     TreeD()->SetBranchAddress(fDetectorName,0);
91   if (TreeS())
92     TreeS()->SetBranchAddress(fDetectorName,0);
93   if (TreeR())
94     TreeR()->SetBranchAddress(fgkECARecPointsBranchName,0);
95   delete fHits;
96   delete fDigits;
97   delete fSDigits;
98   delete fRecPoints;
99 }
100
101 //____________________________________________________________________________
102 AliEMCALAlignData* AliEMCALLoader::AlignData()
103 {
104   // Check if the instance of AliEMCALAlignData exists, and return it
105   
106   if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) )
107     fAlignData=0x0;
108   return fAlignData;
109 }
110
111 //____________________________________________________________________________ 
112 AliEMCALCalibData* AliEMCALLoader::CalibData()
113
114   // Check if the instance of AliEMCALCalibData exists, and return it
115
116   if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) ) 
117     fCalibData=0x0;
118   
119   return fCalibData;
120   
121 }
122
123 //____________________________________________________________________________ 
124 Int_t AliEMCALLoader::CalibrateRaw(Double_t energy, Int_t module, 
125                                    Int_t column, Int_t row)
126 {
127   // Convert energy into digitized amplitude for a cell relId
128   // It is a user responsilibity to open CDB and set
129   // AliEMCALCalibData object by the following operators:
130   // 
131   // AliCDBLocal *loc = new AliCDBLocal("deCalibDB");
132   // AliEMCALCalibData* clb = (AliEMCALCalibData*)AliCDBStorage::Instance()
133   //    ->Get(path_to_calibdata,run_number);
134   // AliEMCALGetter* gime = AliEMCALGetter::Instance("galice.root");
135   // gime->SetCalibData(clb);
136
137   if (CalibData() == 0)
138     Warning("CalibrateRaw","Calibration DB is not initiated!");
139
140   Float_t gainFactor = 0.00305;//0.0015; // width of one ADC channel in GeV
141   Float_t pedestal   = 0.009;//0.005;  // pedestals
142
143   if(CalibData()) {
144     gainFactor = CalibData()->GetADCchannel (module,column,row);
145     pedestal   = CalibData()->GetADCpedestal(module,column,row);
146   }
147   
148   Int_t   amp = static_cast<Int_t>( (energy - pedestal) / gainFactor + 0.5 ) ; 
149   return amp;
150 }
151
152
153 //____________________________________________________________________________ 
154 Int_t AliEMCALLoader::GetEvent() {
155   AliLoader::GetEvent();  // First call AliLoader to do all the groundwork
156
157   // Now connect and fill TClonesArray
158
159   // Hits
160   TTree *treeH = TreeH();
161   if (treeH) {
162     treeH->SetBranchAddress(fDetectorName,&fHits);
163     if (treeH->GetEntries() > 1)
164       AliWarning("Multiple arrays in treeH no longer supported");
165     treeH->GetEvent(0);
166   }
167
168   // SDigits
169   TTree *treeS = TreeS();
170   if (treeS) {
171     treeS->SetBranchAddress(fDetectorName,&fSDigits);
172     treeS->GetEvent(0);
173   }
174
175   // Digits
176   TTree *treeD = TreeD();
177   if (treeD) {
178     treeD->SetBranchAddress(fDetectorName,&fDigits);
179     treeD->GetEvent(0);
180   }
181
182   // RecPoints
183   TTree *treeR = TreeR();
184   if (treeR) {
185     treeR->SetBranchAddress(fgkECARecPointsBranchName,&fRecPoints);
186     treeR->GetEvent(0);
187   }
188
189   return 0;
190 }