60 for (
unsigned int channel = 0; channel <
m_maxChannels; ++channel) {
61 for (
unsigned int adc = 0; adc <
m_maxGains; ++adc) {
77 onlCalib =
m_calibOnlCis->getCalibDrawer(drawerIdx)->getCalib(channel, adc, onlCalib);
81 onlCalib =
m_calibOnlLas->getCalibDrawer(drawerIdx)->getCalib(channel, adc, onlCalib);
82 onlCalib =
m_calibOnlCes->getCalibDrawer(drawerIdx)->getCalib(channel, adc, onlCalib);
86 onlCalib =
m_calibOnlEms->getCalibDrawer(drawerIdx)->getCalib(channel, adc, onlCalib);
127 if (onlCalib == 0.) {
131 return amplitude / onlCalib;
156 switch (rawDataUnitIn) {
203 return m_calibOflEms->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
210 amplitude =
m_calibOflCes->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
226 amplitude =
m_calibOflLasLin->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
231 amplitude =
m_calibOflLasNln->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
243 amplitude =
m_calibOflLasLin->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
255 amplitude =
m_calibOflLasNln->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
267 amplitude =
m_calibOflCisLin->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
270 return m_calibOflCisNln->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
278 return m_calibOflCisLin->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
287 return m_calibOflCisNln->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
297 amplitude =
m_calibOnlCis->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
301 amplitude =
m_calibOnlLas->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
302 amplitude =
m_calibOnlCes->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
307 amplitude =
m_calibOnlEms->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
322 return m_calibOnlEms->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
328 float amplitude,
bool applyLasCorr)
const {
330 amplitude =
m_calibOnlCes->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
344 return m_calibOnlLas->getCalibDrawer(drawerIdx)->getCalib(channel, 0, amplitude);
353 return m_calibOnlCis->getCalibDrawer(drawerIdx)->getCalib(channel, adc, amplitude);
360 return m_calibOflCes->getCalibDrawer(drawerIdx)->getData(channel, adc, 1);
367 return m_calibOflCes->getCalibDrawer(drawerIdx)->getData(channel, 0, 2);
374 return m_calibOflCes->getCalibDrawer(drawerIdx)->getData(channel, 0, 3);
399 int size = calibDrawer->getObjSizeUint32();
456 const float defval = 1.0;
457 const float epsilon = defval *
m_epsilon;
461 val =
m_calibOflLasLin->getCalibDrawer(drawerIdx)->getCalib(chn, 0, defval);
462 if (std::abs(val - defval) > epsilon) {
473 const float defval = 100.0;
474 const float epsilon = defval *
m_epsilon;
479 val =
m_calibOflLasNln->getCalibDrawer(drawerIdx)->getCalib(chn, 0, defval);
480 if (std::abs(val - defval) > epsilon) {
Generic class for storing a number of floats (Flt) for each channel or ADC.
static const unsigned int MAX_DRAWERIDX
Maximal drawer index.
static const unsigned int LAS_PART_CHAN
Empty channel number to store laser partition variation.
static float fixedPointPrecision(float val, unsigned int nBits=16)
Returns the input in fixed point precision.
static unsigned int getFirstDrawerInPartitionIdx(unsigned int drawerIdx)
Returns the first drawer Idx in a partition of a given input drawer.
static const unsigned int MAX_CHAN
Number of channels in drawer.
Thrown if an index is out of range.
Signals invalid use of TileRawChannelUnit.
Thrown to prevent invalid results, eg.
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
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)
std::unique_ptr< TileCalibDataFlt > m_calibOflCes
std::unique_ptr< TileCalibDataFlt > m_calibOnlEms
float getCesiumReferenceHV(unsigned int drawerIdx, unsigned int channel) const
Return the reference PMT HV set in last cesium calibration.
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.
float applyLaserNonLinearCalibration(unsigned int drawerIdx, unsigned int channel, float amplitude) const
Apply laser (PMT nonlinearity) correction.
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)
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 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.
unsigned int m_drawerCacheSize
@ OnlineCesiumPicoCoulombs
@ OnlineMegaElectronVolts