88cb7938 |
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$ */ |
88cb7938 |
17 | |
18 | //_________________________________________________________________________ |
19 | // A singleton. This class should be used in the analysis stage to get |
20 | // reconstructed objects: Digits, RecPoints, TrackSegments and RecParticles, |
5dee926e |
21 | // instead of directly reading them from galice.root file. |
88cb7938 |
22 | // |
5dee926e |
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 | // |
88cb7938 |
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 |
5dee926e |
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 | // |
88cb7938 |
40 | ////////////////////////////////////////////////////////////////////////////// |
41 | |
42 | |
43 | // --- ROOT system --- |
44 | |
88cb7938 |
45 | #include "TTree.h" |
88cb7938 |
46 | |
47 | // --- Standard library --- |
88cb7938 |
48 | |
49 | // --- AliRoot header files --- |
a9bbb414 |
50 | #include "AliEMCALLoader.h" |
51 | #include "AliLog.h" |
f565d89d |
52 | #include "AliCDBLocal.h" |
53 | #include "AliCDBStorage.h" |
54 | #include "AliCDBManager.h" |
88cb7938 |
55 | |
56 | ClassImp(AliEMCALLoader) |
d64c959b |
57 | |
88cb7938 |
58 | const TString AliEMCALLoader::fgkECARecPointsBranchName("EMCALECARP");//Name for branch with ECA Reconstructed Points |
f565d89d |
59 | AliEMCALCalibData* AliEMCALLoader::fCalibData = 0; //calibation data |
bcdecbbe |
60 | AliEMCALAlignData* AliEMCALLoader::fAlignData = 0; //alignment data |
d64c959b |
61 | |
88cb7938 |
62 | //____________________________________________________________________________ |
63 | AliEMCALLoader::AliEMCALLoader() |
d64c959b |
64 | { |
88cb7938 |
65 | fDebug = 0; |
5dee926e |
66 | fHits = new TClonesArray("AliEMCALHit"); |
67 | fDigits = new TClonesArray("AliEMCALDigit"); |
68 | fSDigits = new TClonesArray("AliEMCALDigit"); |
69 | fRecPoints = new TObjArray(); |
d64c959b |
70 | } |
71 | |
88cb7938 |
72 | //____________________________________________________________________________ |
73 | AliEMCALLoader::AliEMCALLoader(const Char_t *detname,const Char_t *eventfoldername): |
d64c959b |
74 | AliLoader(detname,eventfoldername) |
88cb7938 |
75 | { |
76 | fDebug=0; |
5dee926e |
77 | fHits = new TClonesArray("AliEMCALHit"); |
78 | fDigits = new TClonesArray("AliEMCALDigit"); |
79 | fSDigits = new TClonesArray("AliEMCALDigit"); |
80 | fRecPoints = new TObjArray(); |
88cb7938 |
81 | } |
88cb7938 |
82 | |
d64c959b |
83 | //____________________________________________________________________________ |
88cb7938 |
84 | AliEMCALLoader::~AliEMCALLoader() |
85 | { |
5dee926e |
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 | |
bcdecbbe |
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 | |
5dee926e |
111 | //____________________________________________________________________________ |
f565d89d |
112 | AliEMCALCalibData* AliEMCALLoader::CalibData() |
113 | { |
bcdecbbe |
114 | // Check if the instance of AliEMCALCalibData exists, and return it |
f565d89d |
115 | |
78cbbabb |
116 | if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) ) |
f565d89d |
117 | fCalibData=0x0; |
78cbbabb |
118 | |
119 | return fCalibData; |
120 | |
f565d89d |
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 | |
78cbbabb |
140 | Float_t gainFactor = 0.00305;//0.0015; // width of one ADC channel in GeV |
141 | Float_t pedestal = 0.009;//0.005; // pedestals |
f565d89d |
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 | //____________________________________________________________________________ |
5dee926e |
154 | Int_t AliEMCALLoader::GetEvent() { |
155 | AliLoader::GetEvent(); // First call AliLoader to do all the groundwork |
156 | |
5dee926e |
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) |
40b572fb |
164 | AliWarning("Multiple arrays in treeH no longer supported"); |
5dee926e |
165 | treeH->GetEvent(0); |
88cb7938 |
166 | } |
88cb7938 |
167 | |
5dee926e |
168 | // SDigits |
169 | TTree *treeS = TreeS(); |
170 | if (treeS) { |
171 | treeS->SetBranchAddress(fDetectorName,&fSDigits); |
172 | treeS->GetEvent(0); |
173 | } |
88cb7938 |
174 | |
5dee926e |
175 | // Digits |
176 | TTree *treeD = TreeD(); |
177 | if (treeD) { |
178 | treeD->SetBranchAddress(fDetectorName,&fDigits); |
179 | treeD->GetEvent(0); |
180 | } |
88cb7938 |
181 | |
5dee926e |
182 | // RecPoints |
183 | TTree *treeR = TreeR(); |
184 | if (treeR) { |
185 | treeR->SetBranchAddress(fgkECARecPointsBranchName,&fRecPoints); |
186 | treeR->GetEvent(0); |
187 | } |
88cb7938 |
188 | |
5dee926e |
189 | return 0; |
88cb7938 |
190 | } |