11#include "GaudiKernel/EventIDRange.h"
34 return StatusCode::FAILURE;
58 return StatusCode::SUCCESS;
69 return StatusCode::SUCCESS;
94 febConfig = *configHdl;
95 if (febConfig==
nullptr) {
97 return StatusCode::FAILURE;
105 larmPhysOverMCal=*mphysOverMcalHdl;
112 larHVScaleCorr=*HVScaleCorrHdl;
120 unsigned nNouA2MeV=0;
121 unsigned nNoDAC2uA=0;
122 unsigned nNoMphysOverMcal=0;
124 unsigned nNoHVScaleCorr=0;
128 unsigned rampPolyDeg=0;
129 std::vector<HWIdentifier>::const_iterator it =
m_larOnlineID->channel_begin();
130 std::vector<HWIdentifier>::const_iterator it_e=
m_larOnlineID->channel_end();
131 while (rampPolyDeg==0 && it!=it_e) {
133 while ( rampPolyDeg==0 && gain <
m_nGains) {
134 rampPolyDeg=larRamp->
ADC2DAC(*it,gain).size();
140 ATH_MSG_INFO(
"Working with a ramp polynom of degree " << rampPolyDeg);
142 std::unique_ptr<LArADC2MeV> lArADC2MeVObj=std::make_unique<LArADC2MeV>(
m_larOnlineID,cabling,
m_nGains,rampPolyDeg);
144 std::vector<float> ADC2MeV;
150 if (cabling->isOnlineConnectedFromHash(hid)) {
152 const float& uA2MeV=laruA2MeV->
UA2MEV(chid);
158 const float& DAC2uA=larDAC2uA->
DAC2UA(chid);
166 float factor=uA2MeV*DAC2uA;
168 if (larHVScaleCorr) {
169 const float& HVScaleCorr = larHVScaleCorr->
HVScaleCorr(chid);
182 std::vector<float> factorGain(
m_nGains,factor);
184 if (larmPhysOverMCal) {
185 for (
size_t igain=0;igain<
m_nGains;++igain) {
186 const float& mPhysOverMCal=larmPhysOverMCal->
MphysOverMcal(chid,igain);
192 factorGain[igain]/=mPhysOverMCal;
198 for(
unsigned int igain=0;igain<
m_nGains;igain++) {
202 if (adc2dac.size()<2) {
207 ATH_MSG_VERBOSE(
"Ignore missing ramp for barrel presampler channel in low gain");
216 <<
" gain (" << igain<<
") "
217 <<
" uA2MeV (" << uA2MeV <<
") "
218 <<
" DAC2uA (" << DAC2uA <<
") "
219 <<
" factorGain (" << factorGain[igain] <<
") "
220 <<
" adc2dac (" << adc2dac[0]<<
" " << adc2dac[1]<<
") "
223 ADC2MeV.resize(adc2dac.size());
232 ADC2MeV[0]=factorGain[igain]*adc2dac[0];
236 for (
size_t i=1;i<adc2dac.size();++i) {
237 ADC2MeV[i]=factorGain[igain]*adc2dac[i];
240 bool stat=lArADC2MeVObj->set(hid,igain,ADC2MeV);
242 ATH_MSG_ERROR(
"LArADC2MeV::set fails for gain " << igain <<
", hash " << hid );
253 if (nNouA2MeV)
ATH_MSG_ERROR(
"No uA2MeV values for " << nNouA2MeV <<
" channels");
254 if (nNoDAC2uA)
ATH_MSG_ERROR(
"No DAC2uA values for " << nNoDAC2uA <<
" channels");
257 ATH_MSG_ERROR(
"No Ramp values for " << nNoRamp <<
" channels * gains " );
260 ATH_MSG_WARNING(
"No Ramp values for " << nNoRamp <<
" channels * gains " );
263 if (nNoMphysOverMcal)
ATH_MSG_INFO(
"No MphysOverMcal values for " << nNoMphysOverMcal <<
" channels * gains");
264 if (nNoHVScaleCorr)
ATH_MSG_WARNING(
"No HVScaleCorr values for " << nNoHVScaleCorr <<
" channels");
267 return StatusCode::FAILURE;
269 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
const ServiceHandle< StoreGateSvc > & detStore() const
virtual const float & DAC2UA(const HWIdentifier &id) const =0
access to DAC2UA conversion factor index by Identifier, and gain setting
virtual const float & HVScaleCorr(const HWIdentifier &id) const =0
virtual const float & MphysOverMcal(const HWIdentifier &id, int gain) const =0
virtual RampRef_t ADC2DAC(const HWIdentifier &id, int gain) const =0
LArVectorProxy RampRef_t
This class defines the interface for accessing Ramp @stereotype Interface.
virtual const float & UA2MEV(const HWIdentifier &id) const =0
This is a "hash" representation of an Identifier.
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Gaudi::Property< bool > m_isSuperCell
SG::ReadCondHandleKey< LArFebConfig > m_febConfigKey
SG::ReadCondHandleKey< ILArHVScaleCorr > m_lArHVScaleCorrKey
SG::ReadCondHandleKey< ILArMphysOverMcal > m_lArMphysOverMcalKey
SG::ReadCondHandleKey< ILArDAC2uA > m_lArDAC2uAKey
SG::WriteCondHandleKey< LArADC2MeV > m_ADC2MeVKey
Gaudi::Property< bool > m_completeDetector
SG::ReadCondHandleKey< ILArRamp > m_lArRampKey
const LArOnlineID_Base * m_larOnlineID
StatusCode execute(const EventContext &ctx) const override
SG::ReadCondHandleKey< ILAruA2MeV > m_lAruA2MeVKey
StatusCode initialize() override
Gaudi::Property< bool > m_useFEBGainThresholds
short lowerGainThreshold(const HWIdentifier &id) const
void addDependency(const EventIDRange &range)
const EventIDRange & getRange() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED