ATLAS Offline Software
TileEMScale.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Tile includes
6 #include <cmath>
7 
11 
12 
13 //
14 //____________________________________________________________________
16  m_onlCacheUnit( TileRawChannelUnit::Invalid),
17  m_onlCache(std::vector<float>(0)),
18  m_isOflLasLinUsed(true),
19  m_isOflLasNlnUsed(true),
20  m_useOflLasFib(false),
21  m_maxChannels(0),
22  m_maxGains(0),
23  m_drawerCacheSize(0)
24 {
25 
26 }
27 
28 //
29 //____________________________________________________________________
31 }
32 
33 //
34 //____________________________________________________________________
36 
37  m_useOflLasFib = (m_calibOflLasFib != nullptr);
40 
43 
46 
48  }
49 
50  return true;
51 }
52 
53 
54 //
55 //____________________________________________________________________
57 
58  //=== recalculate online cache
59  for (unsigned int drawerIdx = 0; drawerIdx < TileCalibUtils::MAX_DRAWERIDX; ++ drawerIdx) {
60  for (unsigned int channel = 0; channel < m_maxChannels; ++channel) {
61  for (unsigned int adc = 0; adc < m_maxGains; ++adc) {
63  }
64  }
65  }
66 
67 }
68 
69 //
70 //____________________________________________________________________
71 float TileEMScale::getOnlineCalibration(unsigned int drawerIdx, unsigned int channel,
72  unsigned int adc, TileRawChannelUnit::UNIT onlUnit) const {
73 
74  float onlCalib(1.);
75  //=== CIS calibration
77  onlCalib = m_calibOnlCis->getCalibDrawer(drawerIdx)->getCalib(channel, adc, onlCalib);
78 
79  //=== LAS+CES calibration
81  onlCalib = m_calibOnlLas->getCalibDrawer(drawerIdx)->getCalib(channel, adc, onlCalib);
82  onlCalib = m_calibOnlCes->getCalibDrawer(drawerIdx)->getCalib(channel, adc, onlCalib);
83  }
84  //=== EMSCALE calibration
86  onlCalib = m_calibOnlEms->getCalibDrawer(drawerIdx)->getCalib(channel, adc, onlCalib);
87  }
88  }
89  //=== Convert float to 16 bit fixed point DSP precision
90  onlCalib = TileCalibUtils::fixedPointPrecision(onlCalib);
91 
92  return onlCalib;
93 }
94 
95 //
96 //____________________________________________________________________
97 float TileEMScale::undoOnlineChannelCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
98  float amplitude, TileRawChannelUnit::UNIT onlUnit) const {
99 
100  //=== Check if online folders are available
102  throw TileCalib::InvalidRawChanUnit("TileCalibEms::channelCalib(onl)", onlUnit);
103  }
104 
105  //=== Check for valid unit request
108  throw TileCalib::InvalidRawChanUnit("TileCalibEms::channelCalib(onl)", onlUnit);
109  }
110 
111  float onlCalib(0.);
112  //=== Look up total calib constant in cache if possible ...
113  if (onlUnit == m_onlCacheUnit) {
114  unsigned int idx = getCacheIndex(drawerIdx, channel, adc);
115  if (idx >= m_onlCache.size()) {
116  throw TileCalib::IndexOutOfRange("TileCalibEms::undoOnlineCalib", idx, m_onlCache.size());
117  }
118 
119  onlCalib = m_onlCache[idx];
120  } else { //=== ... otherwise compute on the fly
121 
122  onlCalib = getOnlineCalibration(drawerIdx, channel, adc, onlUnit);
123 
124  }
125 
126  //=== Sanity check
127  if (onlCalib == 0.) {
128  throw TileCalib::InvalidValue("TileCalibEms::undoOnlCalib", onlCalib);
129  }
130 
131  return amplitude / onlCalib;
132 }
133 
134 //
135 //____________________________________________________________________
136 float TileEMScale::calibrateChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
137  float amplitude, TileRawChannelUnit::UNIT rawDataUnitIn,
138  TileRawChannelUnit::UNIT rawDataUnitOut) const {
139 
140  //=== Undo online calibration, result is offline ADC counts
141  if (rawDataUnitIn >= TileRawChannelUnit::OnlineADCcounts) {
142  if (rawDataUnitIn > TileRawChannelUnit::OnlineMegaElectronVolts) {
143  throw TileCalib::InvalidRawChanUnit("TileCalibEms::channelCalib(onl)", rawDataUnitIn);
144  } else if (rawDataUnitIn > TileRawChannelUnit::OnlineADCcounts) {
145  amplitude = undoOnlineChannelCalibration(drawerIdx, channel, adc, amplitude, rawDataUnitIn);
146  }
147  rawDataUnitIn = TileRawChannelUnit::ADCcounts;
148  }
149 
150  //=== Allow only "forward" calibration from here on
151  if (rawDataUnitOut < rawDataUnitIn || rawDataUnitOut > TileRawChannelUnit::MegaElectronVolts) {
152  throw TileCalib::InvalidRawChanUnit("TileCalibEms::channelCalib(out)", rawDataUnitOut);
153  }
154 
155  //=== decide which calibrations to apply
156  switch (rawDataUnitIn) {
157 
160  if (rawDataUnitOut > TileRawChannelUnit::ADCcounts) {
161  amplitude = applyChargeCalibration(drawerIdx, channel, adc, amplitude);
162  if (rawDataUnitOut > TileRawChannelUnit::PicoCoulombs) {
163  amplitude = applyLaserCalibration(drawerIdx, channel, amplitude);
164  amplitude = applyCesiumCalibration(drawerIdx, channel, amplitude);
165  if (rawDataUnitOut > TileRawChannelUnit::CesiumPicoCoulombs) {
166  amplitude = applyEMScaleCalibration(drawerIdx, channel, amplitude);
167  }
168  }
169  }
170  break;
171 
173  if (rawDataUnitOut > TileRawChannelUnit::PicoCoulombs) {
174  amplitude = applyLaserCalibration(drawerIdx, channel, amplitude);
175  amplitude = applyCesiumCalibration(drawerIdx, channel, amplitude);
176  if (rawDataUnitOut > TileRawChannelUnit::CesiumPicoCoulombs) {
177  amplitude = applyEMScaleCalibration(drawerIdx, channel, amplitude);
178  }
179  }
180  break;
181 
183  if (rawDataUnitOut > TileRawChannelUnit::CesiumPicoCoulombs) {
184  amplitude = applyEMScaleCalibration(drawerIdx, channel, amplitude);
185  }
186  break;
187 
189  break;
190 
191  default:
192  throw TileCalib::InvalidRawChanUnit("TileCalibEms::channelCalib", rawDataUnitIn);
193 
194  }
195 
196  return amplitude;
197 }
198 
199 //
200 //____________________________________________________________________
201 float TileEMScale::applyEMScaleCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const {
202 
203  return m_calibOflEms->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
204 }
205 
206 //
207 //____________________________________________________________________
208 float TileEMScale::applyCesiumCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude, bool applyLasCorr) const {
209 
210  amplitude = m_calibOflCes->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
211 
212  if (applyLasCorr) {
213  //=== At some point a correction relative to the mono-energy laser reference
214  //=== taken with each Cesium calibration run needs to be implemented here.
215  }
216 
217  return amplitude;
218 }
219 
220 //
221 //____________________________________________________________________
222 float TileEMScale::applyLaserCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const {
223 
224  //=== Linear correction
225  if (m_isOflLasLinUsed) {
226  amplitude = m_calibOflLasLin->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
227  }
228 
229  //=== Non-linear correction
230  if (m_isOflLasNlnUsed) {
231  amplitude = m_calibOflLasNln->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
232  }
233 
234  return amplitude;
235 }
236 
237 //
238 //____________________________________________________________________
239 float TileEMScale::applyLaserLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const {
240 
241  //=== Linear correction
242  if (m_isOflLasLinUsed) {
243  amplitude = m_calibOflLasLin->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
244  }
245 
246  return amplitude;
247 }
248 
249 //
250 //____________________________________________________________________
251 float TileEMScale::applyLaserNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const {
252 
253  //=== Non-linear correction
254  if (m_isOflLasNlnUsed) {
255  amplitude = m_calibOflLasNln->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
256  }
257 
258  return amplitude;
259 }
260 
261 
262 //
263 //____________________________________________________________________
264 float TileEMScale::applyChargeCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const {
265 
266  //=== Linear correction
267  amplitude = m_calibOflCisLin->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
268 
269  //=== Non-linear correction
270  return m_calibOflCisNln->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
271 }
272 
273 //
274 //____________________________________________________________________
275 float TileEMScale::applyChargLinearCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const {
276 
277  //=== Linear correction
278  return m_calibOflCisLin->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
279 
280 }
281 
282 //
283 //____________________________________________________________________
284 float TileEMScale::applyChargeNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const {
285 
286  //=== Non-linear correction
287  return m_calibOflCisNln->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
288 }
289 
290 //
291 //____________________________________________________________________
292 float TileEMScale::calibrateOnlineChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
293  float amplitude, TileRawChannelUnit::UNIT onlUnit) const {
294 
295  //=== CIS calibration
296  if (onlUnit > TileRawChannelUnit::OnlineADCcounts) {
297  amplitude = m_calibOnlCis->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
298 
299  //=== LAS+CES calibration
301  amplitude = m_calibOnlLas->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
302  amplitude = m_calibOnlCes->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
303  }
304 
305  //=== EMSCALE calibration
307  amplitude = m_calibOnlEms->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
308  }
309  }
310 
311  //=== convert float to 16 bit fixed point DSP precision
312  amplitude = TileCalibUtils::fixedPointPrecision(amplitude);
313 
314  return amplitude;
315 
316 }
317 
318 //
319 //____________________________________________________________________
320 float TileEMScale::applyOnlineEMScaleCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const {
321 
322  return m_calibOnlEms->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
323 }
324 
325 //
326 //____________________________________________________________________
327 float TileEMScale::applyOnlineCesiumCalibration(unsigned int drawerIdx, unsigned int channel,
328  float amplitude, bool applyLasCorr) const {
329 
330  amplitude = m_calibOnlCes->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
331  if (applyLasCorr) {
332  //=== At some point a correction relative to the mono-energy laser reference
333  //=== taken with each Cesium calibration run needs to be implemented here.
334  }
335 
336  return amplitude;
337 }
338 
339 //
340 //____________________________________________________________________
341 float TileEMScale::applyOnlineLaserCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const {
342 
343  //=== Linear correction only
344  return m_calibOnlLas->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
345 }
346 
347 //
348 //____________________________________________________________________
349 float TileEMScale::applyOnlineChargeCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const {
350 
351 
352  //=== Linear correction only
353  return m_calibOnlCis->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
354 }
355 
356 //
357 //____________________________________________________________________
358 float TileEMScale::getCesiumReferenceLaserGain(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const {
359 
360  return m_calibOflCes->getCalibDrawer(drawerIdx)->getData(channel, adc, 1);
361 }
362 
363 //
364 //____________________________________________________________________
365 float TileEMScale::getCesiumReferenceHV(unsigned int drawerIdx, unsigned int channel) const {
366 
367  return m_calibOflCes->getCalibDrawer(drawerIdx)->getData(channel, 0, 2);
368 }
369 
370 //
371 //____________________________________________________________________
372 float TileEMScale::getCesiumReferenceTemperature(unsigned int drawerIdx, unsigned int channel) const {
373 
374  return m_calibOflCes->getCalibDrawer(drawerIdx)->getData(channel, 0, 3);
375 }
376 
377 //
378 //____________________________________________________________________
379 float TileEMScale::getLaserFiberVariation(unsigned int drawerIdx, unsigned int channel) const {
380 
381  return m_calibOflLasFib->getCalibDrawer(drawerIdx)->getData(channel, 0, 0);
382 }
383 
384 //
385 //____________________________________________________________________
386 float TileEMScale::getLaserPartitionVariation(unsigned int drawerIdx) const {
387 
388  unsigned int firstDrawerIdx = TileCalibUtils::getFirstDrawerInPartitionIdx(drawerIdx);
389  return m_calibOflLasFib->getCalibDrawer(firstDrawerIdx)->getData( TileCalibUtils::LAS_PART_CHAN, 0, 0);
390 }
391 
392 //
393 //____________________________________________________________________
394 float TileEMScale::getLaserReferenceHV(unsigned int drawerIdx, unsigned int channel) const {
395 
396  float val = -4.;
397 
398  const TileCalibDrawerFlt* calibDrawer = m_calibOflLasLin->getCalibDrawer(drawerIdx);
399  int size = calibDrawer->getObjSizeUint32();
400  if (size > 1) {
401  val = m_calibOflLasLin->getCalibDrawer(drawerIdx)->getData(channel, 0, 1);
402  }
403 
404  return val;
405 }
406 //
407 
408 void TileEMScale::setCalibOflCisLin(std::unique_ptr<TileCalibDataFlt> calibData) {
409  m_calibOflCisLin = std::move(calibData);
410 }
411 
412 void TileEMScale::setCalibOflCisNln(std::unique_ptr<TileCalibDataFlt> calibData) {
413  m_calibOflCisNln = std::move(calibData);
414 }
415 
416 void TileEMScale::setCalibOflLasLin(std::unique_ptr<TileCalibDataFlt> calibData) {
417  m_calibOflLasLin = std::move(calibData);
418 }
419 
420 void TileEMScale::setCalibOflLasNln(std::unique_ptr<TileCalibDataFlt> calibData) {
421  m_calibOflLasNln = std::move(calibData);
422 }
423 
424 void TileEMScale::setCalibOflLasFib(std::unique_ptr<TileCalibDataFlt> calibData) {
425  m_calibOflLasFib = std::move(calibData);
426 }
427 
428 void TileEMScale::setCalibOflCes(std::unique_ptr<TileCalibDataFlt> calibData) {
429  m_calibOflCes = std::move(calibData);
430 }
431 
432 void TileEMScale::setCalibOflEms(std::unique_ptr<TileCalibDataFlt> calibData) {
433  m_calibOflEms = std::move(calibData);
434 }
435 
436 
437 void TileEMScale::setCalibOnlCis(std::unique_ptr<TileCalibDataFlt> calibData) {
438  m_calibOnlCis = std::move(calibData);
439 }
440 
441 void TileEMScale::setCalibOnlLas(std::unique_ptr<TileCalibDataFlt> calibData) {
442  m_calibOnlLas = std::move(calibData);
443 }
444 
445 void TileEMScale::setCalibOnlCes(std::unique_ptr<TileCalibDataFlt> calibData) {
446  m_calibOnlCes = std::move(calibData);
447 }
448 
449 void TileEMScale::setCalibOnlEms(std::unique_ptr<TileCalibDataFlt> calibData) {
450  m_calibOnlEms = std::move(calibData);
451 }
452 
453 
455 
456  const float defval = 1.0;
457  const float epsilon = defval * m_epsilon;
458  float val(defval);
459  for (unsigned int drawerIdx = 0; drawerIdx < TileCalibUtils::MAX_DRAWERIDX; ++drawerIdx) {
460  for (unsigned int chn = 0; chn < TileCalibUtils::MAX_CHAN; ++chn) {
461  val = m_calibOflLasLin->getCalibDrawer(drawerIdx)->getCalib(chn, 0, defval);
462  if (std::abs(val - defval) > epsilon) {
463  return true;
464  }
465  }
466  }
467 
468  return false;
469 }
470 
472 
473  const float defval = 100.0;
474  const float epsilon = defval * m_epsilon;
475  float val(defval);
476 
477  for (unsigned int drawerIdx = 0; drawerIdx < TileCalibUtils::MAX_DRAWERIDX; ++drawerIdx) {
478  for (unsigned int chn = 0; chn < TileCalibUtils::MAX_CHAN; ++chn) {
479  val = m_calibOflLasNln->getCalibDrawer(drawerIdx)->getCalib(chn, 0, defval);
480  if (std::abs(val - defval) > epsilon) {
481  return true;
482  }
483  }
484  }
485 
486  return false;
487 }
TileEMScale::setCalibOnlLas
void setCalibOnlLas(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:441
TileEMScale::m_onlCache
std::vector< float > m_onlCache
Definition: TileEMScale.h:401
TileCalibDrawerFlt
Generic class for storing a number of floats (Flt) for each channel or ADC.
Definition: TileCalibDrawerFlt.h:27
TileRawChannelUnit
Definition: TileRawChannelUnit.h:13
TileEMScale::m_onlCacheUnit
TileRawChannelUnit::UNIT m_onlCacheUnit
Definition: TileEMScale.h:400
TileEMScale::getCesiumReferenceTemperature
float getCesiumReferenceTemperature(unsigned int drawerIdx, unsigned int channel) const
Return the drawer temperature as measured during last cesium equalization.
Definition: TileEMScale.cxx:372
TileEMScale::checkIfOflLaserLinearCalibrationUsed
bool checkIfOflLaserLinearCalibrationUsed() const
Check if offline linear laser calibration will be used.
Definition: TileEMScale.cxx:454
TileEMScale::applyOnlineCesiumCalibration
float applyOnlineCesiumCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude, bool applyLasCorr=true) const
Apply online cesium calibration constant.
Definition: TileEMScale.cxx:327
TileEMScale::setCalibOnlEms
void setCalibOnlEms(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:449
TileEMScale.h
TileCalib::IndexOutOfRange
Thrown if an index is out of range.
Definition: TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/Exception.h:141
TileEMScale::m_calibOnlLas
std::unique_ptr< TileCalibDataFlt > m_calibOnlLas
Definition: TileEMScale.h:418
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
TileEMScale::m_isOflLasLinUsed
bool m_isOflLasLinUsed
Definition: TileEMScale.h:403
TileEMScale::getCesiumReferenceLaserGain
float getCesiumReferenceLaserGain(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const
Return the PMT gain reference as measured by the laser system.
Definition: TileEMScale.cxx:358
TileEMScale::applyOnlineEMScaleCalibration
float applyOnlineEMScaleCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Calibrate online chnnel to EM scale: Equalized pC -> MeV.
Definition: TileEMScale.cxx:320
TileCalib::InvalidRawChanUnit
Signals invalid use of TileRawChannelUnit.
Definition: TileCalorimeter/TileConditions/TileConditions/Exception.h:20
TileEMScale::getOnlineCalibration
float getOnlineCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, TileRawChannelUnit::UNIT onlUnit) const
Return the calibration constant applied in the DSP.
Definition: TileEMScale.cxx:71
TileCalibUtils::MAX_DRAWERIDX
static const unsigned int MAX_DRAWERIDX
Maximal drawer index
Definition: TileCalibUtils.h:143
TileEMScale::TileEMScale
TileEMScale()
Definition: TileEMScale.cxx:15
TileCalibUtils::getFirstDrawerInPartitionIdx
static unsigned int getFirstDrawerInPartitionIdx(unsigned int drawerIdx)
Returns the first drawer Idx in a partition of a given input drawer.
Definition: TileCalibUtils.cxx:253
TileRawChannelUnit::CesiumPicoCoulombs
@ CesiumPicoCoulombs
Definition: TileRawChannelUnit.h:19
TileEMScale::m_maxGains
unsigned int m_maxGains
Definition: TileEMScale.h:425
TileEMScale::applyLaserCalibration
float applyLaserCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply laser correction.
Definition: TileEMScale.cxx:222
TileEMScale::applyChargeNonLinearCalibration
float applyChargeNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const
Apply CIS non-linear calibration: ADC counts -> pC.
Definition: TileEMScale.cxx:284
TileEMScale::setCalibOflCes
void setCalibOflCes(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:428
TileEMScale::m_calibOnlCis
std::unique_ptr< TileCalibDataFlt > m_calibOnlCis
Definition: TileEMScale.h:417
TileEMScale::applyChargLinearCalibration
float applyChargLinearCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const
Apply CIS linear calibration: ADC counts -> pC.
Definition: TileEMScale.cxx:275
TileCalibUtils.h
TileEMScale::applyOnlineLaserCalibration
float applyOnlineLaserCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply online laser (PMT linearity) correction.
Definition: TileEMScale.cxx:341
TileRawChannelUnit::OnlineADCcounts
@ OnlineADCcounts
Definition: TileRawChannelUnit.h:21
TileEMScale::m_drawerCacheSize
unsigned int m_drawerCacheSize
Definition: TileEMScale.h:426
TileRawChannelUnit::PicoCoulombs
@ PicoCoulombs
Definition: TileRawChannelUnit.h:18
TileEMScale::setCalibOflCisNln
void setCalibOflCisNln(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:412
TileEMScale::m_calibOnlCes
std::unique_ptr< TileCalibDataFlt > m_calibOnlCes
Definition: TileEMScale.h:419
TileRawChannelUnit::OnlinePicoCoulombs
@ OnlinePicoCoulombs
Definition: TileRawChannelUnit.h:22
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TileEMScale::calibrateChannel
float calibrateChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude, TileRawChannelUnit::UNIT rawDataUnitIn, TileRawChannelUnit::UNIT rawDataUnitOut) const
Calibrate a Tile channel.
Definition: TileEMScale.cxx:136
TileEMScale::m_calibOflCes
std::unique_ptr< TileCalibDataFlt > m_calibOflCes
Definition: TileEMScale.h:413
TileEMScale::setCalibOnlCis
void setCalibOnlCis(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:437
TileEMScale::getLaserReferenceHV
float getLaserReferenceHV(unsigned int drawerIdx, unsigned int channel) const
Returns the reference PMT HV from appropriate laser calibration.
Definition: TileEMScale.cxx:394
TileRawChannelUnit::OnlineCesiumPicoCoulombs
@ OnlineCesiumPicoCoulombs
Definition: TileRawChannelUnit.h:23
vector
Definition: MultiHisto.h:13
TileRawChannelUnit::Invalid
@ Invalid
Definition: TileRawChannelUnit.h:26
TileEMScale::setCalibOflLasLin
void setCalibOflLasLin(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:416
TileRawChannelUnit::MegaElectronVolts
@ MegaElectronVolts
Definition: TileRawChannelUnit.h:20
TileEMScale::applyChargeCalibration
float applyChargeCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const
Apply CIS calibration: ADC counts -> pC.
Definition: TileEMScale.cxx:264
TileRawChannelUnit::UNIT
UNIT
Definition: TileRawChannelUnit.h:16
TileEMScale::m_calibOflLasNln
std::unique_ptr< TileCalibDataFlt > m_calibOflLasNln
Definition: TileEMScale.h:411
TileEMScale::m_calibOflEms
std::unique_ptr< TileCalibDataFlt > m_calibOflEms
Definition: TileEMScale.h:414
TileEMScale::applyLaserLinearCalibration
float applyLaserLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply laser (PMT linearity) correction.
Definition: TileEMScale.cxx:239
TileEMScale::setCalibOnlCes
void setCalibOnlCes(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:445
TileEMScale::m_calibOflCisLin
std::unique_ptr< TileCalibDataFlt > m_calibOflCisLin
Definition: TileEMScale.h:408
TileEMScale::m_calibOflLasLin
std::unique_ptr< TileCalibDataFlt > m_calibOflLasLin
Definition: TileEMScale.h:410
TileEMScale::applyCesiumCalibration
float applyCesiumCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude, bool applyLasCorr=true) const
Apply cesium calibration constant.
Definition: TileEMScale.cxx:208
TileEMScale::setCalibOflEms
void setCalibOflEms(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:432
TileEMScale::getLaserPartitionVariation
float getLaserPartitionVariation(unsigned int drawerIdx) const
Return laser partition relative variation.
Definition: TileEMScale.cxx:386
TileEMScale::getLaserFiberVariation
float getLaserFiberVariation(unsigned int drawerIdx, unsigned int channel) const
Return laser fiber relative variation.
Definition: TileEMScale.cxx:379
BchCleanup.calibDrawer
calibDrawer
Definition: BchCleanup.py:217
TileEMScale::m_calibOflCisNln
std::unique_ptr< TileCalibDataFlt > m_calibOflCisNln
Definition: TileEMScale.h:409
TileEMScale::setCalibOflCisLin
void setCalibOflCisLin(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:408
TileEMScale::m_calibOnlEms
std::unique_ptr< TileCalibDataFlt > m_calibOnlEms
Definition: TileEMScale.h:420
TileEMScale::applyLaserNonLinearCalibration
float applyLaserNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply laser (PMT nonlinearity) correction.
Definition: TileEMScale.cxx:251
TileEMScale::m_isOflLasNlnUsed
bool m_isOflLasNlnUsed
Definition: TileEMScale.h:404
TileEMScale::undoOnlineChannelCalibration
float undoOnlineChannelCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude, TileRawChannelUnit::UNIT onlUnit) const
Undo the calibration applied in ROD signal reconstruction.
Definition: TileEMScale.cxx:97
TileEMScale::~TileEMScale
virtual ~TileEMScale()
Definition: TileEMScale.cxx:30
TileEMScale::setCalibOflLasFib
void setCalibOflLasFib(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:424
ReadFloatFromCool.adc
adc
Definition: ReadFloatFromCool.py:48
TileEMScale::applyOnlineChargeCalibration
float applyOnlineChargeCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const
Apply online CIS calibration: ADC counts -> pC.
Definition: TileEMScale.cxx:349
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
TileEMScale::resetOnlineCache
void resetOnlineCache()
Recache the total online calibration constant applied in ROD.
Definition: TileEMScale.cxx:56
Exception.h
TileEMScale::calibrateOnlineChannel
float calibrateOnlineChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude, TileRawChannelUnit::UNIT onlUnit) const
Calibrate an online Tile channel from OnlineADCcounts to an arbitrary Online unit,...
Definition: TileEMScale.cxx:292
TileEMScale::m_useOflLasFib
bool m_useOflLasFib
Definition: TileEMScale.h:422
TileEMScale::initialize
bool initialize()
Definition: TileEMScale.cxx:35
TileCalibUtils::fixedPointPrecision
static float fixedPointPrecision(float val, unsigned int nBits=16)
Returns the input in fixed point precision.
Definition: TileCalibUtils.cxx:268
TileEMScale::checkIfOflLaserNonLinearCalibrationUsed
bool checkIfOflLaserNonLinearCalibrationUsed() const
Check if offline nonlinear laser calibration will be used.
Definition: TileEMScale.cxx:471
TileCalibUtils::LAS_PART_CHAN
static const unsigned int LAS_PART_CHAN
Empty channel number to store laser partition variation.
Definition: TileCalibUtils.h:144
TileCalibUtils::MAX_CHAN
static const unsigned int MAX_CHAN
Number of channels in drawer.
Definition: TileCalibUtils.h:141
TileEMScale::m_maxChannels
unsigned int m_maxChannels
Definition: TileEMScale.h:424
TileEMScale::getCesiumReferenceHV
float getCesiumReferenceHV(unsigned int drawerIdx, unsigned int channel) const
Return the reference PMT HV set in last cesium calibration.
Definition: TileEMScale.cxx:365
readCCLHist.float
float
Definition: readCCLHist.py:83
TileEMScale::applyEMScaleCalibration
float applyEMScaleCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Calibrate a Tile channel to EM scale: Equalized pC -> MeV.
Definition: TileEMScale.cxx:201
TileEMScale::setCalibOflLasNln
void setCalibOflLasNln(std::unique_ptr< TileCalibDataFlt > calibData)
Definition: TileEMScale.cxx:420
TileEMScale::m_epsilon
const float m_epsilon
Definition: TileEMScale.h:428
TileRawChannelUnit::ADCcounts
@ ADCcounts
Definition: TileRawChannelUnit.h:17
TileCalib::InvalidValue
Thrown to prevent invalid results, eg.
Definition: TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/Exception.h:224
TileRawChannelUnit::OnlineMegaElectronVolts
@ OnlineMegaElectronVolts
Definition: TileRawChannelUnit.h:24
TileEMScale::getCacheIndex
unsigned int getCacheIndex(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const
Return cache index used for online calibration constants.
Definition: TileEMScale.h:460
TileEMScale::m_calibOflLasFib
std::unique_ptr< TileCalibDataFlt > m_calibOflLasFib
Definition: TileEMScale.h:412