![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
CTB LArRawChannelBuilder: Convert ADC samples into energy.
More...
#include <LArRawChannelBuilder.h>
|
| LArRawChannelBuilder (const std::string &name, ISvcLocator *pSvcLocator) |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | execute () override |
|
virtual StatusCode | finalize () override |
|
virtual StatusCode | sysInitialize () override |
| Override sysInitialize. More...
|
|
virtual const DataObjIDColl & | extraOutputDeps () const override |
| Return the list of extra output dependencies. More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
const LArOnlineID * | m_onlineHelper |
|
SG::ReadHandleKey< LArDigitContainer > | m_dataLocation { this, "DataLocation", "FREE", "" } |
|
SG::WriteHandleKey< LArRawChannelContainer > | m_ChannelContainerName { this, "LArRawChannelContainerName", "LArRawChannels", "" } |
|
float | m_Ecut |
|
int | m_initialTimeSampleShift |
|
int | m_NOFCPhases |
|
int | m_NOFCTimeBins |
|
bool | m_useIntercept [4] {} |
|
bool | m_useOFCPhase |
|
bool | m_phaseInv |
|
float | m_ramp_max [3] |
|
double | m_SamplingPeriode |
|
float | m_OFCTimeBin |
|
bool | m_binHalfOffset |
|
bool | m_allowTimeJump |
|
int | m_pedestalFallbackMode |
|
unsigned int | m_iPedestal |
|
unsigned int | m_shapeMode |
|
unsigned | m_skipSaturCells |
|
short | m_AdcMax |
|
int | m_noEnergy |
|
int | m_noTime |
|
int | m_noShape |
|
int | m_noShapeDer |
|
int | m_saturation |
|
int | m_lastNoEnergy |
|
int | m_lastNoTime |
|
int | m_lastNoShape |
|
int | m_lastNoShapeDer |
|
float | m_aveNoEnergy |
|
float | m_aveNoTime |
|
float | m_aveNoShape |
|
float | m_aveNoShapeDer |
|
float | m_aveSaturCells |
|
int | m_nEvents |
|
float | m_aveChannels |
|
double | m_SamplingPeriodeUpperLimit |
|
double | m_SamplingPeriodeLowerLimit |
|
const LArEM_ID * | m_emId |
|
SG::ReadCondHandleKey< LArOnOffIdMapping > | m_cablingKey {this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"} |
|
SG::ReadCondHandleKey< LArADC2MeV > | m_adc2mevKey { this, "ADC2MeVKey", "LArADC2MeV", "SG Key of the LArADC2MeV CDO" } |
|
int | m_firstSample |
|
std::string | m_pedestalKey |
|
std::string | m_shapesKey |
|
SG::ReadCondHandleKey< ILArOFC > | m_ofcKey {this, "OFCKey", "LArOFC", "SG Key of OFC conditions object" } |
| Property: OFC coefficients (conditions input). More...
|
|
DataObjIDColl | m_extendedExtraObjects |
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
◆ StoreGateSvc_t
◆ LArRawChannelBuilder()
LArRawChannelBuilder::LArRawChannelBuilder |
( |
const std::string & |
name, |
|
|
ISvcLocator * |
pSvcLocator |
|
) |
| |
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
StatusCode LArRawChannelBuilder::execute |
( |
| ) |
|
|
overridevirtual |
Definition at line 155 of file LArRawChannelBuilder.cxx.
157 const EventContext& ctx = Gaudi::Hive::currentContext();
176 return StatusCode::FAILURE;
191 auto larRawChannelContainer = std::make_unique<LArRawChannelContainer>();
192 larRawChannelContainer->reserve(digitContainer->size());
221 int region = -99999 ;
225 id =
cabling->cnvToIdentifier(chid);
227 ATH_MSG_DEBUG(
"A Cabling exception was caught for channel 0x!"
242 for (
unsigned iSample=0;iSample<
samples.size();iSample++) {
253 msg() <<
". Skipping channel." <<
endmsg;
255 }
else if ( nSatur>-1 ) {
263 float pedestalAverage;
271 <<
" [ Layer = " <<
layer <<
" - Eta = " <<
eta <<
" - Phi = " <<
phi <<
" - Region = " << region <<
" ]"
272 <<
" Gain = " <<
gain <<
". Skipping channel." );
281 << MSG::dec <<
" Gain=" <<
gain <<
". Using time sample " <<
m_iPedestal );
285 pedestalAverage=pedestal;
295 const double ofcTimeOffset=larOFC->timeOffset(chid,
gain);
296 timeShift+=ofcTimeOffset;
304 timeSampleShift += 1;
310 timeSampleShift -= 1;
318 ATH_MSG_ERROR( noEnergy <<
". Time offset out of range for channel 0x" << MSG::hex << chid.
get_compact() << MSG::dec
326 ATH_MSG_ERROR( noEnergy <<
". Negative time sample (" << timeSampleShift <<
") shift for channel 0x" << MSG::hex << chid.
get_compact() << MSG::dec
327 <<
" Found. Skipping channel." );
341 if ( OFCTimeBin < 0 ) {
342 ATH_MSG_ERROR(
"Channel " << MSG::hex << chid.
get_compact() << MSG::dec <<
" asks for OFC bin = " << OFCTimeBin <<
". Set to 0." );
349 ofc_a=larOFC->OFC_a(chid,
gain,OFCTimeBin);
354 if (ofc_a.size()==0) {
357 <<
" [ Layer = " <<
layer <<
" - Eta = " <<
eta <<
" - Phi = " <<
phi <<
" - Region = " << region <<
" ]"
358 <<
" Time bin = " << OFCTimeBin <<
", Gain = " <<
gain <<
". Skipping channel." );
361 if (ofc_a.size()+timeSampleShift>
nSamples) {
365 if (timeSampleShift==0)
367 << ofc_a.size() <<
" samples. Skipping Channel " );
370 <<
" samples left, but have OFCs for " << ofc_a.size() <<
" samples. Skipping Channel " );
377 for (
unsigned i=0;
i<(ofc_a.size());
i++)
378 ADCPeak+=(
samples[
i+timeSampleShift]-pedestalAverage)*ofc_a.
at(
i);
380 ATH_MSG_VERBOSE(
"ADC Height calculated " << ADCPeak <<
" TimeBin=" << OFCTimeBin );
385 if (ramp.size()==0) {
388 <<
" [ Layer = " <<
layer <<
" - Eta = " <<
eta <<
" - Phi = " <<
phi <<
" - Region = " << region <<
" ]"
389 <<
" Gain = " <<
gain <<
". Skipping channel." );
398 ATH_MSG_DEBUG(
"Bad ramp for channel " << chid <<
" (ramp[1] = " << ramp[1] <<
"): skip this channel" );
402 float ADCPeakPower=ADCPeak;
407 for (
unsigned i=1;
i<ramp.size();
i++)
410 ADCPeakPower*=ADCPeak;
416 ofc_b=larOFC->OFC_b(chid,
gain,OFCTimeBin);
417 if (ofc_b.size() != ofc_a.size()) {
421 <<
" Gain "<<
gain <<
" found. Time not calculated." );
424 <<
" not equal to OFC for energy size " << ofc_a.size()
425 <<
" Time not calculated " );
429 for (
unsigned i=0;
i<(ofc_b.size());
i++)
452 id =
cabling->cnvToIdentifier(chid);
458 ATH_MSG_DEBUG(
"A Cabling exception was caught for channel 0x!"
468 <<
" Gain "<<
gain <<
". Quality factor not calculated." );
471 <<
"smaller than OFC size " << ofc_a.size()
472 <<
"for channel 0x" << MSG::hex << chid.
get_compact()
473 << MSG::dec <<
". Quality factor not calculated." );
479 if (
time!=0 && shapeDer.size()!=shape.size()) {
481 ATH_MSG_DEBUG(
"Shape-Derivative has different size than Shape for channel 0x" << MSG::hex << chid.
get_compact() << MSG::dec
482 <<
". Derivative not taken into accout for quality factor." );
485 if (
time==0 || shapeDer.size()!=shape.size() ) {
486 for (
unsigned i=0;
i<(ofc_a.size());
i++)
491 for (
unsigned i=0;
i<(ofc_a.size());
i++)
512 iqual = ( (
int)(quality) ) & 0xFFFF;
513 iprov = iprov | 0x2000;
517 larRawChannelContainer->push_back(larRawChannel);
520 <<
" e=" <<
energy <<
" t=" <<
time <<
" Q=" << quality );
523 ATH_MSG_DEBUG( ntot_raw <<
" channels successfully processed, (" << highE <<
" with high energy)" );
527 ATH_MSG_ERROR(
"Too many channels (" <<BadTiming<<
" !) have a bad timing !!" );
528 ATH_MSG_ERROR(
"OFC time constants should be revisited !!!" );
530 larRawChannelContainer->clear();
536 ATH_MSG_ERROR( saturation <<
" saturating channels were found. Event is skipped." );
537 larRawChannelContainer->clear();
591 else if (noTime || noShape || noShapeDer || saturation)
596 msg() << msglvl <<
" *** Error & Warning summary for this event *** " << std::endl;
599 msg() << msglvl <<
" " << noEnergy <<
" out of "
600 << digitContainer->size() <<
" channel(s) skipped due to a lack of basic calibration constants."
604 msg() << msglvl <<
" " << noTime <<
" out of "
605 << highE <<
" high-enegy channel(s) have no time-info due to a lack of Optimal Filtering Coefficients."
609 msg() << msglvl <<
" " << noShape <<
" out of "
610 << highE <<
" high-enegy channel(s) have no quality factor due to a lack of shape."
614 msg() << msglvl <<
" " << noShapeDer <<
" out of "
615 << highE <<
" high-enegy channel(s) lack the derivative of the shape. Not taken into accout for Quality factor."
620 msg() << MSG::ERROR <<
" " << saturation <<
" out of "
621 << digitContainer->size() <<
" channel(s) showed saturations. The complete event was skipped." << std::endl;
623 msg() << MSG::ERROR <<
" " << saturation <<
" out of "
624 << digitContainer->size() <<
" channel(s) showed saturations and were skipped." << std::endl;
626 msg() << MSG::WARNING <<
" " << saturation <<
" out of "
627 << digitContainer->size() <<
" channel(s) showed saturations." << std::endl;
634 return StatusCode::SUCCESS;
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ extraOutputDeps()
const DataObjIDColl & AthAlgorithm::extraOutputDeps |
( |
| ) |
const |
|
overridevirtualinherited |
Return the list of extra output dependencies.
This list is extended to include symlinks implied by inheritance relations.
Definition at line 50 of file AthAlgorithm.cxx.
57 return Algorithm::extraOutputDeps();
◆ finalize()
StatusCode LArRawChannelBuilder::finalize |
( |
| ) |
|
|
overridevirtual |
Definition at line 637 of file LArRawChannelBuilder.cxx.
665 msg() << msglvl <<
" *** Error & Warning Summary for all events *** " << std::endl ;
695 ATH_MSG_INFO(
"LArRawChannelBuilder finished without errors or warnings." );
702 return StatusCode::SUCCESS;
◆ initialize()
StatusCode LArRawChannelBuilder::initialize |
( |
| ) |
|
|
overridevirtual |
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ renounce()
◆ renounceArray()
◆ sysInitialize()
StatusCode AthAlgorithm::sysInitialize |
( |
| ) |
|
|
overridevirtualinherited |
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ m_adc2mevKey
◆ m_AdcMax
short LArRawChannelBuilder::m_AdcMax |
|
private |
◆ m_allowTimeJump
bool LArRawChannelBuilder::m_allowTimeJump |
|
private |
◆ m_aveChannels
float LArRawChannelBuilder::m_aveChannels |
|
private |
◆ m_aveNoEnergy
float LArRawChannelBuilder::m_aveNoEnergy |
|
private |
◆ m_aveNoShape
float LArRawChannelBuilder::m_aveNoShape |
|
private |
◆ m_aveNoShapeDer
float LArRawChannelBuilder::m_aveNoShapeDer |
|
private |
◆ m_aveNoTime
float LArRawChannelBuilder::m_aveNoTime |
|
private |
◆ m_aveSaturCells
float LArRawChannelBuilder::m_aveSaturCells |
|
private |
◆ m_binHalfOffset
bool LArRawChannelBuilder::m_binHalfOffset |
|
private |
◆ m_cablingKey
◆ m_ChannelContainerName
◆ m_dataLocation
◆ m_detStore
◆ m_Ecut
float LArRawChannelBuilder::m_Ecut |
|
private |
◆ m_emId
◆ m_evtStore
◆ m_extendedExtraObjects
DataObjIDColl AthAlgorithm::m_extendedExtraObjects |
|
privateinherited |
◆ m_firstSample
int LArRawChannelBuilder::m_firstSample |
|
private |
◆ m_initialTimeSampleShift
int LArRawChannelBuilder::m_initialTimeSampleShift |
|
private |
◆ m_iPedestal
unsigned int LArRawChannelBuilder::m_iPedestal |
|
private |
◆ m_lastNoEnergy
int LArRawChannelBuilder::m_lastNoEnergy |
|
private |
◆ m_lastNoShape
int LArRawChannelBuilder::m_lastNoShape |
|
private |
◆ m_lastNoShapeDer
int LArRawChannelBuilder::m_lastNoShapeDer |
|
private |
◆ m_lastNoTime
int LArRawChannelBuilder::m_lastNoTime |
|
private |
◆ m_nEvents
int LArRawChannelBuilder::m_nEvents |
|
private |
◆ m_noEnergy
int LArRawChannelBuilder::m_noEnergy |
|
private |
◆ m_NOFCPhases
int LArRawChannelBuilder::m_NOFCPhases |
|
private |
◆ m_NOFCTimeBins
int LArRawChannelBuilder::m_NOFCTimeBins |
|
private |
◆ m_noShape
int LArRawChannelBuilder::m_noShape |
|
private |
◆ m_noShapeDer
int LArRawChannelBuilder::m_noShapeDer |
|
private |
◆ m_noTime
int LArRawChannelBuilder::m_noTime |
|
private |
◆ m_ofcKey
◆ m_OFCTimeBin
float LArRawChannelBuilder::m_OFCTimeBin |
|
private |
◆ m_onlineHelper
◆ m_pedestalFallbackMode
int LArRawChannelBuilder::m_pedestalFallbackMode |
|
private |
◆ m_pedestalKey
std::string LArRawChannelBuilder::m_pedestalKey |
|
private |
◆ m_phaseInv
bool LArRawChannelBuilder::m_phaseInv |
|
private |
◆ m_ramp_max
float LArRawChannelBuilder::m_ramp_max[3] |
|
private |
◆ m_SamplingPeriode
double LArRawChannelBuilder::m_SamplingPeriode |
|
private |
◆ m_SamplingPeriodeLowerLimit
double LArRawChannelBuilder::m_SamplingPeriodeLowerLimit |
|
private |
◆ m_SamplingPeriodeUpperLimit
double LArRawChannelBuilder::m_SamplingPeriodeUpperLimit |
|
private |
◆ m_saturation
int LArRawChannelBuilder::m_saturation |
|
private |
◆ m_shapeMode
unsigned int LArRawChannelBuilder::m_shapeMode |
|
private |
◆ m_shapesKey
std::string LArRawChannelBuilder::m_shapesKey |
|
private |
◆ m_skipSaturCells
unsigned LArRawChannelBuilder::m_skipSaturCells |
|
private |
◆ m_useIntercept
bool LArRawChannelBuilder::m_useIntercept[4] {} |
|
private |
◆ m_useOFCPhase
bool LArRawChannelBuilder::m_useOFCPhase |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
def retrieve(aClass, aKey=None)
int m_initialTimeSampleShift
virtual float pedestal(const HWIdentifier &id, int gain) const =0
int phi(const Identifier id) const
return phi according to :
Scalar phi() const
phi method
const LArEM_ID * em_idHelper() const
access to EM idHelper
Scalar eta() const
pseudorapidity method
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
SG::ReadCondHandleKey< LArADC2MeV > m_adc2mevKey
float round(const float toRound, const unsigned int decimals)
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
double m_SamplingPeriodeLowerLimit
virtual ShapeRef_t ShapeDer(const HWIdentifier &id, int gain, int tbin=0, int mode=0) const =0
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool msgLvl(const MSG::Level lvl) const
int region(const Identifier id) const
return region according to :
int sampling(const Identifier id) const
return sampling according to :
#define ATH_MSG_VERBOSE(x)
const std::string & key() const
Return the StoreGate ID for the referenced object.
unsigned m_skipSaturCells
int eta(const Identifier id) const
return eta according to :
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual void setOwner(IDataHandleHolder *o)=0
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
SG::WriteHandleKey< LArRawChannelContainer > m_ChannelContainerName
virtual StatusCode sysInitialize() override
Override sysInitialize.
value_type at(size_t i) const
Vector indexing with bounds check.
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
msgSvc
Provide convenience handles for various services.
Liquid Argon digit base class.
Liquid Argon ROD output object base class.
::StatusCode StatusCode
StatusCode definition for legacy code.
std::string m_pedestalKey
bool is_lar_hec(Identifier id) const
Helper class for offline cell identifiers.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
double m_SamplingPeriodeUpperLimit
int m_pedestalFallbackMode
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
const LArOnlineID * m_onlineHelper
StatusCode initialize(bool used=true)
DataObjIDColl m_extendedExtraObjects
SG::ReadHandleKey< LArDigitContainer > m_dataLocation
value_type get_compact(void) const
Get the compact id.
def time(flags, cells_name, *args, **kw)
#define ATH_MSG_WARNING(x)
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
AthAlgorithm()
Default constructor:
SG::ReadCondHandleKey< ILArOFC > m_ofcKey
Property: OFC coefficients (conditions input).
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Exception class for LAr Identifiers.
Proxy for accessing a range of float values like a vector.
virtual ShapeRef_t Shape(const HWIdentifier &id, int gain, int tbin=0, int mode=0) const =0