ATLAS Offline Software
Loading...
Searching...
No Matches
LArHitEMapToDigitAlg Class Reference

#include <LArHitEMapToDigitAlg.h>

Inheritance diagram for LArHitEMapToDigitAlg:

Public Member Functions

virtual StatusCode initialize ()
virtual StatusCode execute (const EventContext &context) const
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
virtual void setFilterPassed (bool state, const EventContext &ctx) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Types

enum  CaloNum { EM =0 , HEC , FCAL , EMIW }
using staticVecDouble_t = boost::container::static_vector<double,s_MaxNSamples>
using staticVecFloat_t = boost::container::static_vector<float,s_MaxNSamples>

Protected Member Functions

template<class T>
const T * pointerFromKey (const EventContext &context, const SG::ReadCondHandleKey< T > &key) const
StatusCode MakeDigit (const EventContext &ctx, const Identifier &cellId, const HWIdentifier &ch_id, LArDigit *&Digit, DataPool< LArDigit > &dataItemsPool, LArDigit *&Digit_DigiHSTruth, const std::vector< std::pair< float, float > > *TimeE, const LArDigit *rndm_digit, CLHEP::HepRandomEngine *engine, const std::vector< std::pair< float, float > > *TimeE_DigiHSTruth=nullptr) const
StatusCode ConvertHits2Samples (const EventContext &ctx, const Identifier &cellId, HWIdentifier ch_id, CaloGain::CaloGain igain, const std::vector< std::pair< float, float > > *TimeE, staticVecDouble_t &sampleList) const
CaloGain::CaloGain chooseGain (const staticVecDouble_t &samples, const HWIdentifier id, const CaloNum iCalo, const ILArPedestal *ped, const LArADC2MeV *ramp, const float SF) const
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

