ATLAS Offline Software
Loading...
Searching...
No Matches
TileEMScale.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TILECONDITIONS_TILEEMSCALE_H
6#define TILECONDITIONS_TILEEMSCALE_H
7
78
79// Tile includes
83
84#include <vector>
85#include <array>
86
88 public:
89
91 virtual ~TileEMScale();
92
93 bool initialize();
94
107 float calibrateChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude,
108 TileRawChannelUnit::UNIT rawDataUnitIn, TileRawChannelUnit::UNIT rawDataUnitOut) const;
109
117 float applyEMScaleCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const;
118
127 float applyCesiumCalibration(unsigned int drawerIdx, unsigned int channel,
128 float amplitude, bool applyLasCorr = true) const;
129
138 float applyLaserCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const;
139
148 float applyLaserLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const;
149
158 float applyLaserNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const;
159
169 float applyChargeCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
170 float amplitude) const;
171
181 float applyChargLinearCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
182 float amplitude) const;
183
193 float applyChargeNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
194 float amplitude) const;
195
196
210 float calibrateOnlineChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
211 float amplitude, TileRawChannelUnit::UNIT onlUnit) const;
212
221 float applyOnlineEMScaleCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const;
222
231 float applyOnlineCesiumCalibration(unsigned int drawerIdx, unsigned int channel,
232 float amplitude, bool applyLasCorr = true) const;
233
242 float applyOnlineLaserCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const;
243
253 float applyOnlineChargeCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
254 float amplitude) const;
255
270 float undoOnlineChannelCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
271 float amplitude, TileRawChannelUnit::UNIT onlUnit) const;
272
283 float getCesiumReferenceLaserGain(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const;
284
291 float getCesiumReferenceHV(unsigned int drawerIdx, unsigned int channel) const;
292
299 float getCesiumReferenceTemperature(unsigned int drawerIdx, unsigned int channel) const;
300
306 float getLaserFiberVariation(unsigned int drawerIdx, unsigned int channel) const;
307
317 float getLaserPartitionVariation(unsigned int drawerIdx) const;
318
325 float getLaserReferenceHV(unsigned int drawerIdx, unsigned int channel) const;
326
331
337
338 void setCalibOflCisLin(std::unique_ptr<TileCalibDataFlt> calibData);
339 void setCalibOflCisNln(std::unique_ptr<TileCalibDataFlt> calibData);
340 void setCalibOflLasLin(std::unique_ptr<TileCalibDataFlt> calibData);
341 void setCalibOflLasNln(std::unique_ptr<TileCalibDataFlt> calibData);
342 void setCalibOflLasFib(std::unique_ptr<TileCalibDataFlt> calibData);
343 void setCalibOflCes(std::unique_ptr<TileCalibDataFlt> calibData);
344 void setCalibOflEms(std::unique_ptr<TileCalibDataFlt> calibData);
345
346 void setCalibOnlCis(std::unique_ptr<TileCalibDataFlt> calibData);
347 void setCalibOnlLas(std::unique_ptr<TileCalibDataFlt> calibData);
348 void setCalibOnlCes(std::unique_ptr<TileCalibDataFlt> calibData);
349 void setCalibOnlEms(std::unique_ptr<TileCalibDataFlt> calibData);
350
351 void setMaxChannels(unsigned int maxChannels);
352 void setMaxGains(unsigned int maxGains);
353
354 protected:
355
363 void resetOnlineCache();
364
372 float getOnlineCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc,
373 TileRawChannelUnit::UNIT onlUnit) const;
374
381
388
396
397 unsigned int getCacheIndex(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const;
398
399 //=== cache of total online calibration factors
401 std::vector<float> m_onlCache;
402
405
406 //=== TileCondProxies are needed by the TileCalibEms
407 //--- offline TileCalibData
408 std::unique_ptr<TileCalibDataFlt> m_calibOflCisLin;
409 std::unique_ptr<TileCalibDataFlt> m_calibOflCisNln;
410 std::unique_ptr<TileCalibDataFlt> m_calibOflLasLin;
411 std::unique_ptr<TileCalibDataFlt> m_calibOflLasNln;
412 std::unique_ptr<TileCalibDataFlt> m_calibOflLasFib;
413 std::unique_ptr<TileCalibDataFlt> m_calibOflCes;
414 std::unique_ptr<TileCalibDataFlt> m_calibOflEms;
415
416 //--- online TileCalibData
417 std::unique_ptr<TileCalibDataFlt> m_calibOnlCis;
418 std::unique_ptr<TileCalibDataFlt> m_calibOnlLas;
419 std::unique_ptr<TileCalibDataFlt> m_calibOnlCes;
420 std::unique_ptr<TileCalibDataFlt> m_calibOnlEms;
421
423
424 unsigned int m_maxChannels;
425 unsigned int m_maxGains;
426 unsigned int m_drawerCacheSize;
427
428 const float m_epsilon = 1.e-5;
429};
430
433CLASS_DEF(TileEMScale, 166690091, 0)
435
436
437// inlines
438
439inline
443
444inline
446 m_onlCacheUnit = onlCacheUnit;
447}
448
449inline
450void TileEMScale::setMaxChannels(unsigned int maxChannels) {
451 m_maxChannels = maxChannels;
452}
453
454inline
455void TileEMScale::setMaxGains(unsigned int maxGains) {
456 m_maxGains = maxGains;
457}
458
459inline
460unsigned int TileEMScale::getCacheIndex(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const {
461 return m_drawerCacheSize * drawerIdx + m_maxChannels * adc + channel;
462}
463
464#endif // TILECONDITIONS_TILEEMSCALE_H
Hold mappings of ranges to condition objects.
#define CONDCONT_DEF(...)
Definition CondCont.h:1413
macros to associate a CLID to a type
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
#define UNIT(NAME)
Definition Units.h:74
Condition object to keep calibration factors of TileCal channels.
Definition TileEMScale.h:87
float getLaserFiberVariation(unsigned int drawerIdx, unsigned int channel) const
Return laser fiber relative variation.
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.
float applyChargLinearCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const
Apply CIS linear calibration: ADC counts -> pC.
void setCalibOflLasFib(std::unique_ptr< TileCalibDataFlt > calibData)
void setCalibOflEms(std::unique_ptr< TileCalibDataFlt > calibData)
void setCalibOflCisLin(std::unique_ptr< TileCalibDataFlt > calibData)
float applyChargeCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const
Apply CIS calibration: ADC counts -> pC.
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,...
void setCalibOflCisNln(std::unique_ptr< TileCalibDataFlt > calibData)
TileRawChannelUnit::UNIT m_onlCacheUnit
void setCalibOnlCes(std::unique_ptr< TileCalibDataFlt > calibData)
std::unique_ptr< TileCalibDataFlt > m_calibOflEms
void setOnlineCacheUnit(TileRawChannelUnit::UNIT onlCacheUnit)
Set online cache unit.
std::unique_ptr< TileCalibDataFlt > m_calibOflCisNln
void setCalibOnlCis(std::unique_ptr< TileCalibDataFlt > calibData)
std::unique_ptr< TileCalibDataFlt > m_calibOnlCes
float applyChargeNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const
Apply CIS non-linear calibration: ADC counts -> pC.
void setCalibOnlLas(std::unique_ptr< TileCalibDataFlt > calibData)
void setMaxGains(unsigned int maxGains)
std::unique_ptr< TileCalibDataFlt > m_calibOflCes
std::unique_ptr< TileCalibDataFlt > m_calibOnlEms
bool m_useOflLasFib
float getCesiumReferenceHV(unsigned int drawerIdx, unsigned int channel) const
Return the reference PMT HV set in last cesium calibration.
bool initialize()
bool m_isOflLasNlnUsed
std::unique_ptr< TileCalibDataFlt > m_calibOnlLas
float getLaserReferenceHV(unsigned int drawerIdx, unsigned int channel) const
Returns the reference PMT HV from appropriate laser calibration.
unsigned int m_maxChannels
float applyEMScaleCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Calibrate a Tile channel to EM scale: Equalized pC -> MeV.
const float m_epsilon
float applyLaserNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply laser (PMT nonlinearity) correction.
void setMaxChannels(unsigned int maxChannels)
void setCalibOflCes(std::unique_ptr< TileCalibDataFlt > calibData)
float getLaserPartitionVariation(unsigned int drawerIdx) const
Return laser partition relative variation.
std::unique_ptr< TileCalibDataFlt > m_calibOnlCis
float applyOnlineLaserCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply online laser (PMT linearity) correction.
float applyOnlineChargeCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude) const
Apply online CIS calibration: ADC counts -> pC.
float applyOnlineEMScaleCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Calibrate online chnnel to EM scale: Equalized pC -> MeV.
std::unique_ptr< TileCalibDataFlt > m_calibOflLasNln
float calibrateChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude, TileRawChannelUnit::UNIT rawDataUnitIn, TileRawChannelUnit::UNIT rawDataUnitOut) const
Calibrate a Tile channel.
float getCesiumReferenceTemperature(unsigned int drawerIdx, unsigned int channel) const
Return the drawer temperature as measured during last cesium equalization.
std::unique_ptr< TileCalibDataFlt > m_calibOflLasFib
std::vector< float > m_onlCache
float applyLaserLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply laser (PMT linearity) correction.
float applyOnlineCesiumCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude, bool applyLasCorr=true) const
Apply online cesium calibration constant.
unsigned int getCacheIndex(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const
Return cache index used for online calibration constants.
void setCalibOflLasNln(std::unique_ptr< TileCalibDataFlt > calibData)
unsigned int m_maxGains
TileRawChannelUnit::UNIT getOnlineCacheUnit() const
Return the unit of cached online calibration constants.
std::unique_ptr< TileCalibDataFlt > m_calibOflLasLin
void resetOnlineCache()
Recache the total online calibration constant applied in ROD.
void setCalibOflLasLin(std::unique_ptr< TileCalibDataFlt > calibData)
void setCalibOnlEms(std::unique_ptr< TileCalibDataFlt > calibData)
bool m_isOflLasLinUsed
bool checkIfOflLaserLinearCalibrationUsed() const
Check if offline linear laser calibration will be used.
float getCesiumReferenceLaserGain(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const
Return the PMT gain reference as measured by the laser system.
float applyLaserCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply laser correction.
float applyCesiumCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude, bool applyLasCorr=true) const
Apply cesium calibration constant.
float getOnlineCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, TileRawChannelUnit::UNIT onlUnit) const
Return the calibration constant applied in the DSP.
std::unique_ptr< TileCalibDataFlt > m_calibOflCisLin
bool checkIfOflLaserNonLinearCalibrationUsed() const
Check if offline nonlinear laser calibration will be used.
virtual ~TileEMScale()
unsigned int m_drawerCacheSize