]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EMCAL/AliEMCALCalibAbs.cxx
Removed writing of jets_local.root
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALCalibAbs.cxx
CommitLineData
d81e6423 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// Objects of this class contain basis for absolute calibrations
19//
20
21#include <fstream>
22#include <TString.h>
61917ab3 23#include <TFile.h>
24#include <TTree.h>
d81e6423 25
26#include "AliEMCALCalibAbs.h"
27
28using namespace std;
29
30ClassImp(AliEMCALCalibAbs)
31
32//____________________________________________________________________________
2f17a269 33AliEMCALCalibAbs::AliEMCALCalibAbs(const int nSM) :
34 fNSuperModule(nSM),
35 fSuperModuleData()
d81e6423 36{
37 //Default constructor.
2f17a269 38 for (int i=0; i<fNSuperModule; i++) {
39 fSuperModuleData.Add(new AliEMCALSuperModuleCalibAbs(i));
40 }
41 fSuperModuleData.Compress(); // compress the TObjArray
d81e6423 42}
43
44//____________________________________________________________________________
61917ab3 45void AliEMCALCalibAbs::ReadTextCalibAbsInfo(Int_t nSM, const TString &txtFileName,
46 Bool_t swapSides)
d81e6423 47{
48 //Read data from txt file. ; coordinates given on SuperModule basis
49
50 std::ifstream inputFile(txtFileName.Data());
51 if (!inputFile) {
52 printf("AliEMCALCalibAbs::ReadCalibAbsInfo - Cannot open the APD info file %s\n", txtFileName.Data());
53 return;
54 }
55
56 fNSuperModule = nSM;
d81e6423 57
58 Int_t iSM = 0; // SuperModule index
59 Int_t iCol = 0;
60 Int_t iRow = 0;
61 Int_t id = 0;
62
63 // list of values to be read
64 // first: overall values for the whole SuperModule
65 Int_t CalibMethod;
66 Int_t CalibPass;
67 Int_t CalibTime;
68 Float_t AbsoluteGain;
69 // second: additional info for LED Reference and SM temperature
70 Float_t LEDRefAmp;
71 Float_t LEDRefAmpRMS;
72 Float_t LEDRefHighLowRatio;
73 Int_t LEDRefHighLow;
74 Float_t Temperature;
75 Float_t TemperatureRMS;
76 // third: info for each tower
77 Float_t RelativeGain; // (ADC>GeV relative gain/conversion), value around 1
78 Float_t HighLowRatio; // value around 16 or so
79 Int_t HighLow; //
80 Float_t LEDAmp; // low gain eq. amplitude
81 Float_t LEDAmpRMS; //
82 // end - all values
83
84 Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
85
86 for (Int_t i = 0; i < fNSuperModule; i++) {
2f17a269 87 AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[i];
d81e6423 88 if (!inputFile) {
89 printf("AliEMCALCalibAbs::ReadCalibAbsInfo - Error while reading input file; likely EOF..");
90 return;
91 }
92 inputFile >> iSM;
2f17a269 93 t->SetSuperModuleNum(iSM);
d81e6423 94
95 // first: overall values for the whole SuperModule
96 inputFile >> CalibMethod >> CalibPass >> CalibTime >> AbsoluteGain;
2f17a269 97 t->SetCalibMethod(CalibMethod);
98 t->SetCalibPass(CalibPass);
99 t->SetCalibTime(CalibTime);
100 t->SetAbsoluteGain(AbsoluteGain);
d81e6423 101
102 // second: additional info for LED Reference and SM temperature
103 for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALLEDRefs; j++) {
104 inputFile >> id >> LEDRefAmp >> LEDRefAmpRMS >> LEDRefHighLowRatio >> LEDRefHighLow;
2f17a269 105 t->SetLEDRefAmp(id, LEDRefAmp);
106 t->SetLEDRefAmpRMS(id, LEDRefAmpRMS);
107 t->SetLEDRefHighLowRatio(id, LEDRefHighLowRatio);
108 t->SetLEDRefHighLow(id, LEDRefHighLow);
d81e6423 109 }
110 for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALTempSensors; j++) {
111 inputFile >> id >> Temperature >> TemperatureRMS;
2f17a269 112 t->SetTemperature(id, Temperature);
113 t->SetTemperatureRMS(id, TemperatureRMS);
d81e6423 114 }
115
116 // third: info for each tower
117 for (Int_t j=0; j<nAPDPerSM; j++) {
118 inputFile >> iCol >> iRow
119 >> RelativeGain >> HighLowRatio >> HighLow >> LEDAmp >> LEDAmpRMS;
120
121 // assume that this info is already swapped and done for this basis?
122 if (swapSides) {
123 // C side, oriented differently than A side: swap is requested
124 iCol = AliEMCALGeoParams::fgkEMCALCols-1 - iCol;
125 iRow = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
126 }
127
2f17a269 128 AliEMCALCalibAbsVal * v = t->GetAPDVal(iCol, iRow);
d81e6423 129
2f17a269 130 v->SetRelativeGain(RelativeGain);
131 v->SetHighLowRatio(HighLowRatio);
132 v->SetHighLow(HighLow);
133 v->SetLEDAmp(LEDAmp);
134 v->SetLEDAmpRMS(LEDAmpRMS);
d81e6423 135 }
136
137 } // i, SuperModule
138
139 inputFile.close();
140
141 return;
142}
143
144//____________________________________________________________________________
61917ab3 145void AliEMCALCalibAbs::WriteTextCalibAbsInfo(const TString &txtFileName,
146 Bool_t swapSides)
d81e6423 147{
148 // write data to txt file. ; coordinates given on SuperModule basis
149
150 std::ofstream outputFile(txtFileName.Data());
151 if (!outputFile) {
152 printf("AliEMCALCalibAbs::WriteCalibAbsInfo - Cannot open the APD output file %s\n", txtFileName.Data());
153 return;
154 }
155
156 Int_t iCol = 0;
157 Int_t iRow = 0;
158
159 Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
160
161 for (Int_t i = 0; i < fNSuperModule; i++) {
2f17a269 162 AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[i];
163
d81e6423 164 // first: overall values for the whole SuperModule
2f17a269 165 outputFile << t->GetSuperModuleNum() << endl;
166 outputFile << t->GetCalibMethod() << " "
167 << t->GetCalibPass() << " "
168 << t->GetCalibTime() << " "
169 << t->GetAbsoluteGain() << endl;
d81e6423 170
171 // second: additional info for LED Reference and SM temperature
172 for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALLEDRefs; j++) {
2f17a269 173 outputFile << j << " " << t->GetLEDRefAmp(j) << " " << t->GetLEDRefAmpRMS(j)
174 << " " << t->GetLEDRefHighLowRatio(j) << " " << t->GetLEDRefHighLow(j)
d81e6423 175 << endl;
176 }
177 for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALTempSensors; j++) {
2f17a269 178 outputFile << j << " " << t->GetTemperature(j) << " " << t->GetTemperatureRMS(j) << endl;
d81e6423 179 }
180
61917ab3 181 // third: info for each tower
d81e6423 182 for (Int_t j=0; j<nAPDPerSM; j++) {
183 iCol = j / AliEMCALGeoParams::fgkEMCALRows;
184 iRow = j % AliEMCALGeoParams::fgkEMCALRows;
185
2f17a269 186 AliEMCALCalibAbsVal * v = t->GetAPDVal(iCol, iRow);
d81e6423 187
188 if (swapSides) {
189 // C side, oriented differently than A side: swap is requested
190 iCol = AliEMCALGeoParams::fgkEMCALCols-1 - iCol;
191 iRow = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
192 }
193
194 outputFile << iCol << " " << iRow
2f17a269 195 << " " << v->GetRelativeGain()
196 << " " << v->GetHighLowRatio()
197 << " " << v->GetHighLow()
198 << " " << v->GetLEDAmp()
199 << " " << v->GetLEDAmpRMS() << endl;
d81e6423 200 }
201
202 } // i, SuperModule
203
204 outputFile.close();
205
206 return;
207}
208
61917ab3 209//____________________________________________________________________________
210void AliEMCALCalibAbs::ReadRootCalibAbsInfo(const TString &rootFileName,
211 Bool_t swapSides)
212{
213 //Read data from root file. ; coordinates given on SuperModule basis
214 TFile inputFile(rootFileName, "read");
215
216 TTree *tree = (TTree*) inputFile.Get("tree");
217
218 ReadTreeCalibAbsInfo(tree, swapSides);
219
220 inputFile.Close();
221
222 return;
223}
224
225//____________________________________________________________________________
226void AliEMCALCalibAbs::ReadTreeCalibAbsInfo(TTree *tree,
227 Bool_t swapSides)
228{
229 // how many SuperModule's worth of entries / APDs do we have?
230 Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
231 fNSuperModule = tree->GetEntries() / nAPDPerSM;
232
61917ab3 233 Int_t iSM = 0; // SuperModule index
234 // list of values to be read
235 // first: overall values for the whole SuperModule
236 Int_t CalibMethod;
237 Int_t CalibPass= {0};
238 Int_t CalibTime= {0};
239 Float_t AbsoluteGain= {0};
240 // second: additional info for LED Reference and SM temperature
241 Float_t LEDRefAmp[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
242 Float_t LEDRefAmpRMS[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
243 Float_t LEDRefHighLowRatio[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
244 Int_t LEDRefHighLow[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
245 Float_t Temperature[AliEMCALGeoParams::fgkEMCALTempSensors]= {0};
246 Float_t TemperatureRMS[AliEMCALGeoParams::fgkEMCALTempSensors]= {0};
247 // third: info for each tower
248 Float_t RelativeGain[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
249 Float_t HighLowRatio[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
250 Int_t HighLow[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
251 Float_t LEDAmp[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
252 Float_t LEDAmpRMS[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
253 // end - all values
254
255 // just to make the initializations of the arrays are done correctly, let's use memset
256 memset(LEDRefAmp, 0, sizeof(LEDRefAmp));
257 memset(LEDRefAmpRMS, 0, sizeof(LEDRefAmpRMS));
258 memset(LEDRefHighLowRatio, 0, sizeof(LEDRefHighLowRatio));
259 memset(LEDRefHighLow, 0, sizeof(LEDRefHighLow));
260 memset(Temperature, 0, sizeof(Temperature));
261 memset(TemperatureRMS, 0, sizeof(TemperatureRMS));
262 memset(RelativeGain, 0, sizeof(RelativeGain));
263 memset(HighLowRatio, 0, sizeof(HighLowRatio));
264 memset(HighLow, 0, sizeof(HighLow));
265 memset(LEDAmp, 0, sizeof(LEDAmp));
266 memset(LEDAmpRMS, 0, sizeof(LEDAmpRMS));
267
268 // declare the branches
269 tree->SetBranchAddress("iSM", &iSM);
270 tree->SetBranchAddress("CalibMethod", &CalibMethod);
271 tree->SetBranchAddress("CalibPass", &CalibPass);
272 tree->SetBranchAddress("CalibTime", &CalibTime);
273 tree->SetBranchAddress("AbsoluteGain", &AbsoluteGain);
274 //
275 tree->SetBranchAddress("LEDRefAmp", LEDRefAmp);
276 tree->SetBranchAddress("LEDRefAmpRMS", LEDRefAmpRMS);
277 tree->SetBranchAddress("LEDRefHighLowRatio", LEDRefHighLowRatio);
278 tree->SetBranchAddress("LEDRefHighLow", LEDRefHighLow);
279 tree->SetBranchAddress("Temperature", Temperature);
280 tree->SetBranchAddress("TemperatureRMS", TemperatureRMS);
281 //
282 tree->SetBranchAddress("RelativeGain", RelativeGain);
283 tree->SetBranchAddress("HighLowRatio", HighLowRatio);
284 tree->SetBranchAddress("HighLow", HighLow);
285 tree->SetBranchAddress("LEDAmp", LEDAmp);
286 tree->SetBranchAddress("LEDAmpRMS", LEDAmpRMS);
287
288 // indices for looping over the towers
289 Int_t iCol = 0;
290 Int_t iRow = 0;
291
292 for (int ient=0; ient<tree->GetEntries(); ient++) {
293 tree->GetEntry(ient);
294
295 // assume the index SuperModules come in order: i=iSM
2f17a269 296 AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[iSM];
297
298 t->SetSuperModuleNum(iSM);
61917ab3 299 // first, overall values
2f17a269 300 t->SetCalibMethod(CalibMethod);
301 t->SetCalibPass(CalibPass);
302 t->SetCalibTime(CalibTime);
303 t->SetAbsoluteGain(AbsoluteGain);
61917ab3 304
305 // second: additional info for LED references and SM temperatures
306 for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALLEDRefs; j++) {
2f17a269 307 t->SetLEDRefAmp(j, LEDRefAmp[j]);
308 t->SetLEDRefAmpRMS(j, LEDRefAmpRMS[j]);
309 t->SetLEDRefHighLowRatio(j, LEDRefHighLowRatio[j]);
310 t->SetLEDRefHighLow(j, LEDRefHighLow[j]);
61917ab3 311 }
312 for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALTempSensors; j++) {
2f17a269 313 t->SetTemperature(j, Temperature[j]);
314 t->SetTemperatureRMS(j, TemperatureRMS[j]);
61917ab3 315 }
316
317 // third: info for each tower
318 for (Int_t j=0; j<nAPDPerSM; j++) {
319 iCol = j / AliEMCALGeoParams::fgkEMCALRows;
320 iRow = j % AliEMCALGeoParams::fgkEMCALRows;
321
322 // help variables: possibly modified or swapped indices
323 int iColMod = iCol;
324 int iRowMod = iRow;
325 // assume that this info is already swapped and done for this basis?
326 if (swapSides) {
327 // C side, oriented differently than A side: swap is requested
328 iColMod = AliEMCALGeoParams::fgkEMCALCols-1 - iCol;
329 iRowMod = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
330 }
331
2f17a269 332 AliEMCALCalibAbsVal * v = t->GetAPDVal(iCol, iRow);
61917ab3 333
2f17a269 334 v->SetRelativeGain(RelativeGain[iCol][iRow]);
335 v->SetHighLowRatio(HighLowRatio[iCol][iRow]);
336 v->SetHighLow(HighLow[iCol][iRow]);
337 v->SetLEDAmp(LEDAmp[iCol][iRow]);
338 v->SetLEDAmpRMS(LEDAmpRMS[iCol][iRow]);
61917ab3 339 }
340
341 } // loop over entries
342
343 return;
344}
345
346//____________________________________________________________________________
347void AliEMCALCalibAbs::WriteRootCalibAbsInfo(const TString &rootFileName,
348 Bool_t swapSides)
349{
350 // write data to root file. ; coordinates given on SuperModule basis
351 TFile destFile(rootFileName, "recreate");
352 if (destFile.IsZombie()) {
353 return;
354 }
355 destFile.cd();
356
357 TTree *tree = new TTree("tree","");
358
359 // variables for filling the TTree
360 Int_t iSM = 0; // SuperModule index
361 // list of values to be written
362 // first: overall values for the whole SuperModule
363 Int_t CalibMethod = 0;
364 Int_t CalibPass = 0;
365 Int_t CalibTime = 0;
366 Float_t AbsoluteGain = 0;
367 // second: additional info for LED Reference and SM temperature
368 Float_t LEDRefAmp[AliEMCALGeoParams::fgkEMCALLEDRefs] = {0};
369 Float_t LEDRefAmpRMS[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
370 Float_t LEDRefHighLowRatio[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
371 Int_t LEDRefHighLow[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
372 Float_t Temperature[AliEMCALGeoParams::fgkEMCALTempSensors]= {0};
373 Float_t TemperatureRMS[AliEMCALGeoParams::fgkEMCALTempSensors]= {0};
374 // third: info for each tower
375 Float_t RelativeGain[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
376 Float_t HighLowRatio[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
377 Int_t HighLow[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
378 Float_t LEDAmp[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
379 Float_t LEDAmpRMS[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
380 // end - all values
381
382 // just to make the initializations of the arrays are done correctly, let's use memset
383 memset(LEDRefAmp, 0, sizeof(LEDRefAmp));
384 memset(LEDRefAmpRMS, 0, sizeof(LEDRefAmpRMS));
385 memset(LEDRefHighLowRatio, 0, sizeof(LEDRefHighLowRatio));
386 memset(LEDRefHighLow, 0, sizeof(LEDRefHighLow));
387 memset(Temperature, 0, sizeof(Temperature));
388 memset(TemperatureRMS, 0, sizeof(TemperatureRMS));
389 memset(RelativeGain, 0, sizeof(RelativeGain));
390 memset(HighLowRatio, 0, sizeof(HighLowRatio));
391 memset(HighLow, 0, sizeof(HighLow));
392 memset(LEDAmp, 0, sizeof(LEDAmp));
393 memset(LEDAmpRMS, 0, sizeof(LEDAmpRMS));
394
395 Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
396 // for looping over towers
397 Int_t iCol = 0;
398 Int_t iRow = 0;
399
400 // declare the branches
401 // first
402 tree->Branch("iSM", &iSM, "iSM/I");
403 tree->Branch("CalibMethod", &CalibMethod, "CalibMethod/I");
404 tree->Branch("CalibPass", &CalibPass, "CalibPass/I");
405 tree->Branch("CalibTime", &CalibTime, "CalibTime/I");
406 tree->Branch("AbsoluteGain", &AbsoluteGain, "AbsoluteGain/F");
407 // second
408 tree->Branch( "LEDRefAmp", &LEDRefAmp, Form("LEDRefAmp[%d]/F", AliEMCALGeoParams::fgkEMCALLEDRefs) );
409 tree->Branch( "LEDRefAmpRMS", &LEDRefAmpRMS, Form("LEDRefAmpRMS[%d]/F", AliEMCALGeoParams::fgkEMCALLEDRefs) );
410 tree->Branch( "LEDRefHighLowRatio", &LEDRefHighLowRatio, Form("LEDRefHighLowRatio[%d]/F", AliEMCALGeoParams::fgkEMCALLEDRefs) );
411 tree->Branch( "LEDRefHighLow", &LEDRefHighLow, Form("LEDRefHighLow[%d]/I", AliEMCALGeoParams::fgkEMCALLEDRefs) );
412 tree->Branch( "Temperature", &Temperature, Form("Temperature[%d]/F", AliEMCALGeoParams::fgkEMCALTempSensors) );
413 tree->Branch( "TemperatureRMS", &TemperatureRMS, Form("TemperatureRMS[%d]/F", AliEMCALGeoParams::fgkEMCALTempSensors) );
414 // third: info for each tower; see if a 2D array works OK or if we'll have to use 1D arrays instead
415 tree->Branch( "RelativeGain", &RelativeGain, Form("RelativeGain[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
416 tree->Branch( "HighLowRatio", &HighLowRatio, Form("HighLowRatio[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
417 tree->Branch( "HighLow", &HighLow, Form("HighLow[%d][%d]/I", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
418 tree->Branch( "LEDAmp", &LEDAmp, Form("LEDAmp[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
419 tree->Branch( "LEDAmpRMS", &LEDAmpRMS, Form("LEDAmpRMS[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
420
421 for (iSM = 0; iSM < fNSuperModule; iSM++) {
2f17a269 422 AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[iSM];
61917ab3 423
2f17a269 424 iSM = t->GetSuperModuleNum();
61917ab3 425 // first, overall values
2f17a269 426 CalibMethod = t->GetCalibMethod();
427 CalibPass = t->GetCalibPass();
428 CalibTime = t->GetCalibTime();
429 AbsoluteGain = t->GetAbsoluteGain();
61917ab3 430
431 // second: additional info for LED references and SM temperatures
432 for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALLEDRefs; j++) {
2f17a269 433 LEDRefAmp[j] = t->GetLEDRefAmp(j);
434 LEDRefAmpRMS[j] = t->GetLEDRefAmpRMS(j);
435 LEDRefHighLowRatio[j] = t->GetLEDRefHighLowRatio(j);
436 LEDRefHighLow[j] = t->GetLEDRefHighLow(j);
61917ab3 437 }
438 for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALTempSensors; j++) {
2f17a269 439 Temperature[j] = t->GetTemperature(j);
440 TemperatureRMS[j] = t->GetTemperatureRMS(j);
61917ab3 441 }
442
443 // third: info for each tower
444 for (Int_t j=0; j<nAPDPerSM; j++) {
445 iCol = j / AliEMCALGeoParams::fgkEMCALRows;
446 iRow = j % AliEMCALGeoParams::fgkEMCALRows;
447
448 // help variables: possibly modified or swapped indices
449 int iColMod = iCol;
450 int iRowMod = iRow;
451 // assume that this info is already swapped and done for this basis?
452 if (swapSides) {
453 // C side, oriented differently than A side: swap is requested
454 iColMod = AliEMCALGeoParams::fgkEMCALCols-1 - iCol;
455 iRowMod = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
456 }
457
2f17a269 458 AliEMCALCalibAbsVal * v = t->GetAPDVal(iCol, iRow);
61917ab3 459
2f17a269 460 RelativeGain[iCol][iRow] = v->GetRelativeGain();
461 HighLowRatio[iCol][iRow] = v->GetHighLowRatio();
462 HighLow[iCol][iRow] = v->GetHighLow();
463 LEDAmp[iCol][iRow] = v->GetLEDAmp();
464 LEDAmpRMS[iCol][iRow] = v->GetLEDAmpRMS();
61917ab3 465 }
466
467 tree->Fill();
468 } // i, SuperModule
469
470 tree->Write();
471 destFile.Close();
472
473 return;
474}
475
d81e6423 476//____________________________________________________________________________
477AliEMCALCalibAbs::~AliEMCALCalibAbs()
478{
2f17a269 479 fSuperModuleData.Delete();
d81e6423 480}
481
482//____________________________________________________________________________
2f17a269 483AliEMCALSuperModuleCalibAbs * AliEMCALCalibAbs::GetSuperModuleCalibAbsNum(Int_t supModIndex)const
d81e6423 484{
d81e6423 485 for (int i=0; i<fNSuperModule; i++) {
2f17a269 486 AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[i];
487 if (t->GetSuperModuleNum() == supModIndex) {
488 return t;
d81e6423 489 }
490 }
491
2f17a269 492 // if we arrived here, then nothing was found.. just return a NULL pointer
493 return NULL;
d81e6423 494}
495