9#include "GaudiKernel/EventIDRange.h"
31 return StatusCode::FAILURE;
55 return StatusCode::SUCCESS;
66 return StatusCode::SUCCESS;
91 febConfig = *configHdl;
92 if (febConfig==
nullptr) {
94 return StatusCode::FAILURE;
102 larmPhysOverMCal=*mphysOverMcalHdl;
109 larHVScaleCorr=*HVScaleCorrHdl;
117 unsigned nNouA2MeV=0;
118 unsigned nNoDAC2uA=0;
119 unsigned nNoMphysOverMcal=0;
121 unsigned nNoHVScaleCorr=0;
125 unsigned rampPolyDeg=0;
126 std::vector<HWIdentifier>::const_iterator it =
m_larOnlineID->channel_begin();
127 std::vector<HWIdentifier>::const_iterator it_e=
m_larOnlineID->channel_end();
128 while (rampPolyDeg==0 && it!=it_e) {
130 while ( rampPolyDeg==0 && gain <
m_nGains) {
131 rampPolyDeg=larRamp->
ADC2DAC(*it,gain).size();
137 ATH_MSG_INFO(
"Working with a ramp polynom of degree " << rampPolyDeg);
139 std::unique_ptr<LArADC2MeV> lArADC2MeVObj=std::make_unique<LArADC2MeV>(
m_larOnlineID,cabling,
m_nGains,rampPolyDeg);
141 std::vector<float> ADC2MeV;
147 if (cabling->isOnlineConnectedFromHash(hid)) {
149 const float& uA2MeV=laruA2MeV->
UA2MEV(chid);
155 const float& DAC2uA=larDAC2uA->
DAC2UA(chid);
163 float factor=uA2MeV*DAC2uA;
165 if (larHVScaleCorr) {
166 const float& HVScaleCorr = larHVScaleCorr->
HVScaleCorr(chid);
179 std::vector<float> factorGain(
m_nGains,factor);
181 if (larmPhysOverMCal) {
182 for (
size_t igain=0;igain<
m_nGains;++igain) {
183 const float& mPhysOverMCal=larmPhysOverMCal->
MphysOverMcal(chid,igain);
189 factorGain[igain]/=mPhysOverMCal;
195 for(
unsigned int igain=0;igain<
m_nGains;igain++) {
199 if (adc2dac.size()<2) {
204 ATH_MSG_VERBOSE(
"Ignore missing ramp for barrel presampler channel in low gain");
213 <<
" gain (" << igain<<
") "
214 <<
" uA2MeV (" << uA2MeV <<
") "
215 <<
" DAC2uA (" << DAC2uA <<
") "
216 <<
" factorGain (" << factorGain[igain] <<
") "
217 <<
" adc2dac (" << adc2dac[0]<<
" " << adc2dac[1]<<
") "
220 ADC2MeV.resize(adc2dac.size());
229 ADC2MeV[0]=factorGain[igain]*adc2dac[0];
233 for (
size_t i=1;i<adc2dac.size();++i) {
234 ADC2MeV[i]=factorGain[igain]*adc2dac[i];
237 bool stat=lArADC2MeVObj->set(hid,igain,ADC2MeV);
239 ATH_MSG_ERROR(
"LArADC2MeV::set fails for gain " << igain <<
", hash " << hid );
250 if (nNouA2MeV)
ATH_MSG_ERROR(
"No uA2MeV values for " << nNouA2MeV <<
" channels");
251 if (nNoDAC2uA)
ATH_MSG_ERROR(
"No DAC2uA values for " << nNoDAC2uA <<
" channels");
254 ATH_MSG_ERROR(
"No Ramp values for " << nNoRamp <<
" channels * gains " );
257 ATH_MSG_WARNING(
"No Ramp values for " << nNoRamp <<
" channels * gains " );
260 if (nNoMphysOverMcal)
ATH_MSG_INFO(
"No MphysOverMcal values for " << nNoMphysOverMcal <<
" channels * gains");
261 if (nNoHVScaleCorr)
ATH_MSG_WARNING(
"No HVScaleCorr values for " << nNoHVScaleCorr <<
" channels");
264 return StatusCode::FAILURE;
266 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
Gaudi::Property< unsigned > m_nGains
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