SG::ReadCondHandleKey< ILArNoisem_noiseKey {this,"NoiseKey","LArNoiseSym","SG Key of ILArNoise object"}
SG::ReadCondHandleKey< ILArfSamplm_fSamplKey {this,"fSamplKey","LArfSamplSym","SG Key of LArfSampl object"}
SG::ReadCondHandleKey< ILArOFCm_OFCKey {this, "OFCKey", "LArOFC", "SG Key of OFC conditions object"}
SG::ReadCondHandleKey< ILArPedestalm_pedestalKey {this,"PedestalKey","LArPedestal","SG Key of LArPedestal object"}
SG::ReadCondHandleKey< ILArShapem_shapeKey {this,"ShapeKey","LArShapeSym","SG Key of LArShape object"}
SG::ReadCondHandleKey< LArADC2MeVm_adc2mevKey {this,"ADC2MeVKey","LArADC2MeV","SG Key of ADC2MeV conditions object"}
SG::ReadCondHandleKey< LArOnOffIdMappingm_cablingKey {this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"}
const LArOnOffIdMappingm_cabling {}
SG::ReadCondHandleKey< LArAutoCorrNoisem_autoCorrNoiseKey {this,"AutoCorrNoiseKey","LArAutoCorrNoise","SG Key of AutoCorrNoise conditions object"}
SG::ReadCondHandleKey< LArBadChannelContm_bcContKey {this, "BadChanKey", "LArBadChannel", "SG key for LArBadChan object"}
SG::ReadCondHandleKey< LArBadFebContm_badFebKey {this, "BadFebKey", "LArBadFeb", "Key of BadFeb object in ConditionsStore"}
Gaudi::Property< std::vector< std::string > > m_problemsToMask {this,"ProblemsToMask",{},"Bad-Channel categories to mask entirly"}
LArBadChannelMask m_bcMask
SG::ReadCondHandleKey< CaloDetDescrManagerm_caloMgrKey {this,"CaloDetDescrManager", "CaloDetDescrManager"}
SG::ReadHandleKey< LArHitEMapm_hitMapKey {this,"LArHitEMapKey","LArHitEMap"}
SG::ReadHandleKey< LArHitEMapm_hitMapKey_DigiHSTruth {this,"LArHitEMap_DigiHSTruthKey","LArHitEMap_DigiHSTruth"}
SG::ReadHandleKey< LArDigitContainerm_inputDigitContainerKey
SG::WriteHandleKey< LArDigitContainerm_DigitContainerName
SG::WriteHandleKey< LArDigitContainerm_DigitContainerName_DigiHSTruth
Gaudi::Property< std::string > m_randomStreamName {this, "RandomStreamName", "LArDigitization", ""}
ServiceHandle< IAthRNGSvcm_rndmGenSvc {this, "RndmSvc", "AthRNGSvc", ""}
Gaudi::Property< uint32_t > m_randomSeedOffset {this, "RandomSeedOffset", 2, ""}
Gaudi::Property< bool > m_useLegacyRandomSeeds
std::array< Gaudi::Property< double >, 4 > m_LowGainThresh
std::array< Gaudi::Property< double >, 4 > m_HighGainThresh
std::array< Gaudi::Property< std::pair< int, int > >, 4 > m_gainRange
Gaudi::Property< unsigned > m_maxADC {this,"maxADC",4096,"Maxium ADC value +1 (for overflow)"}
Gaudi::Property< int > m_NSamples
Gaudi::Property< bool > m_NoiseOnOff
Gaudi::Property< int > m_firstSample
Gaudi::Property< bool > m_usePhase
Gaudi::Property< bool > m_RndmEvtOverlay
Gaudi::Property< bool > m_isMcOverlay
Gaudi::Property< bool > m_doDigiTruth
Gaudi::Property< bool > m_NoiseInEMB
Gaudi::Property< bool > m_NoiseInEMEC
Gaudi::Property< bool > m_NoiseInHEC
Gaudi::Property< bool > m_NoiseInFCAL
Gaudi::Property< bool > m_pedestalNoise
Gaudi::Property< bool > m_roundingNoNoise
Gaudi::Property< bool > m_Windows
Gaudi::Property< float > m_WindowsEtaSize
Gaudi::Property< float > m_WindowsPhiSize
Gaudi::Property< float > m_WindowsPtCut
const CaloCell_IDm_calocell_id {}
const LArEM_IDm_larem_id {}
const LArHEC_IDm_larhec_id {}
const LArFCAL_IDm_larfcal_id {}
const LArOnlineIDm_laronline_id {}

Static Protected Attributes

static constexpr int s_MaxNSamples = 32

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 58 of file LArHitEMapToDigitAlg.h.

Member Typedef Documentation

◆ staticVecDouble_t

using LArHitEMapToDigitAlg::staticVecDouble_t = boost::container::static_vector<double,s_MaxNSamples>
protected

Definition at line 72 of file LArHitEMapToDigitAlg.h.

◆ staticVecFloat_t

using LArHitEMapToDigitAlg::staticVecFloat_t = boost::container::static_vector<float,s_MaxNSamples>
protected

Definition at line 73 of file LArHitEMapToDigitAlg.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ CaloNum

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64{
65 return 0;
66}

◆ chooseGain()

CaloGain::CaloGain LArHitEMapToDigitAlg::chooseGain ( const staticVecDouble_t & samples,
const HWIdentifier id,
const CaloNum iCalo,
const ILArPedestal * ped,
const LArADC2MeV * ramp,
const float SF ) const
protected

Definition at line 733 of file LArHitEMapToDigitAlg.cxx.

734 {
735
736 int sampleGainChoice{2};
737 if (m_firstSample < 0)
738 sampleGainChoice -= m_firstSample;
739
740 // fix the shift +1 if HEC and nSamples 4 and firstSample 0
741 if (iCalo == HEC && m_NSamples.value() == 4 && m_firstSample.value() == 0)
742 sampleGainChoice -= 1; // ihecshift
743
744 CaloGain::CaloGain gainChoosingGain = static_cast<CaloGain::CaloGain>(m_gainRange[iCalo].value().second - 1);
745 // We choose the gain in applying thresholds on the 3rd Sample (index "2")
746 // converted in ADC counts in the second-lowest gain (eg MEDIUM gain for run 1,2,3, HIGH gain for run 4)
747 // Indeed, thresholds in ADC counts are defined with respect to the MediumGain.
748 //
749 // 1300 3900
750 // ---------------|----------------|--------------> ADC counts in MediumGain
751 // HighGain <--- MediumGain ---> LowGain
752
753 float Pedestal = pedestal->pedestal(ch_id, gainChoosingGain);
754 if (Pedestal <= (1.0 + LArElecCalib::ERRORCODE)) {
755 ATH_MSG_DEBUG(" Pedestal not found for channel " << m_laronline_id->channel_name(ch_id) << " assume 1000 ");
756 Pedestal = 1000.;
757 }
758 const auto& polynom_adc2mev = adc2MeVs->ADC2MEV(ch_id, gainChoosingGain);
759 if (polynom_adc2mev.size() < 2) {
760 ATH_MSG_WARNING(" No ramp found for channel " << m_laronline_id->channel_name(ch_id) << ", gain " << gainChoosingGain << ", no digit produced...");
762 }
763 const float pseudoADC3 = samples[sampleGainChoice] / (polynom_adc2mev[1]) / SF + Pedestal;
764
765 CaloGain::CaloGain igain = gainChoosingGain;
766 // if we are not yet already in the highest gain and we are below high-gain theshold, switch to high gain
767 if (gainChoosingGain > m_gainRange[iCalo].value().first && pseudoADC3 < m_HighGainThresh[iCalo]) {
769 }
770
771 else if (gainChoosingGain < m_gainRange[iCalo].value().second && pseudoADC3 > m_LowGainThresh[iCalo]) {
773 }
774
775 return igain;
776}
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
std::array< Gaudi::Property< std::pair< int, int > >, 4 > m_gainRange
Gaudi::Property< int > m_firstSample
const LArOnlineID * m_laronline_id
std::array< Gaudi::Property< double >, 4 > m_LowGainThresh
std::array< Gaudi::Property< double >, 4 > m_HighGainThresh
Gaudi::Property< int > m_NSamples
@ INVALIDGAIN
Definition CaloGain.h:18
@ LARLOWGAIN
Definition CaloGain.h:18
@ LARHIGHGAIN
Definition CaloGain.h:18

◆ ConvertHits2Samples()

StatusCode LArHitEMapToDigitAlg::ConvertHits2Samples ( const EventContext & ctx,
const Identifier & cellId,
HWIdentifier ch_id,
CaloGain::CaloGain igain,
const std::vector< std::pair< float, float > > * TimeE,
staticVecDouble_t & sampleList ) const
protected

Definition at line 611 of file LArHitEMapToDigitAlg.cxx.

615{
616// Converts hits of a particular LAr cell into energy samples
617// declarations
618 int nsamples ;
619 int nsamples_der ;
620 int i ;
621 int j ;
622
623 SG::ReadCondHandle<ILArShape> shapeHdl(m_shapeKey, ctx);
624 const ILArShape* shape=*shapeHdl;
625
626
627// ........ retrieve data (1/2) ................................
628//
629 ILArShape::ShapeRef_t Shape = shape->Shape(ch_id,igain);
630 ILArShape::ShapeRef_t ShapeDer = shape->ShapeDer(ch_id,igain);
631
632 nsamples = Shape.size();
633 nsamples_der = ShapeDer.size();
634
635 if (nsamples==0) {
636 ATH_MSG_INFO(" No samples for cell = " << cellId );
637 return StatusCode::FAILURE;
638 }
639
640#ifndef NDEBUG
641 ATH_MSG_DEBUG(" Cellid " << m_larem_id->show_to_string(cellId));
642 for (i=0;i<nsamples;i++)
643 {
644 ATH_MSG_DEBUG(Shape[i] << " ");
645 }
646 ATH_MSG_DEBUG("m_NSamples, m_usePhase " << m_NSamples << " " << m_usePhase);
647#endif
648
649
650for (const auto& [energy, time] : *TimeE) {
651 // fix the shift +1 if HEC and nSamples 4 and firstSample 0
652 // in case of data overlay this should NOT be done as the pulse shape read from the database is already shifted
653 // but this should still be done in case of MC overlay
654 int ihecshift=0;
655 if((!m_RndmEvtOverlay || m_isMcOverlay) && m_larem_id->is_lar_hec(cellId) && m_NSamples.value() == 4 && m_firstSample.value() == 0) ihecshift=1;
656
657
658 if (!m_usePhase) {
659
660 // Atlas like mode where we use 25ns binned pulse shape and derivative to deal with time offsets
661
662// shift between reference shape and this time
663 int ishift=(int)(rint(time*(1./25.)));
664 double dtime=time-25.*((double)(ishift));
665 for (i=0;i<m_NSamples.value();i++)
666 {
667 j = i - ishift + m_firstSample + ihecshift;
668#ifndef NDEBUG
669 ATH_MSG_DEBUG(" time/i/j " << time << " "<< i << " " << j);
670#endif
671 if (j >=0 && j < nsamples ) {
672 if (j<nsamples_der && std::abs(ShapeDer[j])<10. )
673 sampleList[i] += (Shape[j]- ShapeDer[j]*dtime)*energy ;
674 else sampleList[i] += Shape[j]*energy ;
675 }
676 }
677 }
678// Mode to use phase (tbin) to get pulse shape ( pulse shape with fine time binning should be available)
679
680 else {
681
682 // FIXME hardcode 8phases3ns configuration (cannot access parameters from ILArShape interface now)
683 int nTimeBins = 8;
684 float timeBinWidth = 25./24.*3.;
685
686// -50<t<-25 phase=-t-25, shift by one peak time (for s2 uses shape(3) with tbin)
687// for -25<t<0 phase = -t, no shift of peak time
688// for 0<t<25 phase=25-t, shift by one peak time (for s2 uses shape(1) with tbin)
689// 25<t<50 phase=50-t, shift by two
690// etc...
691
692 int ishift = (int)(time*(1./25.));
693 int tbin;
694 if (time>0) {
695 tbin = (int)(fmod(time,25)/timeBinWidth);
696 if (tbin>0) {
697 tbin=nTimeBins-tbin;
698 ishift +=1;
699 }
700 } else {
701 tbin = (int)(fmod(-time,25)/timeBinWidth);
702 }
703
704 double dtime = time - ( 25.*((float)(ishift)) - timeBinWidth*tbin);
705
706 Shape = shape->Shape(ch_id,igain,tbin);
707 ShapeDer = shape->ShapeDer(ch_id,igain,tbin);
708
709 nsamples = Shape.size();
710 nsamples_der = ShapeDer.size();
711
712
713 for (i=0;i<m_NSamples.value();i++)
714 {
715 j = i - ishift+m_firstSample + ihecshift;
716#ifndef NDEBUG
717 ATH_MSG_DEBUG(" time/i/j " << time << " "<< i << " " << j);
718#endif
719 if (j >=0 && j < nsamples ) {
720 if (j<nsamples_der && std::abs(ShapeDer[j])<10. )
721 sampleList[i] += (Shape[j]- ShapeDer[j]*dtime)*energy ;
722 else sampleList[i] += Shape[j]*energy ;
723 }
724 }
725
726 } // else if of m_usePhase
727 } // loop over hits
728
729 return StatusCode::SUCCESS;
730
731}
#define ATH_MSG_INFO(x)
LArVectorProxy ShapeRef_t
This class defines the interface for accessing Shape (Nsample variable, Dt = 25 ns fixed) @stereotype...
Definition ILArShape.h:26
virtual ShapeRef_t Shape(const HWIdentifier &id, int gain, int tbin=0, int mode=0) const =0
virtual ShapeRef_t ShapeDer(const HWIdentifier &id, int gain, int tbin=0, int mode=0) const =0
Gaudi::Property< bool > m_usePhase
Gaudi::Property< bool > m_isMcOverlay
Gaudi::Property< bool > m_RndmEvtOverlay
SG::ReadCondHandleKey< ILArShape > m_shapeKey
time(flags, cells_name, *args, **kw)

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode LArHitEMapToDigitAlg::execute ( const EventContext & context) const
virtual

Definition at line 113 of file LArHitEMapToDigitAlg.cxx.

113 {
114
115 // load many conditions
117 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey, context};
118 const LArOnOffIdMapping* cabling=*cablingHdl;
119 if(!cabling) {
120 ATH_MSG_ERROR("Failed to retrieve LAr Cabling map with key " << m_cablingKey.key() );
121 return StatusCode::FAILURE;
122 }
123
124 // Inputs
125 SG::ReadHandle<LArHitEMap> hitmap(m_hitMapKey,context);
126 const LArHitEMap* hitmapPtr = hitmap.cptr();
127 const LArHitEMap* hitmapPtr_DigiHSTruth = nullptr;
128 if ( m_doDigiTruth ) {
129 SG::ReadHandle<LArHitEMap> hitmap_DigitHSTruth(m_hitMapKey_DigiHSTruth,context);
130 hitmapPtr_DigiHSTruth = hitmap_DigitHSTruth.cptr();
131 }
132
133 const size_t nCells=hitmapPtr->GetNbCells();
134 // Prepare Output
135 //
136 // For the standard one lets use a DataPool
137 auto DigitContainer = std::make_unique<LArDigitContainer>(SG::VIEW_ELEMENTS);
138 DigitContainer->reserve(nCells);
139 DataPool<LArDigit> dataItemsPool(context);
140 dataItemsPool.reserve(nCells);
141 //
142 // HSTruth output might not be needed so avoid doing anything
143 // in that case
144 std::unique_ptr<LArDigitContainer> DigitContainer_DigiHSTruth = nullptr;
145 if (m_doDigiTruth){
146 DigitContainer_DigiHSTruth = std::make_unique<LArDigitContainer>();
147 DigitContainer_DigiHSTruth->reserve(nCells);
148 }
149 //
150 const std::vector<std::pair<float,float> >* TimeE;
151 const std::vector<std::pair<float,float> >* TimeE_DigiHSTruth = nullptr;
152
153 ATHRNG::RNGWrapper* rngWrapper = m_rndmGenSvc->getEngine(this, m_randomStreamName);
154 CLHEP::HepRandomEngine * engine = rngWrapper->getEngine(context);
156 rngWrapper->setSeedLegacy( m_randomStreamName, context, m_randomSeedOffset, seedingmode );
157
158 for (size_t it=0;it<nCells;++it)
159 {
160 const LArHitList& hitlist = hitmapPtr->GetCell(it);
161
162 if (!m_Windows || hitlist.inWindows()) {
163 TimeE = &(hitlist.getData());
164 if(m_doDigiTruth) {
165 const auto& hitlist_DigiHSTruth=hitmapPtr_DigiHSTruth->GetCell(it);
166 TimeE_DigiHSTruth = &(hitlist_DigiHSTruth.getData());
167 }
168
169 if (!TimeE->empty() || m_NoiseOnOff || m_RndmEvtOverlay) {
170 const Identifier cellID=m_calocell_id->cell_id(IdentifierHash(it));
171 HWIdentifier ch_id = cabling->createSignalChannelIDFromHash(IdentifierHash(it));
172 HWIdentifier febId = m_laronline_id->feb_Id(ch_id);
173 bool missing=!(badFebs->status(febId).good());
174 if (!missing) {
175 const LArDigit * digit = nullptr ;
176 if(m_RndmEvtOverlay) digit = hitmapPtr->GetDigit(it);
177 // MakeDigit called if in no overlay mode or
178 // if in overlay mode and random digit exists
179 if ((!m_RndmEvtOverlay) || (m_RndmEvtOverlay && digit)) {
180 LArDigit* Digit = nullptr;
181 LArDigit* Digit_DigiHSTruth = nullptr;
182 auto sc = MakeDigit(context, cellID, ch_id, Digit,
183 dataItemsPool,
184 Digit_DigiHSTruth, TimeE, digit, engine,
185 TimeE_DigiHSTruth);
186 if (sc.isFailure()){
187 ATH_MSG_ERROR("LArHitEMapToDigitAlg::execute failed in MakeDigit");
188 delete Digit_DigiHSTruth;
189 return sc;
190 }
191 DigitContainer->push_back(Digit);
192 if (DigitContainer_DigiHSTruth){
193 DigitContainer_DigiHSTruth->push_back(Digit_DigiHSTruth);
194 }
195 }
196 }
197 }
198 } // check window
199 } // end of loop over the cells
200
201
202 ATH_MSG_DEBUG(" number of created digits = " << DigitContainer->size());
203
204 SG::WriteHandle<LArDigitContainer> DigitContainerHandle( m_DigitContainerName, context);
205 ATH_CHECK(DigitContainerHandle.record( std::move(DigitContainer) ) );
206 if ( DigitContainer_DigiHSTruth ){
207 SG::WriteHandle<LArDigitContainer> DigitContainer_DigiHSTruthHandle( m_DigitContainerName_DigiHSTruth, context);
208 ATH_CHECK(DigitContainer_DigiHSTruthHandle.record( std::move(DigitContainer_DigiHSTruth) ) );
209 }
210
211
212 return StatusCode::SUCCESS;
213}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
LArBadXCont< LArBadFeb > LArBadFebCont
static Double_t sc
SeedingOptionType
Options for seeding option=0 is setSeed as in MC20 option=1 is setSeedLegacy as in MC16 option=2 is s...
Definition RNGWrapper.h:97
void setSeedLegacy(const std::string &algName, size_t slot, uint64_t ev, uint64_t run, uint64_t offset, SeedingOptionType seeding, EventContext::ContextEvt_t evt=EventContext::INVALID_CONTEXT_EVT)
Set the random seed using a string (e.g.
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition RNGWrapper.h:134
LArBC_t status(const HWIdentifier channel) const
Query the status of a particular channel or FEB This is the main client access method.
Gaudi::Property< bool > m_doDigiTruth
SG::ReadHandleKey< LArHitEMap > m_hitMapKey
const CaloCell_ID * m_calocell_id
SG::ReadHandleKey< LArHitEMap > m_hitMapKey_DigiHSTruth
StatusCode MakeDigit(const EventContext &ctx, const Identifier &cellId, const HWIdentifier &ch_id, LArDigit *&Digit, DataPool< LArDigit > &dataItemsPool, LArDigit *&Digit_DigiHSTruth, const std::vector< std::pair< float, float > > *TimeE, const LArDigit *rndm_digit, CLHEP::HepRandomEngine *engine, const std::vector< std::pair< float, float > > *TimeE_DigiHSTruth=nullptr) const
Gaudi::Property< uint32_t > m_randomSeedOffset
SG::WriteHandleKey< LArDigitContainer > m_DigitContainerName_DigiHSTruth
Gaudi::Property< bool > m_useLegacyRandomSeeds
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Gaudi::Property< bool > m_Windows
Gaudi::Property< bool > m_NoiseOnOff
ServiceHandle< IAthRNGSvc > m_rndmGenSvc
const T * pointerFromKey(const EventContext &context, const SG::ReadCondHandleKey< T > &key) const
SG::ReadCondHandleKey< LArBadFebCont > m_badFebKey
SG::WriteHandleKey< LArDigitContainer > m_DigitContainerName
Gaudi::Property< std::string > m_randomStreamName
size_t GetNbCells(void) const
Definition LArHitEMap.h:42
const LArHitList & GetCell(const unsigned int index) const
Definition LArHitEMap.h:43
const LArDigit * GetDigit(unsigned int index) const
Definition LArHitEMap.h:48
bool inWindows() const
Definition LArHitList.h:26
const LARLIST & getData() const
Definition LArHitList.h:25
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
setRawEt setRawPhi nCells

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

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 & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90{
91 // If we didn't find any symlinks to add, just return the collection
92 // from the base class. Otherwise, return the extended collection.
93 if (!m_extendedExtraObjects.empty()) {
95 }
97}
An algorithm that can be simultaneously executed in multiple threads.

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ initialize()

StatusCode LArHitEMapToDigitAlg::initialize ( )
virtual

Definition at line 23 of file LArHitEMapToDigitAlg.cxx.

24{
25
27 ATH_MSG_ERROR("Requested Nsamples " << m_NSamples << " larger than max "
28 << s_MaxNSamples);
29 return StatusCode::FAILURE;
30 }
33
34 ATH_CHECK(m_shapeKey.initialize());
35 ATH_CHECK(m_fSamplKey.initialize());
36 ATH_CHECK(m_OFCKey.initialize());
37 ATH_CHECK(m_pedestalKey.initialize());
39 ATH_CHECK(m_bcContKey.initialize());
40 ATH_CHECK(m_badFebKey.initialize());
41 ATH_CHECK(m_adc2mevKey.initialize());
42 ATH_CHECK(m_caloMgrKey.initialize());
43
44 ATH_CHECK(m_cablingKey.initialize());
45
46 // helpers
47 //retrieve ID helpers
48 ATH_CHECK(detStore()->retrieve(m_calocell_id,"CaloCell_ID"));
49
50
51 const CaloIdManager* caloIdMgr = nullptr;
52 StatusCode sc = detStore()->retrieve(caloIdMgr);
53 if (sc.isFailure()) {
54 ATH_MSG_ERROR(" Unable to retrieve CaloIdManager from DetectoreStore");
55 return StatusCode::FAILURE;
56 }
57 m_larem_id = caloIdMgr->getEM_ID();
58 m_larhec_id = caloIdMgr->getHEC_ID();
59 m_larfcal_id = caloIdMgr->getFCAL_ID();
60
61 sc = detStore()->retrieve(m_laronline_id);
62 if (sc.isFailure()) {
63 ATH_MSG_ERROR(" Unable to retrieve LArOnlineId from DetectoreStore");
64 return StatusCode::FAILURE;
65 }
66 ATH_CHECK(m_bcMask.buildBitMask(m_problemsToMask,msg()));
67
68 // Services
69 ATH_CHECK(m_rndmGenSvc.retrieve());
70 ATH_CHECK(m_hitMapKey.initialize());
72
73 ATH_CHECK(m_DigitContainerName.initialize());
75
76 // Check consistency of gain-ranges and gain-switching thresholds:
77 std::array<std::pair<int,std::string>,4> iCaloToStr{{{EM,"EM"},{HEC,"HEC"},{FCAL,"FCAL"},{EMIW,"EMIW"}}};
78
79 for (int iCalo = EM; iCalo <= EMIW; ++iCalo) {
80 if ((m_gainRange[iCalo].value().first == CaloGain::LARHIGHGAIN) == (m_HighGainThresh[iCalo] != 0))
81 ATH_MSG_INFO("jobO consistency check: " << iCaloToStr[iCalo] << " has " << ((m_gainRange[iCalo].value().first == CaloGain::LARHIGHGAIN) ? "" : "no ")
82 << " HIGH gain and high Gain threshold=" << m_HighGainThresh[iCalo]);
83 else {
84 ATH_MSG_ERROR("jobO inconsistency! " << iCaloToStr[iCalo] << " has" << ((m_gainRange[iCalo].value().first == CaloGain::LARHIGHGAIN) ? "" : "no ")
85 << " HIGH gain but high Gain threshold=" << m_HighGainThresh[iCalo]);
86 return StatusCode::FAILURE;
87 }
88 if ((m_gainRange[iCalo].value().second == CaloGain::LARLOWGAIN) == (m_LowGainThresh[iCalo] <= m_maxADC))
89 ATH_MSG_INFO("jobO consistency check: Calo " << iCaloToStr[iCalo] << " has" << ((m_gainRange[iCalo].value().first == CaloGain::LARHIGHGAIN) ? "" : "no ")
90 << " LOW gain and high Gain threshold=" << m_LowGainThresh[iCalo] << " (maxADC=" << m_maxADC << ")");
91 else {
92 ATH_MSG_ERROR("jobO inconsistency! Calo " << iCaloToStr[iCalo] << " has" << ((m_gainRange[iCalo].value().first == CaloGain::LARHIGHGAIN) ? "" : "no ")
93 << " LOW gain but high Gain threshold=" << m_LowGainThresh[iCalo] << " (maxADC=" << m_maxADC << ")");
94 return StatusCode::FAILURE;
95 }
96
97 if (m_gainRange[iCalo].value().first == m_gainRange[iCalo].value().second) {
98 ATH_MSG_ERROR(" Calo " << iCaloToStr[iCalo] << " configured to have only one gain. This is not supported.");
99 return Status::FAILURE;
100 }
101 if (m_HighGainThresh[iCalo] >= m_LowGainThresh[iCalo] ) {
102 ATH_MSG_ERROR(" Calo " << iCaloToStr[iCalo] << " High gain threshold > low gain threshold! " << m_HighGainThresh[iCalo] << " >= " << m_LowGainThresh[iCalo]);
103 return Status::FAILURE;
104 }
105
106
107 } //end iCalo loop
108
109 return StatusCode::SUCCESS;
110}
const ServiceHandle< StoreGateSvc > & detStore() const
const LArHEC_ID * getHEC_ID(void) const
const LArFCAL_ID * getFCAL_ID(void) const
const LArEM_ID * getEM_ID(void) const
const LArHEC_ID * m_larhec_id
Gaudi::Property< std::vector< std::string > > m_problemsToMask
static constexpr int s_MaxNSamples
SG::ReadCondHandleKey< LArADC2MeV > m_adc2mevKey
Gaudi::Property< bool > m_pedestalNoise
SG::ReadCondHandleKey< LArBadChannelCont > m_bcContKey
const LArFCAL_ID * m_larfcal_id
SG::ReadCondHandleKey< ILArPedestal > m_pedestalKey
SG::ReadCondHandleKey< ILArNoise > m_noiseKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
SG::ReadCondHandleKey< ILArOFC > m_OFCKey
SG::ReadCondHandleKey< LArAutoCorrNoise > m_autoCorrNoiseKey
SG::ReadCondHandleKey< ILArfSampl > m_fSamplKey
Gaudi::Property< unsigned > m_maxADC
::StatusCode StatusCode
StatusCode definition for legacy code.
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

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.

◆ isClonable()

◆ MakeDigit()

StatusCode LArHitEMapToDigitAlg::MakeDigit ( const EventContext & ctx,
const Identifier & cellId,
const HWIdentifier & ch_id,
LArDigit *& Digit,
DataPool< LArDigit > & dataItemsPool,
LArDigit *& Digit_DigiHSTruth,
const std::vector< std::pair< float, float > > * TimeE,
const LArDigit * rndm_digit,
CLHEP::HepRandomEngine * engine,
const std::vector< std::pair< float, float > > * TimeE_DigiHSTruth = nullptr ) const
protected

Retrieve BadChannels

Definition at line 215 of file LArHitEMapToDigitAlg.cxx.

225 {
226 bool createDigit_DigiHSTruth = true;
227
228
229 int i;
230 short Adc;
231 short Adc_DigiHSTruth;
232
233 std::vector<short> AdcSample(m_NSamples);
234 std::vector<short> AdcSample_DigiHSTruth(m_NSamples);
235
236 float SF=1.;
237 float SigmaNoise;
238 staticVecFloat_t rndm_energy_samples(m_NSamples) ;
239
240
241 SG::ReadCondHandle<LArADC2MeV> adc2mevHdl(m_adc2mevKey, ctx);
242 const LArADC2MeV* adc2MeVs=*adc2mevHdl;
243
244 SG::ReadCondHandle<ILArfSampl> fSamplHdl(m_fSamplKey, ctx);
245 const ILArfSampl* fSampl=*fSamplHdl;
246
247 SG::ReadCondHandle<ILArPedestal> pedHdl(m_pedestalKey, ctx);
248 const ILArPedestal* pedestal=*pedHdl;
249
250 const ILArNoise* noise=nullptr;
252 SG::ReadCondHandle<ILArNoise> noiseHdl(m_noiseKey, ctx);
253 noise=*noiseHdl;
254 }
255
256 const LArAutoCorrNoise* autoCorrNoise=nullptr;
258 SG::ReadCondHandle<LArAutoCorrNoise> autoCorrNoiseHdl(m_autoCorrNoiseKey, ctx);
259 autoCorrNoise=*autoCorrNoiseHdl;
260 }
261
263 SG::ReadCondHandle<LArBadChannelCont> bch{m_bcContKey,ctx};
264 const LArBadChannelCont* bcCont{*bch};
265
266 int iCalo = EM;
267 if (m_larem_id->is_lar_hec(cellId))
268 iCalo = HEC;
269 else if (m_larem_id->is_lar_fcal(cellId))
270 iCalo = FCAL;
271 else if (m_larem_id->is_em_endcap_inner(cellId))
272 iCalo = EMIW;
273
274 CaloGain::CaloGain initialGain=static_cast<CaloGain::CaloGain>(m_gainRange[iCalo].value().first);
276
277// ........ retrieve data (1/2) ................................
278//
279 SF=fSampl->FSAMPL(ch_id);
280
281//
282// ....... dump info ................................
283//
284#ifndef NDEBUG
285 ATH_MSG_DEBUG(" Cellid " << m_larem_id->show_to_string(cellId));
286 ATH_MSG_DEBUG(" SF: " << SF);
287#endif
288
289 staticVecDouble_t Samples;
290 staticVecDouble_t Samples_DigiHSTruth;
291 staticVecDouble_t Noise;
292 Samples.resize(m_NSamples,0);
293 if(m_doDigiTruth) Samples_DigiHSTruth.resize(m_NSamples,0);
294 Noise.resize(m_NSamples,0);
295
296//
297// ....... make the five samples
298//
299
300#ifndef NDEBUG
301 ATH_MSG_DEBUG(" number of hit for this cell " << TimeE->size());
302#endif
303
304//
305// convert Hits into energy samples and add result to Samples assuming LARHIGHGAIN for pulse shape
306//
307 bool isDead = m_bcMask.cellShouldBeMasked(bcCont,ch_id);
308
309
310 if (!isDead) {
311 if( this->ConvertHits2Samples(ctx, cellId,ch_id,initialGain,TimeE, Samples).isFailure() ) {
312 return StatusCode::SUCCESS;
313 }
314 if(m_doDigiTruth && TimeE_DigiHSTruth){
315 if( this->ConvertHits2Samples(ctx, cellId,ch_id,initialGain,TimeE_DigiHSTruth, Samples_DigiHSTruth).isFailure() ) {
316 return StatusCode::SUCCESS;
317 }
318 }
319 }
320
321//
322// .... add random event digit if needed
323//
324 float energy2adc ;
325 float rAdc ;
326 if(m_RndmEvtOverlay && rndmEvtDigit ) // no overlay if missing random digit
327 {
328 rndmGain= rndmEvtDigit->gain();
329 auto polynom_adc2mev =adc2MeVs->ADC2MEV(ch_id,rndmEvtDigit->gain());
330 if (polynom_adc2mev.size() > 1) {
331 float adc2energy = SF * polynom_adc2mev[1];
332 const std::vector<short> & rndm_digit_samples = rndmEvtDigit->samples() ;
333 float Pedestal = pedestal->pedestal(ch_id,rndmEvtDigit->gain());
334 if (Pedestal <= (1.0+LArElecCalib::ERRORCODE)) {
335 ATH_MSG_WARNING(" Pedestal not found in database for this channel offID " << cellId << " Use sample 0 for random");
336 Pedestal = rndm_digit_samples[0];
337 }
338 ATH_MSG_DEBUG(" Params for inverting LAr Digitization: pedestal " << Pedestal << " adc2energy " << adc2energy);
339
340// in case Medium or low gain, take into account ramp intercept in ADC->"energy" computation
341// this requires to take into account the sum of the optimal filter coefficients, as they don't compute with ADC shift
342 float adc0=0.;
343 if (!m_isMcOverlay && rndmEvtDigit->gain()>0) {
344 SG::ReadCondHandle<ILArOFC> larOFC(m_OFCKey, ctx);
345 if (larOFC.cptr() != nullptr) {
346 ILArOFC::OFCRef_t ofc_a = larOFC->OFC_a(ch_id,rndmEvtDigit->gain(),0);
347 float sumOfc=0.;
348 if (ofc_a.size()>0) {
349 for (unsigned int j=0;j<ofc_a.size();j++) sumOfc += ofc_a.at(j);
350 }
351 if (sumOfc>0) adc0 = polynom_adc2mev[0] * SF /sumOfc;
352 }
353 }
354
355 int nmax=m_NSamples;
356 if ((int)(rndm_digit_samples.size()) < m_NSamples) {
358 "Less digit Samples than requested in digitization for cell "
359 << ch_id.get_compact() << " Digit has " << rndm_digit_samples.size()
360 << " samples. Digitization request " << m_NSamples);
361 nmax = rndm_digit_samples.size();
362 }
363 for(i=0 ; i<nmax ; i++)
364 {
365 rAdc = (rndm_digit_samples[i] - Pedestal ) * adc2energy + adc0;
366 rndm_energy_samples[i] = rAdc ;
367 Samples[i] += rAdc ;
368 }
369 }
370 else {
371 ATH_MSG_WARNING(" No ramp found for this random cell " << m_larem_id->show_to_string(cellId) << " for gain " << rndmEvtDigit->gain());
372 }
373 }
374
375
376 CaloGain::CaloGain igain=chooseGain(Samples,ch_id,static_cast<CaloNum>(iCalo),pedestal,adc2MeVs,SF);
377 if (igain==CaloGain::INVALIDGAIN) {
378 return StatusCode::FAILURE;
379 }
380
381 // check that select gain is never lower (higher index number) than random gain in case of overlay
382 igain=std::max(rndmGain,igain);
383
384//
385// recompute Samples if igain != HIGHGAIN
386//
387 if (igain != initialGain ){
388 for (i=0;i<m_NSamples;i++) {
389 if(m_doDigiTruth) Samples_DigiHSTruth[i] = 0.;
390 if (m_RndmEvtOverlay) Samples[i]= rndm_energy_samples[i] ;
391 else Samples[i] = 0.;
392 }
393
394 if (!isDead) {
395 if( this->ConvertHits2Samples(ctx, cellId,ch_id,igain,TimeE, Samples) == StatusCode::FAILURE ) {
396 return StatusCode::SUCCESS;
397 }
398 if(m_doDigiTruth){
399 if( this->ConvertHits2Samples(ctx, cellId,ch_id,igain,TimeE_DigiHSTruth, Samples_DigiHSTruth) == StatusCode::FAILURE ) {
400 return StatusCode::SUCCESS;
401 }
402 }
403 }
404 }
405
406//
407// ........ add the noise ................................
408//
409
410 double Rndm[32]{};
411 int BvsEC=0;
412 if(iCalo==EM || iCalo==EMIW) BvsEC=std::abs(m_larem_id->barrel_ec(cellId));
413
414 bool addedNoise=false;
415 if (m_NoiseOnOff &&
416 ((BvsEC == 1 && m_NoiseInEMB) || (BvsEC > 1 && m_NoiseInEMEC) ||
417 (iCalo == HEC && m_NoiseInHEC) || (iCalo == FCAL && m_NoiseInFCAL)))
418 // add the noise only in the wanted sub-detectors
419 {
420 if (!m_RndmEvtOverlay) {
421 if (!m_pedestalNoise) {
422 SigmaNoise = noise->noise(ch_id, igain);
423 } else {
424 float noise = pedestal->pedestalRMS(ch_id, igain);
425 if (noise >= (1.0 + LArElecCalib::ERRORCODE))
426 SigmaNoise = noise;
427 else
428 SigmaNoise = 0.;
429 }
430 // Sqrt of noise covariance matrix
431 const std::vector<float>& CorGen =
432 autoCorrNoise->autoCorrSqrt(cellId, igain);
433 if (CorGen.size() < (unsigned)m_NSamples * m_NSamples) {
434 ATH_MSG_ERROR("Noise AutoCorr too small, need "
435 << m_NSamples * m_NSamples << " points for "
436 << m_NSamples << " samples.");
437 return StatusCode::FAILURE;
438 }
439
440 RandGaussZiggurat::shootArray(engine, m_NSamples, Rndm, 0., 1.);
441
442 int index;
443 for (int i = 0; i < m_NSamples; i++) {
444 Noise[i] = 0.;
445 for (int j = 0; j <= i; j++) {
446 index = i * m_NSamples + j;
447 Noise[i] += Rndm[j] * CorGen[index];
448 }
449 Noise[i] = Noise[i] * SigmaNoise;
450 }
451 addedNoise = true;
452 } else {
453 // overlay case a priori don't add any noise
454 for (int i = 0; i < m_NSamples; i++)
455 Noise[i] = 0.;
456 // if gain from zerobias events is < gain from mixed events => add extra
457 // noise to account for gain vs noise dependance
458 // done in a simple way without taking into account the time
459 // correlation of this extra noise properly
460 if (rndmEvtDigit) {
461 // if gain of cell is different from ZB event gain
462 if (igain > rndmEvtDigit->gain()) {
463 double SigmaNoiseZB = 0.; // noise in ZB event for gain of ZB event
464 double SigmaNoise = 0.; // noise expected for new gain value
465 double SigmaExtraNoise = 0.; // quadratic difference of noise values
466 if (!m_pedestalNoise) {
467 SigmaNoiseZB = noise->noise(ch_id, rndmEvtDigit->gain());
468 SigmaNoise = noise->noise(ch_id, igain);
469 } else {
470 float noise = pedestal->pedestalRMS(ch_id, rndmEvtDigit->gain());
471 if (noise >= (1.0 + LArElecCalib::ERRORCODE))
472 SigmaNoiseZB = noise;
473 else
474 SigmaNoiseZB = 0.;
475 noise = pedestal->pedestalRMS(ch_id, igain);
476 if (noise >= (1.0 + LArElecCalib::ERRORCODE))
477 SigmaNoise = noise;
478 else
479 SigmaNoise = 0.;
480 }
481 // Convert SigmaNoiseZB in noise in ADC counts for igain conversion
482 auto polynom_adc2mevZB =
483 adc2MeVs->ADC2MEV(cellId, rndmEvtDigit->gain());
484 auto polynom_adc2mev = adc2MeVs->ADC2MEV(cellId, igain);
485 if (polynom_adc2mevZB.size() > 1 && polynom_adc2mev.size() > 1) {
486 if (polynom_adc2mev[1] > 0.) {
487 SigmaNoiseZB = SigmaNoiseZB * (polynom_adc2mevZB[1]) /
488 (polynom_adc2mev[1]);
489 if (SigmaNoise > SigmaNoiseZB)
490 SigmaExtraNoise = sqrt(SigmaNoise * SigmaNoise -
491 SigmaNoiseZB * SigmaNoiseZB);
492 }
493 } // check that AC2MeV factors are there
494 RandGaussZiggurat::shootArray(engine, m_NSamples, Rndm, 0.,
495 1.); // generate noise
496 for (int i = 0; i < m_NSamples; i++)
497 Noise[i] = SigmaExtraNoise * Rndm[i];
498 addedNoise = true;
499 } // different gains
500 } // rndm Digit is there
501 } // rndm Overlay test
502 } // add noise ?
503 //
504// ......... convert into adc counts ................................
505//
506 float Pedestal = pedestal->pedestal(ch_id,igain);
507 if (Pedestal <= (1.0+LArElecCalib::ERRORCODE)) {
508 ATH_MSG_WARNING(" pedestal not found for cellId " << cellId << " assume 1000" );
509 Pedestal=1000.;
510 }
511 const auto polynom_adc2mev = adc2MeVs->ADC2MEV(cellId,igain);
512 if (polynom_adc2mev.size() < 2) {
513 ATH_MSG_WARNING(" No ramp found for requested gain " << igain << " for cell " << m_larem_id->show_to_string(cellId) << " no digit made...");
514 return StatusCode::SUCCESS;
515 }
516
517 energy2adc=1./(polynom_adc2mev[1])/SF;
518
519// in case Medium or low gain, take into account ramp intercept in energy->ADC computation
520// this requires to take into account the sum of the optimal filter coefficients, as they don't compute with ADC shift
521 if(!m_isMcOverlay && m_RndmEvtOverlay && igain>0)
522 {
523 SG::ReadCondHandle<ILArOFC> larOFC(m_OFCKey, ctx);
524 if (larOFC.cptr() != nullptr) {
525 float sumOfc=0.;
526 ILArOFC::OFCRef_t ofc_a = larOFC->OFC_a(ch_id,igain,0);
527 if (ofc_a.size()>0) {
528 for (unsigned int j=0;j<ofc_a.size();j++) sumOfc+= ofc_a.at(j);
529 }
530 if ((polynom_adc2mev[1])>0 && sumOfc>0) Pedestal = Pedestal - (polynom_adc2mev[0])/(polynom_adc2mev[1])/sumOfc;
531 ATH_MSG_DEBUG(" Params for final LAr Digitization gain: " << igain << " pedestal: " << Pedestal << " energy2adc: " << energy2adc);
532 }
533 }
534 for(i=0;i<m_NSamples;i++)
535 {
536 double xAdc;
537 double xAdc_DigiHSTruth = 0;
538
539 if ( addedNoise ){
540 xAdc = Samples[i]*energy2adc + Noise[i] + Pedestal + 0.5;
541 if(m_doDigiTruth) {
542 xAdc_DigiHSTruth = Samples_DigiHSTruth[i]*energy2adc + Noise[i] + Pedestal + 0.5;
543 }
544 }
545
546 else {
547 if (m_roundingNoNoise) {
548 float flatRndm = RandFlat::shoot(engine);
549 xAdc = Samples[i]*energy2adc + Pedestal + flatRndm;
550 if(m_doDigiTruth) {
551 xAdc_DigiHSTruth = Samples_DigiHSTruth[i]*energy2adc + Pedestal + flatRndm;
552 }
553
554 }
555 else{
556 xAdc = Samples[i]*energy2adc + Pedestal + 0.5;
557 if(m_doDigiTruth) {
558 xAdc_DigiHSTruth = Samples_DigiHSTruth[i]*energy2adc + Pedestal + 0.5;
559 }
560 }
561
562 }
563
564//
565// ........ truncate at maximum value + 1
566// add possibility to saturate at 0 for negative signals
567//
568 if (xAdc <0) Adc=0;
569 else if (xAdc >= m_maxADC) Adc=m_maxADC;
570 else Adc = (short) xAdc;
571
572 AdcSample[i]=Adc;
573
574 if(m_doDigiTruth){
575 if (xAdc_DigiHSTruth <0) Adc_DigiHSTruth=0;
576 else if (xAdc_DigiHSTruth >= m_maxADC) Adc_DigiHSTruth=m_maxADC;
577 else Adc_DigiHSTruth = (short) xAdc_DigiHSTruth;
578 AdcSample_DigiHSTruth[i] = Adc_DigiHSTruth;
579 }
580
581#ifndef NDEBUG
582 ATH_MSG_DEBUG(" Sample " << i << " Energy= " << Samples[i] << " Adc=" << Adc);
583#endif
584
585 }
586
587//
588// ...... create the LArDigit .............
589//
590 Digit = dataItemsPool.nextElementPtr();
591 (*Digit)=LArDigit(ch_id,igain,std::move(AdcSample));
592
593 if (m_doDigiTruth && createDigit_DigiHSTruth) {
594 createDigit_DigiHSTruth = false;
595 Digit_DigiHSTruth = nullptr;
596
597 for (int i = 0; i < m_NSamples; i++) {
598 if (Samples_DigiHSTruth[i] != 0)
599 createDigit_DigiHSTruth = true;
600 }
601
602 Digit_DigiHSTruth =
603 new LArDigit(ch_id, igain, std::move(AdcSample_DigiHSTruth));
604 }
605
606 return StatusCode::SUCCESS;
607}
LArBadXCont< LArBadChannel > LArBadChannelCont
const int nmax(200)
pointer nextElementPtr()
obtain the next available element in pool by pointer pool is resized if its limit has been reached On...
LArVectorProxy OFCRef_t
This class defines the interface for accessing Optimal Filtering coefficients for each channel provid...
Definition ILArOFC.h:26
virtual float pedestal(const HWIdentifier &id, int gain) const =0
virtual float pedestalRMS(const HWIdentifier &id, int gain) const =0
access to RMS of Pedestal index by Identifier, and gain setting
virtual const float & FSAMPL(const HWIdentifier &id) const =0
value_type get_compact() const
Get the compact id.
const LArVectorProxy ADC2MEV(const HWIdentifier &id, int gain) const
Definition LArADC2MeV.h:32
const std::vector< float > & autoCorrSqrt(const HWIdentifier &id, int gain) const
Gaudi::Property< bool > m_NoiseInEMEC
Gaudi::Property< bool > m_roundingNoNoise
Gaudi::Property< bool > m_NoiseInEMB
Gaudi::Property< bool > m_NoiseInHEC
boost::container::static_vector< double, s_MaxNSamples > staticVecDouble_t
CaloGain::CaloGain chooseGain(const staticVecDouble_t &samples, const HWIdentifier id, const CaloNum iCalo, const ILArPedestal *ped, const LArADC2MeV *ramp, const float SF) const
StatusCode ConvertHits2Samples(const EventContext &ctx, const Identifier &cellId, HWIdentifier ch_id, CaloGain::CaloGain igain, const std::vector< std::pair< float, float > > *TimeE, staticVecDouble_t &sampleList) const
boost::container::static_vector< float, s_MaxNSamples > staticVecFloat_t
Gaudi::Property< bool > m_NoiseInFCAL
value_type at(size_t i) const
Vector indexing with bounds check.
str index
Definition DeMoScan.py:362
const float SF[NF]
Cross sections for Fluor.

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

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.

◆ pointerFromKey()

template<class T>
const T * LArHitEMapToDigitAlg::pointerFromKey ( const EventContext & context,
const SG::ReadCondHandleKey< T > & key ) const
protected

Definition at line 207 of file LArHitEMapToDigitAlg.h.

207 {
208 SG::ReadCondHandle<T> aHandle(key, context);
209 const T* object = *aHandle;
210 if (object == nullptr) ATH_MSG_ERROR("Object could not be fetched with key " << aHandle.key() );
211 return object;
212}
unsigned long long T

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77{
78 return BaseAlg::sysExecute (ctx);
79}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

107 {
109
110 if (sc.isFailure()) {
111 return sc;
112 }
113
114 ServiceHandle<ICondSvc> cs("CondSvc",name());
115 for (auto h : outputHandles()) {
116 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
117 // do this inside the loop so we don't create the CondSvc until needed
118 if ( cs.retrieve().isFailure() ) {
119 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
120 return StatusCode::SUCCESS;
121 }
122 if (cs->regHandle(this,*h).isFailure()) {
124 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125 << " with CondSvc");
126 }
127 }
128 }
129 return sc;
130}
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ m_adc2mevKey

SG::ReadCondHandleKey<LArADC2MeV> LArHitEMapToDigitAlg::m_adc2mevKey {this,"ADC2MeVKey","LArADC2MeV","SG Key of ADC2MeV conditions object"}
protected

Definition at line 102 of file LArHitEMapToDigitAlg.h.

102{this,"ADC2MeVKey","LArADC2MeV","SG Key of ADC2MeV conditions object"};

◆ m_autoCorrNoiseKey

SG::ReadCondHandleKey<LArAutoCorrNoise> LArHitEMapToDigitAlg::m_autoCorrNoiseKey {this,"AutoCorrNoiseKey","LArAutoCorrNoise","SG Key of AutoCorrNoise conditions object"}
protected

Definition at line 106 of file LArHitEMapToDigitAlg.h.

106{this,"AutoCorrNoiseKey","LArAutoCorrNoise","SG Key of AutoCorrNoise conditions object"};

◆ m_badFebKey

SG::ReadCondHandleKey<LArBadFebCont> LArHitEMapToDigitAlg::m_badFebKey {this, "BadFebKey", "LArBadFeb", "Key of BadFeb object in ConditionsStore"}
protected

Definition at line 109 of file LArHitEMapToDigitAlg.h.

109{this, "BadFebKey", "LArBadFeb", "Key of BadFeb object in ConditionsStore"};

◆ m_bcContKey

SG::ReadCondHandleKey<LArBadChannelCont> LArHitEMapToDigitAlg::m_bcContKey {this, "BadChanKey", "LArBadChannel", "SG key for LArBadChan object"}
protected

Definition at line 108 of file LArHitEMapToDigitAlg.h.

108{this, "BadChanKey", "LArBadChannel", "SG key for LArBadChan object"};

◆ m_bcMask

LArBadChannelMask LArHitEMapToDigitAlg::m_bcMask
protected

Definition at line 111 of file LArHitEMapToDigitAlg.h.

◆ m_cabling

const LArOnOffIdMapping* LArHitEMapToDigitAlg::m_cabling {}
protected

Definition at line 104 of file LArHitEMapToDigitAlg.h.

104{}; //Set in perpareEvent, used also in mergeEvent

◆ m_cablingKey

SG::ReadCondHandleKey<LArOnOffIdMapping> LArHitEMapToDigitAlg::m_cablingKey {this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"}
protected

Definition at line 103 of file LArHitEMapToDigitAlg.h.

103{this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"};

◆ m_calocell_id

const CaloCell_ID* LArHitEMapToDigitAlg::m_calocell_id {}
protected

Definition at line 198 of file LArHitEMapToDigitAlg.h.

198{};

◆ m_caloMgrKey

SG::ReadCondHandleKey<CaloDetDescrManager> LArHitEMapToDigitAlg::m_caloMgrKey {this,"CaloDetDescrManager", "CaloDetDescrManager"}
protected

Definition at line 113 of file LArHitEMapToDigitAlg.h.

113{this,"CaloDetDescrManager", "CaloDetDescrManager"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_DigitContainerName

SG::WriteHandleKey<LArDigitContainer> LArHitEMapToDigitAlg::m_DigitContainerName
protected
Initial value:
{this, "DigitContainer", "LArDigitContainer_MC",
"Name of output digit container"}

Definition at line 121 of file LArHitEMapToDigitAlg.h.

121 {this, "DigitContainer", "LArDigitContainer_MC",
122 "Name of output digit container"}; // output digit container name list

◆ m_DigitContainerName_DigiHSTruth

SG::WriteHandleKey<LArDigitContainer> LArHitEMapToDigitAlg::m_DigitContainerName_DigiHSTruth
protected
Initial value:
{this, "DigitContainer_DigiHSTruth",
"LArDigitContainer_DigiHSTruth", "Name of output signal digit container"}

Definition at line 123 of file LArHitEMapToDigitAlg.h.

123 {this, "DigitContainer_DigiHSTruth",
124 "LArDigitContainer_DigiHSTruth", "Name of output signal digit container"}; // output digit container name list

◆ m_doDigiTruth

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_doDigiTruth
protected
Initial value:
{this, "DoDigiTruthReconstruction", false,
"Also create information about reconstructed digits for HS hits"}

Definition at line 173 of file LArHitEMapToDigitAlg.h.

173 {this, "DoDigiTruthReconstruction", false,
174 "Also create information about reconstructed digits for HS hits"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_firstSample

Gaudi::Property<int> LArHitEMapToDigitAlg::m_firstSample
protected
Initial value:
{this, "firstSample", 0,
"First sample to use for the shape for in-time signal"}

Definition at line 165 of file LArHitEMapToDigitAlg.h.

165 {this, "firstSample", 0,
166 "First sample to use for the shape for in-time signal"}; // first sample to use for pulse shape for in time energy deposit (use a negative value to include preceeding digits)

◆ m_fSamplKey

SG::ReadCondHandleKey<ILArfSampl> LArHitEMapToDigitAlg::m_fSamplKey {this,"fSamplKey","LArfSamplSym","SG Key of LArfSampl object"}
protected

Definition at line 98 of file LArHitEMapToDigitAlg.h.

98{this,"fSamplKey","LArfSamplSym","SG Key of LArfSampl object"};

◆ m_gainRange

std::array<Gaudi::Property<std::pair<int,int> >,4> LArHitEMapToDigitAlg::m_gainRange
protected
Initial value:
{{
{this,"GainRangeEM",{CaloGain::LARHIGHGAIN,CaloGain::LARLOWGAIN},"Range of gains"},
{this,"GainRangeHEC",{CaloGain::LARMEDIUMGAIN,CaloGain::LARLOWGAIN},"Range of gains"},
{this,"GainRangeFCAL",{CaloGain::LARHIGHGAIN,CaloGain::LARLOWGAIN},"Range of gains"},
{this,"GainRangeEMECIW",{CaloGain::LARHIGHGAIN,CaloGain::LARLOWGAIN},"Range of gains"},
}}
@ LARMEDIUMGAIN
Definition CaloGain.h:18

Definition at line 151 of file LArHitEMapToDigitAlg.h.

151 {{
152 {this,"GainRangeEM",{CaloGain::LARHIGHGAIN,CaloGain::LARLOWGAIN},"Range of gains"},
153 {this,"GainRangeHEC",{CaloGain::LARMEDIUMGAIN,CaloGain::LARLOWGAIN},"Range of gains"},
154 {this,"GainRangeFCAL",{CaloGain::LARHIGHGAIN,CaloGain::LARLOWGAIN},"Range of gains"},
155 {this,"GainRangeEMECIW",{CaloGain::LARHIGHGAIN,CaloGain::LARLOWGAIN},"Range of gains"},
156 }};

◆ m_HighGainThresh

std::array<Gaudi::Property<double>,4> LArHitEMapToDigitAlg::m_HighGainThresh
protected
Initial value:
{{
{this,"HighGainThreshEM",1300,"ADC counts in medium gain"},
{this,"HighGainThreshHEC",0,"ADC counts in medium gain"},
{this,"HighGainThreshFCAL",1100,"ADC counts in medium gain"},
{this,"HighGainThreshEMECIW",1300,"ADC counts in medium gain"}
}}

Definition at line 142 of file LArHitEMapToDigitAlg.h.

142 {{
143 {this,"HighGainThreshEM",1300,"ADC counts in medium gain"},
144 {this,"HighGainThreshHEC",0,"ADC counts in medium gain"},
145 {this,"HighGainThreshFCAL",1100,"ADC counts in medium gain"},
146 {this,"HighGainThreshEMECIW",1300,"ADC counts in medium gain"}
147 }};

◆ m_hitMapKey

SG::ReadHandleKey<LArHitEMap> LArHitEMapToDigitAlg::m_hitMapKey {this,"LArHitEMapKey","LArHitEMap"}
protected

Definition at line 116 of file LArHitEMapToDigitAlg.h.

116{this,"LArHitEMapKey","LArHitEMap"};

◆ m_hitMapKey_DigiHSTruth

SG::ReadHandleKey<LArHitEMap> LArHitEMapToDigitAlg::m_hitMapKey_DigiHSTruth {this,"LArHitEMap_DigiHSTruthKey","LArHitEMap_DigiHSTruth"}
protected

Definition at line 117 of file LArHitEMapToDigitAlg.h.

117{this,"LArHitEMap_DigiHSTruthKey","LArHitEMap_DigiHSTruth"};

◆ m_inputDigitContainerKey

SG::ReadHandleKey<LArDigitContainer> LArHitEMapToDigitAlg::m_inputDigitContainerKey
protected
Initial value:
{this, "InputDigitContainer", "",
"Name of input digit container"}

Definition at line 118 of file LArHitEMapToDigitAlg.h.

118 {this, "InputDigitContainer", "",
119 "Name of input digit container"}; // input digit container name

◆ m_isMcOverlay

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_isMcOverlay
protected
Initial value:
{this, "isMcOverlay", false,
"Is input Overlay from MC or data (default=false, from data)"}

Definition at line 171 of file LArHitEMapToDigitAlg.h.

171 {this, "isMcOverlay", false,
172 "Is input Overlay from MC or data (default=false, from data)"}; // true if input RDO for overlay are from MC, false if from data

◆ m_larem_id

const LArEM_ID* LArHitEMapToDigitAlg::m_larem_id {}
protected

Definition at line 199 of file LArHitEMapToDigitAlg.h.

199{};

◆ m_larfcal_id

const LArFCAL_ID* LArHitEMapToDigitAlg::m_larfcal_id {}
protected

Definition at line 201 of file LArHitEMapToDigitAlg.h.

201{};

◆ m_larhec_id

const LArHEC_ID* LArHitEMapToDigitAlg::m_larhec_id {}
protected

Definition at line 200 of file LArHitEMapToDigitAlg.h.

200{};

◆ m_laronline_id

const LArOnlineID* LArHitEMapToDigitAlg::m_laronline_id {}
protected

Definition at line 202 of file LArHitEMapToDigitAlg.h.

202{};

◆ m_LowGainThresh

std::array<Gaudi::Property<double>,4> LArHitEMapToDigitAlg::m_LowGainThresh
protected
Initial value:
{{
{this,"LowGainThreshEM",3900,"ADC counts in medium gain"},
{this,"LowGainThreshHEC",2500,"ADC counts in medium gain"},
{this,"LowGainThreshFCAL",2000,"ADC counts in medium gain"},
{this,"LowGainThreshEMECIW",3900,"ADC counts in medium gain"}
}}

Definition at line 134 of file LArHitEMapToDigitAlg.h.

134 {{
135 {this,"LowGainThreshEM",3900,"ADC counts in medium gain"},
136 {this,"LowGainThreshHEC",2500,"ADC counts in medium gain"},
137 {this,"LowGainThreshFCAL",2000,"ADC counts in medium gain"},
138 {this,"LowGainThreshEMECIW",3900,"ADC counts in medium gain"}
139 }};

◆ m_maxADC

Gaudi::Property<unsigned> LArHitEMapToDigitAlg::m_maxADC {this,"maxADC",4096,"Maxium ADC value +1 (for overflow)"}
protected

Definition at line 158 of file LArHitEMapToDigitAlg.h.

158{this,"maxADC",4096,"Maxium ADC value +1 (for overflow)"};

◆ m_NoiseInEMB

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_NoiseInEMB
protected
Initial value:
{this, "NoiseInEMB", true,
"put noise in EMB (default=true)"}

Definition at line 176 of file LArHitEMapToDigitAlg.h.

176 {this, "NoiseInEMB", true,
177 "put noise in EMB (default=true)"}; // noise in Barrel is off if false

◆ m_NoiseInEMEC

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_NoiseInEMEC
protected
Initial value:
{this, "NoiseInEMEC", true,
"put noise in EMEC (default=true)"}

Definition at line 178 of file LArHitEMapToDigitAlg.h.

178 {this, "NoiseInEMEC", true,
179 "put noise in EMEC (default=true)"}; // noise in EndCap is off if false

◆ m_NoiseInFCAL

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_NoiseInFCAL
protected
Initial value:
{this, "NoiseInFCAL", true,
"put noise in FCAL (default=true)"}

Definition at line 182 of file LArHitEMapToDigitAlg.h.

182 {this, "NoiseInFCAL", true,
183 "put noise in FCAL (default=true)"}; // noise in FCAL is off if false

◆ m_NoiseInHEC

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_NoiseInHEC
protected
Initial value:
{this, "NoiseInHEC", true,
"put noise in HEC (default=true)"}

Definition at line 180 of file LArHitEMapToDigitAlg.h.

180 {this, "NoiseInHEC", true,
181 "put noise in HEC (default=true)"}; // noise in HEC is off if false

◆ m_noiseKey

SG::ReadCondHandleKey<ILArNoise> LArHitEMapToDigitAlg::m_noiseKey {this,"NoiseKey","LArNoiseSym","SG Key of ILArNoise object"}
protected

Definition at line 97 of file LArHitEMapToDigitAlg.h.

97{this,"NoiseKey","LArNoiseSym","SG Key of ILArNoise object"};

◆ m_NoiseOnOff

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_NoiseOnOff
protected
Initial value:
{this, "NoiseOnOff", true,
"put electronic noise (default=true)"}

Definition at line 163 of file LArHitEMapToDigitAlg.h.

163 {this, "NoiseOnOff", true,
164 "put electronic noise (default=true)"}; // noise (in all sub-detectors) is on if true

◆ m_NSamples

Gaudi::Property<int> LArHitEMapToDigitAlg::m_NSamples
protected
Initial value:
{this, "Nsamples", 5,
"Number of ADC samples (default=5)"}

Definition at line 161 of file LArHitEMapToDigitAlg.h.

161 {this, "Nsamples", 5,
162 "Number of ADC samples (default=5)"}; // number of samples in Digit

◆ m_OFCKey

SG::ReadCondHandleKey<ILArOFC> LArHitEMapToDigitAlg::m_OFCKey {this, "OFCKey", "LArOFC", "SG Key of OFC conditions object"}
protected

Definition at line 99 of file LArHitEMapToDigitAlg.h.

99{this, "OFCKey", "LArOFC", "SG Key of OFC conditions object"};

◆ m_pedestalKey

SG::ReadCondHandleKey<ILArPedestal> LArHitEMapToDigitAlg::m_pedestalKey {this,"PedestalKey","LArPedestal","SG Key of LArPedestal object"}
protected

Definition at line 100 of file LArHitEMapToDigitAlg.h.

100{this,"PedestalKey","LArPedestal","SG Key of LArPedestal object"};

◆ m_pedestalNoise

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_pedestalNoise
protected
Initial value:
{this, "PedestalNoise", false,
"Use noise from Pedestal structure instead of LArNoise (default=false)"}

Definition at line 184 of file LArHitEMapToDigitAlg.h.

184 {this, "PedestalNoise", false,
185 "Use noise from Pedestal structure instead of LArNoise (default=false)"};

◆ m_problemsToMask

Gaudi::Property<std::vector<std::string> > LArHitEMapToDigitAlg::m_problemsToMask {this,"ProblemsToMask",{},"Bad-Channel categories to mask entirly"}
protected

Definition at line 110 of file LArHitEMapToDigitAlg.h.

110{this,"ProblemsToMask",{},"Bad-Channel categories to mask entirly"};

◆ m_randomSeedOffset

Gaudi::Property<uint32_t> LArHitEMapToDigitAlg::m_randomSeedOffset {this, "RandomSeedOffset", 2, ""}
protected

Definition at line 129 of file LArHitEMapToDigitAlg.h.

129{this, "RandomSeedOffset", 2, ""}; //

◆ m_randomStreamName

Gaudi::Property<std::string> LArHitEMapToDigitAlg::m_randomStreamName {this, "RandomStreamName", "LArDigitization", ""}
protected

Definition at line 125 of file LArHitEMapToDigitAlg.h.

125{this, "RandomStreamName", "LArDigitization", ""};

◆ m_RndmEvtOverlay

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_RndmEvtOverlay
protected
Initial value:
{this, "RndmEvtOverlay", false,
"Pileup and/or noise added by overlaying random events (default=false)"}

Definition at line 169 of file LArHitEMapToDigitAlg.h.

169 {this, "RndmEvtOverlay", false,
170 "Pileup and/or noise added by overlaying random events (default=false)"}; // Pileup and noise added by overlaying random events

◆ m_rndmGenSvc

ServiceHandle<IAthRNGSvc> LArHitEMapToDigitAlg::m_rndmGenSvc {this, "RndmSvc", "AthRNGSvc", ""}
protected

Definition at line 128 of file LArHitEMapToDigitAlg.h.

128{this, "RndmSvc", "AthRNGSvc", ""};

◆ m_roundingNoNoise

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_roundingNoNoise
protected
Initial value:
{this, "RoundingNoNoise", true,
"if true add random number [0:1[ in no noise case before rounding ADC to integer, if false add only 0.5 average"}

Definition at line 186 of file LArHitEMapToDigitAlg.h.

186 {this, "RoundingNoNoise", true,
187 "if true add random number [0:1[ in no noise case before rounding ADC to integer, if false add only 0.5 average"}; // flag used in NoNoise case: if true add random number [0;1[ in ADC count, if false add only average of 0.5

◆ m_shapeKey

SG::ReadCondHandleKey<ILArShape> LArHitEMapToDigitAlg::m_shapeKey {this,"ShapeKey","LArShapeSym","SG Key of LArShape object"}
protected

Definition at line 101 of file LArHitEMapToDigitAlg.h.

101{this,"ShapeKey","LArShapeSym","SG Key of LArShape object"};

◆ m_useLegacyRandomSeeds

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_useLegacyRandomSeeds
protected
Initial value:
{this, "UseLegacyRandomSeeds", false,
"Use MC16-style random number seeding"}

Definition at line 130 of file LArHitEMapToDigitAlg.h.

130 {this, "UseLegacyRandomSeeds", false,
131 "Use MC16-style random number seeding"};

◆ m_usePhase

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_usePhase
protected
Initial value:
{this, "UsePhase", false,
"use 1ns binned pulse shape (default=false)"}

Definition at line 167 of file LArHitEMapToDigitAlg.h.

167 {this, "UsePhase", false,
168 "use 1ns binned pulse shape (default=false)"}; // use tbin phase to get shape (default = false for Atlas)

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_Windows

Gaudi::Property<bool> LArHitEMapToDigitAlg::m_Windows
protected
Initial value:
{this, "Windows", false,
"Window mode (produce digits only around true e/photon) (default=false)"}

Definition at line 188 of file LArHitEMapToDigitAlg.h.

188 {this, "Windows", false,
189 "Window mode (produce digits only around true e/photon) (default=false)"};

◆ m_WindowsEtaSize

Gaudi::Property<float> LArHitEMapToDigitAlg::m_WindowsEtaSize
protected
Initial value:
{this, "WindowsEtaSize", 0.4,
"Eta size of window (default=0.4)"}

Definition at line 190 of file LArHitEMapToDigitAlg.h.

190 {this, "WindowsEtaSize", 0.4,
191 "Eta size of window (default=0.4)"};

◆ m_WindowsPhiSize

Gaudi::Property<float> LArHitEMapToDigitAlg::m_WindowsPhiSize
protected
Initial value:
{this, "WindowsPhiSize", 0.5,
"Phi size of window (default=0.5)"}

Definition at line 192 of file LArHitEMapToDigitAlg.h.

192 {this, "WindowsPhiSize", 0.5,
193 "Phi size of window (default=0.5)"};

◆ m_WindowsPtCut

Gaudi::Property<float> LArHitEMapToDigitAlg::m_WindowsPtCut
protected
Initial value:
{this, "WindowsPtCut", 5000.,
"Pt cut on e/photons for window mode (Default=5GeV)"}

Definition at line 194 of file LArHitEMapToDigitAlg.h.

194 {this, "WindowsPtCut", 5000.,
195 "Pt cut on e/photons for window mode (Default=5GeV)"};

◆ s_MaxNSamples

int LArHitEMapToDigitAlg::s_MaxNSamples = 32
staticconstexprprotected

Definition at line 70 of file LArHitEMapToDigitAlg.h.


The documentation for this class was generated from the following files: