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

This class provides conversion between ROD data and LArRawChannels. More...

#include <LArRodDecoder.h>

Inheritance diagram for LArRodDecoder:
Collaboration diagram for LArRodDecoder:

Public Member Functions

 LArRodDecoder (const std::string &type, const std::string &name, const IInterface *parent)
 Constructor Standard AlgTool constructor.
virtual ~LArRodDecoder ()
 Destructor.
virtual StatusCode initialize ATLAS_NOT_THREAD_SAFE () override
void setsecfeb (HWIdentifier feb)
uint32_t fillCollectionHLT (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, LArCellCollection &coll, LArRodBlockStructure *&providedRodBlockStructure, uint16_t &rodMinorVersion, uint32_t &robBlockType) const
void fillCollection (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, LArRawChannelContainer &coll, const CaloGain::CaloGain gain) const
void fillCollection (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, LArDigitContainer &coll, const CaloGain::CaloGain gain) const
void fillCollection (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, LArAccumulatedCalibDigitContainer &coll, const CaloGain::CaloGain gain, const LArCalibLineMapping &calibLineMapping) const
void fillCollection (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, LArAccumulatedDigitContainer &coll, const CaloGain::CaloGain gain) const
void fillCollection (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, LArCalibDigitContainer &coll, const CaloGain::CaloGain gain, const LArCalibLineMapping &calibLineMapping, const LArOnOffIdMapping &onOffIdMapping) const
void fillCollection (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, LArFebHeaderContainer &coll, const CaloGain::CaloGain) const
template<class T>
bool check_valid (const T *frag, MsgStream &log) 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 sysInitialize () override
 Perform system initialization for an algorithm.
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

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

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.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

LArRodBlockStructureprepareBlockStructure1 (const uint16_t rodMinorVersion, const uint32_t robBlockType) const
LArRodBlockStructureprepareBlockStructure (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, const CaloGain::CaloGain RequestedGain) const
std::unique_ptr< LArRodBlockStructuremakeBlockStructure (unsigned int rodBlockType, unsigned int rodMinorVersion) const
void setCellEnergy (LArCell *element, int energy, int time, int quality, CaloGain::CaloGain gain) const
void writeFebInfo (LArCellCollection &m_coll, LArFebEnergy &febene) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKey< xAOD::EventInfom_evt {this, "EvtInfo", "EventInfo", "EventInfo name"}
float m_LArCellEthreshold
bool m_readtdc
bool m_febExchange
unsigned int m_febId1
unsigned int m_febId2
unsigned int m_febIdHLT = 0U
int m_firstSample
std::vector< int > m_vFTPreselection
std::vector< int > m_vBEPreselection
std::vector< int > m_vPosNegPreselection
std::vector< unsigned int > m_vFinalPreselection
uint32_t m_StatusMask
uint32_t m_StatusNMask = 0U
const LArOnlineIDm_onlineHelper
std::vector< std::string > m_LArCellCorrNames
std::vector< unsigned int > m_IgnoreCheckFEBs
std::vector< const CaloCellCorrection * > m_LArCellCorrTools
double m_delayScale
SG::SlotSpecificObj< std::vector< std::unique_ptr< LArRodBlockStructure > > > m_blstructs ATLAS_THREAD_SAFE
bool m_MultiDSPMode
bool m_CheckSum
unsigned short m_requiredPhysicsNSamples
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

This class provides conversion between ROD data and LArRawChannels.

Author
H. Ma
Version
0-0-1 , Oct 7, 2002

Modified, Dec 4, 2002 Create either LArRawChannel or LArCell.

Modified, Jan 02, 2003 Moved Encoding part to LArROD_Encoder.

Modified, Jul 23, 2003 by R. Lafaye Added LArDigit support Build on the same structure as LArROD_Encoder No longer an AlgTool

Modified, Aug 5 2003 by W. Lampl Have now functionality to decode:

Modified, Aug 7 2003 by W. Lampl Made a template-function for LArRawChannelCollection and LArRawCellCollection

Modified, Aug 17 2003 by W. Lampl Introduce ability to decode different ROD format versions by using a map of LArRodBlockStructures

Modified, Sept 9 2003 by W. Lampl Change implementation of multiple-version feature. A ROD block type/version is now written as second word of the fragment. Replace std::map by c-style array to increase performance

Modified, Sept 28 2003 by W. Lampl Adapt for new constructor of LArRawChannels. (Needs also gain as parameter)

Modified, November 10 2005 by D.O. Damazio Inclusion of new RodBlock format (Bertrand Laforge). Inclusion of methods for fast decoding of data.

Modified,January 04 2006 by I. Wingerter Inclusion of Accumulated Calib Digit

Modified, May 03 2006 by I. Aracena Inclusion of fillCollectionHLTFeb

Modified, Dec 03 2006 by G. Rosenbaum Loop over all possible pusled calib lines and make isPulsed int which stores which lines 1-4 have been pulsed. (needed for HEC)

Modified Aug 16 2009 by W. Lampl Remove internal accumlation of LArAccumulatedCalibDigit. They are now put in the event store for each substep and contain only data of this substep.

Definition at line 127 of file LArRodDecoder.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ LArRodDecoder()

LArRodDecoder::LArRodDecoder ( const std::string & type,
const std::string & name,
const IInterface * parent )

Constructor Standard AlgTool constructor.

Definition at line 40 of file LArRodDecoder.cxx.

41 : AthAlgTool(type,name,parent),
43 m_readtdc(false),
45 {
46 declareInterface< LArRodDecoder >( this );
47 declareProperty("IgnoreCheckFEBs",m_IgnoreCheckFEBs);
48 declareProperty("CellCorrections",m_LArCellCorrNames );
49 declareProperty("LArCellEthreshold",m_LArCellEthreshold );
50 declareProperty("ReadTDC",m_readtdc);
51 declareProperty("DelayScale",m_delayScale=(25./240.)*CLHEP::ns);
52 declareProperty("FebExchange", m_febExchange=0); //FIXME: Very ugly hack! See explanation in .h file
53 declareProperty("FebId1", m_febId1=0);
54 declareProperty("FebId2", m_febId2=0);
55 declareProperty("FirstSample", m_firstSample=0); //FIXME: Very ugly hack! See explanation in .h file
56
57 declareProperty("BEPreselection",m_vBEPreselection,"For channel-selection: Barrel=0, Endcap=1");
58 declareProperty("PosNegPreselection",m_vPosNegPreselection,"For channel-selection: C-Side:0, A-Side: 1");
59 declareProperty("FTNumPreselection",m_vFTPreselection,"For channel-selection: Feedthrough numbers (e.g. 0 - 31 for barrel)");
60 declareProperty("MultiDSPMode", m_MultiDSPMode=false);
61 declareProperty("CheckSum", m_CheckSum=false);
62 declareProperty("StatusMask", m_StatusMask=0x00000212);
63 declareProperty("RequiredPhysicsNSamples", m_requiredPhysicsNSamples = 0);
64}
AthAlgTool()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
std::vector< std::string > m_LArCellCorrNames
std::vector< int > m_vFTPreselection
const LArOnlineID * m_onlineHelper
std::vector< unsigned int > m_IgnoreCheckFEBs
unsigned int m_febId1
float m_LArCellEthreshold
unsigned short m_requiredPhysicsNSamples
std::vector< int > m_vBEPreselection
unsigned int m_febId2
uint32_t m_StatusMask
std::vector< int > m_vPosNegPreselection

◆ ~LArRodDecoder()

LArRodDecoder::~LArRodDecoder ( )
virtual

Destructor.

Definition at line 67 of file LArRodDecoder.cxx.

68{
69}

Member Function Documentation

◆ ATLAS_NOT_THREAD_SAFE()

virtual StatusCode initialize LArRodDecoder::ATLAS_NOT_THREAD_SAFE ( )
overridevirtual

◆ check_valid()

template<class T>
bool LArRodDecoder::check_valid ( const T * frag,
MsgStream & log ) const
inline

Definition at line 254 of file LArRodDecoder.h.

255{
256
257
258/* FIXME, exception?
259 EventFormat::Error error;
260 if (!frag->is_valid (&error)) {
261 report_error (error, log);
262 return false;
263 }
264 return true;
265*/
266
267 bool ret=false;
268 try {
269 ret=frag->check();
270 }
271 //catch ( .... ) {
272 catch (eformat::Issue& ex) {
273 msg(MSG::WARNING) << "Exception while checking eformat fragment validity: " << ex.what() << endmsg;
274 ret=false;
275 }
276 return ret;
277
278}
#define endmsg
MsgStream & msg() const

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::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 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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< AlgTool > >::evtStore ( )
inlineinherited

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

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::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

◆ fillCollection() [1/6]

void LArRodDecoder::fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
const uint32_t * p,
uint32_t n,
LArAccumulatedCalibDigitContainer & coll,
const CaloGain::CaloGain gain,
const LArCalibLineMapping & calibLineMapping ) const

Definition at line 517 of file LArRodDecoder.cxx.

523{ // Accumulated Digit pointer
524 LArAccumulatedCalibDigit * dg=0 ;
525 CaloGain::CaloGain calogain;
526 uint32_t gain, ntrigger;
527 int dac, delay, NStep=-1, StepIndex=-1;
528 bool ispulsed;
529 uint16_t ispulsed_int;
530 int bitShift;
531 uint32_t FirstGoodFEB=1;
532 int fcNb;
533 std::vector< uint64_t > samplesSum;
534 std::vector< uint64_t > samples2Sum;
535
536 // for(int i=0;i<16;i++)
537 // std::cout << " - " << std::hex << p[i] << std::endl;
538
539 LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
540 if (!BlStruct) return;
541 do
542 {
543 // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
544 if (!BlStruct->hasCalibBlock())
545 {
546 ATH_MSG_DEBUG("No Calib Data for this FEB - NULL event");
547 continue;
548 }
549 if(FirstGoodFEB)
550 {
551 FirstGoodFEB=0;
552 }
553 HWIdentifier fId(Identifier32(BlStruct->getFEBID()));
554 unsigned int fId32 = fId.get_identifier32().get_compact();
555 // RL 20.09.2006 protection against 0 FebId
556 if (!fId32){
557 ATH_MSG_DEBUG("Bad FebID=0x" << std::hex << BlStruct->getFEBID() << " found for this FEB, skipping it!" << std::dec);
558 continue;
559 }
560 // RL 04.17.2008 skip check for some FEBs
561 int do_check=1;
562 std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
563 std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
564 for(; it_feb!=it_feb_end;++it_feb)
565 if(fId==*it_feb) {
566 do_check=0;
567 break;
568 }
569 if(do_check) {
570 //WL 31.10.2007 //check RodStatus-word to catch corrupt events
571 if (BlStruct->getStatus() & m_StatusNMask) {
572 msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
573 continue;
574 }
575 }
576 // RL 05.11.2007 checksum
577 if(m_CheckSum) {
578 uint32_t onsum = BlStruct->onlineCheckSum();
579 uint32_t offsum = BlStruct->offlineCheckSum();
580 if(onsum!=offsum) {
581 msg(MSG::WARNING) << "Checksum error:" << endmsg;
582 msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
583 msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << endmsg;
584 continue;
585 }
586 }
587 if(m_febExchange) {
588 if (fId32 == m_febId1) {
589 fId = HWIdentifier(Identifier32(m_febId2));
590 fId32 = fId.get_identifier32().get_compact();
591 }
592 else if(fId32 == m_febId2) {
593 fId = HWIdentifier(Identifier32(m_febId1));
594 fId32 = fId.get_identifier32().get_compact();
595 }
596 }
597
598 if (m_vFinalPreselection.size()) {
599 unsigned int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
600 if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
601 ATH_MSG_DEBUG("Feedthrough with id " << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
602 continue;
603 }
604 }
605 int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
606 uint32_t idum=0;
607 while (BlStruct->getNextAccumulatedCalibDigit(fcNb,samplesSum,samples2Sum,idum,gain))
608 {
609 ispulsed_int=0;
610 bitShift=0;
611 if (fcNb>=NthisFebChannel)continue;
612 if (samplesSum.size()==0) continue; // Ignore missing cells
613 HWIdentifier cId = m_onlineHelper->channel_Id(fId,fcNb);
614 calogain=(CaloGain::CaloGain)gain;
615 ntrigger=BlStruct->getNTrigger();
616 dac=BlStruct->getDAC();
617 delay=BlStruct->getDelay();
618 NStep=BlStruct->getNStep();
619 if(!NStep) NStep=1; // To be able to decode v6 code
620 StepIndex=BlStruct->getStepIndex();
621 // 08.08.2005 IWS get calib line
622 const std::vector<HWIdentifier>& calibChannelIDs = calibLineMapping.calibSlotLine(cId);
623 if (calibChannelIDs.size()==0) {
624 samplesSum.clear();
625 samples2Sum.clear();
626 continue;// connected channel
627 }
628 //GR: Loop over all the calib chans instead of just looking at the first one and set four bit isPulsed int
629 for(std::vector<HWIdentifier>::const_iterator csl_it=calibChannelIDs.begin(); csl_it!=calibChannelIDs.end();++csl_it){
630 uint32_t calibLine = m_onlineHelper->channel(*csl_it);
631 ispulsed=BlStruct->getPulsed(calibLine);
632 ispulsed_int=( ispulsed_int | ((uint16_t)ispulsed<<bitShift) );
633 bitShift++;
634 }
635
636 dg=new LArAccumulatedCalibDigit(cId, calogain, samplesSum, samples2Sum, ntrigger, dac, delay,
637 (uint16_t)ispulsed_int, NStep, StepIndex);
638
639 coll.push_back(dg);
640 } // End while
641 }//End do loop of FEBs
642 while (BlStruct->nextFEB()); //Get NextFeb
643
644 return;
645}
#define ATH_MSG_DEBUG(x)
double delay(std::size_t d)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const std::vector< HWIdentifier > & calibSlotLine(const HWIdentifier id) const
virtual uint16_t getNStep() const
virtual uint32_t hasCalibBlock() const
virtual uint16_t getDelay() const
virtual bool getPulsed(unsigned channelNumber) const
virtual uint16_t getDAC() const
virtual int getNextAccumulatedCalibDigit(int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &Samples2Sum, uint32_t &nStepTriggers, uint32_t &gain)
virtual uint16_t getStepIndex() const
virtual uint16_t getNTrigger() const
virtual uint32_t offlineCheckSum() const
virtual uint32_t getStatus() const
virtual uint32_t onlineCheckSum() const
std::vector< unsigned int > m_vFinalPreselection
uint32_t m_StatusNMask
LArRodBlockStructure * prepareBlockStructure(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, const CaloGain::CaloGain RequestedGain) const
setWord1 uint16_t
setEventNumber uint32_t

◆ fillCollection() [2/6]

void LArRodDecoder::fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
const uint32_t * p,
uint32_t n,
LArAccumulatedDigitContainer & coll,
const CaloGain::CaloGain gain ) const

Definition at line 647 of file LArRodDecoder.cxx.

649{ // Accumulated Digit pointer
650 LArAccumulatedDigit * dg=0 ;
651 CaloGain::CaloGain calogain;
652 uint32_t gain, ntrigger;
653 //int NStep=-1, StepIndex=-1;
654 int fcNb;
655 std::vector<uint64_t> sampleSum;
656 std::vector< uint64_t > sampleSquare;
657
658 // for(int i=0;i<16;i++)
659 // std::cout << " - " << std::hex << p[i] << std::endl;
660
661 LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
662 if (!BlStruct) return;
663 do
664 {
665 // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
666 if (!BlStruct->hasAccumBlock()) {
667 ATH_MSG_DEBUG("No Accum Data for this FEB - NULL event");
668 continue;
669 }
670 HWIdentifier fId(Identifier32(BlStruct->getFEBID()));
671 unsigned int fId32 = fId.get_identifier32().get_compact();
672 // RL 20.09.2006 protection against 0 FebId
673 if (!fId32) {
674 ATH_MSG_DEBUG("Bad FebID=0x" << std::hex << BlStruct->getFEBID() << " found for this FEB, skipping it!" << std::dec);
675 continue;
676 }
677 // RL 04.17.2008 skip check for some FEBs
678 int do_check=1;
679 std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
680 std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
681 for(; it_feb!=it_feb_end;++it_feb)
682 if(fId==*it_feb) {
683 do_check=0;
684 break;
685 }
686 if(do_check) {
687 //WL 31.10.2007 //check RodStatus-word to catch corrupt events
688 if (BlStruct->getStatus() & m_StatusNMask) {
689 msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
690 continue;
691 }
692 }
693 // RL 05.11.2007 checksum
694 if(m_CheckSum) {
695 uint32_t onsum = BlStruct->onlineCheckSum();
696 uint32_t offsum = BlStruct->offlineCheckSum();
697 if(onsum!=offsum) {
698 msg(MSG::WARNING) << "Checksum error:" << endmsg;
699 msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
700 msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << endmsg;
701 continue;
702 }
703 }
704 if(m_febExchange) {
705 if (fId32 == m_febId1) {
706 fId = HWIdentifier(Identifier32(m_febId2));
707 fId32 = fId.get_identifier32().get_compact();
708 }
709 else if(fId32 == m_febId2) {
710 fId = HWIdentifier(Identifier32(m_febId1));
711 fId32 = fId.get_identifier32().get_compact();
712 }
713 }
714
715 if (m_vFinalPreselection.size()) {
716 unsigned int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
717 if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
718 ATH_MSG_DEBUG("Feedthrough with id " << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
719 continue;
720 }
721 }
722 int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
723 ntrigger=BlStruct->getNTrigger();
724 //NStep=BlStruct->getNStep();
725 //if(!NStep) NStep=1; // To be able to decode v6 code
726 //StepIndex=BlStruct->getStepIndex();
727 while (BlStruct->getNextAccumulatedDigit(fcNb,sampleSum,sampleSquare,gain)) {
728 if (fcNb>=NthisFebChannel)continue;
729 if (sampleSquare.size()==0) continue; // Ignore missing cells
730 HWIdentifier cId = m_onlineHelper->channel_Id(fId,fcNb);
731 calogain=(CaloGain::CaloGain)gain;
732 dg=new LArAccumulatedDigit(cId,calogain,sampleSum,sampleSquare,ntrigger);
733 coll.push_back(dg);
734 } // End while
735 }//End do loop of FEBs
736 while (BlStruct->nextFEB()); //Get NextFeb
737
738 return;
739}
virtual uint32_t hasAccumBlock() const
virtual int getNextAccumulatedDigit(int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &corr2Sum, uint32_t &gain)

◆ fillCollection() [3/6]

void LArRodDecoder::fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
const uint32_t * p,
uint32_t n,
LArCalibDigitContainer & coll,
const CaloGain::CaloGain gain,
const LArCalibLineMapping & calibLineMapping,
const LArOnOffIdMapping & onOffIdMapping ) const

Definition at line 320 of file LArRodDecoder.cxx.

327{ // CalibDigit pointer
328 LArCalibDigit * dg=0 ;
330 CaloGain::CaloGain calogain;
331 int fcNb;
333 bool ispulsed;
334 std::vector<short> samples;
335
336 ATH_MSG_VERBOSE("FillCollection for LArCalibDigitContainer is called.");
337 LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
338 if (!BlStruct) return;
339 if (BlStruct->canSetCalibration()) {
340 dac=BlStruct->getDAC();
341 delay=BlStruct->getDelay();
342 // int iFeb=0, iCan=0; //For debug purpose
343 do
344 {
345 // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
346 if (!BlStruct->hasRawDataBlock()) {
347 ATH_MSG_DEBUG("No Raw Data for this FEB - NULL event for FEBID " << std::hex << BlStruct->getFEBID());
348 continue;
349 }
350 HWIdentifier fId(Identifier32(BlStruct->getFEBID()));
351 unsigned int fId32 = fId.get_identifier32().get_compact();
352 // RL 20.09.2006 protection against 0 FebId
353 if (!fId32){
354 ATH_MSG_DEBUG("Bad FebID=0x"<< std::hex << BlStruct->getFEBID() << " found for this FEB, skipping it!");
355 continue;
356 }
357 // RL 04.17.2008 skip check for some FEBs
358 int do_check=1;
359 std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
360 std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
361 for(; it_feb!=it_feb_end;++it_feb)
362 if(fId==*it_feb) {
363 do_check=0;
364 break;
365 }
366 if(do_check) {
367 //WL 31.10.2007 //check RodStatus-word to catch corrupt events
368 if (BlStruct->getStatus() & m_StatusNMask) {
369 msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
370 continue;
371 }
372 }
373 // RL 05.11.2007 checksum
374 if(m_CheckSum) {
375 uint32_t onsum = BlStruct->onlineCheckSum();
376 uint32_t offsum = BlStruct->offlineCheckSum();
377 if(onsum!=offsum) {
378 msg(MSG::WARNING) << "Checksum error:" << endmsg;
379 msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
380 msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << endmsg;
381 continue;
382 }
383 }
384 if(m_febExchange) {
385 if (fId32 == m_febId1) {
386 fId = HWIdentifier(Identifier32(m_febId2));
387 fId32 = fId.get_identifier32().get_compact();
388 }
389 else if(fId32 == m_febId2) {
390 fId = HWIdentifier(Identifier32(m_febId1));
391 fId32 = fId.get_identifier32().get_compact();
392 }
393 }
394
395 if (m_vFinalPreselection.size()) {
396 unsigned int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
397 if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
398 ATH_MSG_DEBUG("Feedthrough with id 0x" << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
399 continue;
400 }
401 }
402 const int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
403 while (BlStruct->getNextRawData(fcNb,samples,gain))
404 {if (fcNb>=NthisFebChannel)
405 continue;
406 if (samples.size()==0) continue; // Ignore missing cells
407 HWIdentifier cId = m_onlineHelper->channel_Id(fId,fcNb);
408 ispulsed=BlStruct->getPulsed(fcNb);
409
410 calogain=(CaloGain::CaloGain)gain;
411 dg = new LArCalibDigit(cId, calogain, samples, dac, delay, ispulsed);
412 samples.clear();
413 coll.push_back(dg);
414 }
415 }
416 while (BlStruct->nextFEB()); //Get NextFeb
417 }
418 else {//Not a calibration data block, try to get from database
419 ATH_MSG_VERBOSE("Not LArCalibDigit data block found. Building it using DB values");
420 //1st step, get Calib board config object
421 const LArCalibParams* calibParams = nullptr;
422 StatusCode sc=detStore()->retrieve(calibParams);
423 if (sc.isFailure())
424 {msg(MSG::ERROR) << "Cannot load LArCalibParams from DetStore!" << endmsg;
425 return;
426 }
427 //2st step, get Event number
428 SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
429 if (!evt.isValid()) {
430 ATH_MSG_ERROR("Cannot get EventInfo");
431 return; //Return empty container.
432 }
433 const unsigned eventNb=evt->eventNumber();
434 const std::vector<HWIdentifier>* calibChannelIDs;
435 do { //Loop over all FEBs in this ROD
436
437 // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
438 if (!BlStruct->hasRawDataBlock()) {
439 ATH_MSG_DEBUG("No Raw Data for this FEB - NULL event for FEBID 0x" << std::hex << BlStruct->getFEBID() << std::dec);
440 continue;
441 }
442 HWIdentifier fId(Identifier32(BlStruct->getFEBID()));
443 unsigned int fId32 = fId.get_identifier32().get_compact();
444 // RL 20.09.2006 protection against 0 FebId
445 if (!fId32) {
446 ATH_MSG_DEBUG("Bad FebID=0x" << std::hex << BlStruct->getFEBID() << " found for this FEB, skipping it!" << std::dec);
447 continue;
448 }
449 if(m_febExchange) {
450 if (fId32 == m_febId1) {
451 fId = HWIdentifier(Identifier32(m_febId2));
452 fId32 = fId.get_identifier32().get_compact();
453 }
454 else if(fId32 == m_febId2) {
455 fId = HWIdentifier(Identifier32(m_febId1));
456 fId32 = fId.get_identifier32().get_compact();
457 }
458 }
459 fcNb=0;
460 HWIdentifier cId;
461 do { //Search for the first connected channel of this FEB (probably the first one...)
462 fcNb++;
463 cId = m_onlineHelper->channel_Id(fId,fcNb);
464 calibChannelIDs=&calibLineMapping.calibSlotLine(cId);
465 }
466 while ( (!onOffIdMapping.isOnlineConnected(cId) || calibChannelIDs->size()==0) && fcNb<128); // This is the right conditions to exit the loop!
467
468 if ( calibChannelIDs->size()==0 ) {
469 msg(MSG::ERROR) << "Cannot get calibration Channel ID for FEB " << std::hex << fId32 << std::dec << endmsg;
470 return;
471 }
472
475
476 std::vector<HWIdentifier>::const_iterator csl_it=calibChannelIDs->begin();
477 //Derive DAC and Delay value from this channel
478 dac=calibParams->DAC(eventNb,*csl_it);
479 delay=calibParams->Delay(eventNb,*csl_it);
480
481 //Now start looping over channels in FEB
482 const int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
483 //std::cout << "Processing FEB #" << iFeb++ << std::endl;
484
485 //int iCan=0;
486
487 fcNb=0;
488 while (BlStruct->getNextRawData(fcNb,samples,gain))
489 {
490 if (fcNb>=NthisFebChannel) continue;
491 if (samples.size()==0) continue; // Ignore missing cells
492 cId = m_onlineHelper->channel_Id(fId,fcNb);
493 calibChannelIDs=&calibLineMapping.calibSlotLine(cId);
494 //if (calibChannelIDs->size()==0)
495 //continue; //Disconnected channel
496 //For the time being, I assume we are in H8 and have only one calib channel per FEB channel
497
498 if (calibChannelIDs->size()!=0) {
499 csl_it=calibChannelIDs->begin();
500 ispulsed=calibParams->isPulsed(eventNb,*csl_it);
501
502 } else ispulsed=0;
503 calogain=(CaloGain::CaloGain)gain;
504 dg = new LArCalibDigit(cId, calogain, samples, dac, delay, ispulsed);
505 samples.clear();
506
507 coll.push_back(dg);
508 //iCan++;
509 }
510 }
511 while (BlStruct->nextFEB()); //Get NextFeb
512 }
514 return;
515}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
static Double_t sc
const ServiceHandle< StoreGateSvc > & detStore() const
void setDelayScale(const double scale)
set delay scale
unsigned Delay(const unsigned event, const HWIdentifier calibLineID) const
bool isPulsed(const unsigned event, const HWIdentifier calibLineID) const
unsigned DAC(const unsigned event, const HWIdentifier calibLineID) const
bool isOnlineConnected(const HWIdentifier &sid) const
Test whether a HWIdentifier is connected of not (inline)
virtual uint32_t hasRawDataBlock() const
virtual bool canSetCalibration()
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
SG::ReadHandleKey< xAOD::EventInfo > m_evt
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ fillCollection() [4/6]

void LArRodDecoder::fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
const uint32_t * p,
uint32_t n,
LArDigitContainer & coll,
const CaloGain::CaloGain gain ) const

Definition at line 137 of file LArRodDecoder.cxx.

139{ // Digit pointer
140 LArDigit * dg=0 ;
141 CaloGain::CaloGain calogain;
143 int fcNb;
144 std::vector<short> samples;
145 LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
146 if (!BlStruct) return;
147
148 do {
149 HWIdentifier fId( Identifier32(BlStruct->getFEBID()) );
150 unsigned int fId32 = fId.get_identifier32().get_compact();
151 if (!m_onlineHelper->isValidId(fId)) {
152 msg(MSG::WARNING) << "Invalid FEB identifer 0x" << std::hex << fId32 << std::dec << ". Skipping" << endmsg;
153 continue;
154 }
155 // std::cout << "digit FEBID=" << std::hex<< " " <<fId32 << std::dec<<std::endl;
156 if(m_febExchange) {
157 if (fId32 == m_febId1) {
158 fId = HWIdentifier(Identifier32(m_febId2));
159 fId32 = fId.get_identifier32().get_compact();
160 }
161 else if(fId32 == m_febId2) {
162 fId = HWIdentifier(Identifier32(m_febId1));
163 fId32 = fId.get_identifier32().get_compact();
164 }
165 }
166
167 // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
168 if (!BlStruct->hasRawDataBlock())
169 {
170 ATH_MSG_DEBUG("No Raw Data for this FEB - NULL event for FEBID 0x"<< std::hex << BlStruct->getFEBID() << std::dec);
171 continue;
172 }
173
174 // RL 04.17.2008 skip check for some FEBs
175 int do_check=1;
176 std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
177 std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
178 for(; it_feb!=it_feb_end;++it_feb)
179 if(fId==*it_feb) {
180 do_check=0;
181 break;
182 }
183 if(do_check) {
184 //WL 31.10.2007 //check RodStatus-word to catch corrupt events
185 if (BlStruct->getStatus() & m_StatusNMask) {
186 msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
187 continue;
188 }
189 }
190 // RL 05.11.2007 checksum
191 if(m_CheckSum) {
192 const uint32_t onsum = BlStruct->onlineCheckSum();
193 const uint32_t offsum = BlStruct->offlineCheckSum();
194 if(onsum!=offsum) {
195 msg(MSG::WARNING) << "Checksum error for FEB: " << MSG::hex << fId32 << endmsg;
196 msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
197 msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << MSG::dec << endmsg;
198 continue;
199 }
200 }
201
202 if (m_vFinalPreselection.size()) {
203 const unsigned int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
204 if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
205 ATH_MSG_DEBUG("Feedthrough with id 0x" << MSG::hex << ftId << MSG::dec <<" not in preselection. Ignored.");
206 continue;
207 }
208 }
209 const int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
210 while (BlStruct->getNextRawData(fcNb,samples,gain))
211 {if (fcNb>=NthisFebChannel)
212 continue;
213 if (samples.size()==0) continue; // Ignore missing cells
214 HWIdentifier cId = m_onlineHelper->channel_Id(fId,fcNb);
215 calogain=(CaloGain::CaloGain)gain;
216 dg = new LArDigit(cId, calogain, std::move(samples));
217 samples.clear();
218 coll.push_back(dg);
219 }
220 }
221 while (BlStruct->nextFEB()); //Get NextFeb
222 return;
223}

◆ fillCollection() [5/6]

void LArRodDecoder::fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
const uint32_t * p,
uint32_t n,
LArFebHeaderContainer & coll,
const CaloGain::CaloGain RequestedGain ) const

Definition at line 741 of file LArRodDecoder.cxx.

743{
744 LArFebHeader* larFebHeader;
745 //uint32_t NWtot=0;
746 HWIdentifier FEBID;
747
748 // for(int i=0;i<16;i++)
749 // std::cout << " - " << std::hex << p[i] << std::endl;
750
751 LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
752 if (!BlStruct) return;
753
754 do{
755 //Read first FEB. The header of this feb is combined with the ROD-Header
756 //NWtot=BlStruct->getNumberOfWords();
757 //if(NWtot<=4) continue;
758
759 FEBID=HWIdentifier(Identifier32(BlStruct->getFEBID()));
760 unsigned int FEBID32 = FEBID.get_identifier32().get_compact();
761 if (!m_onlineHelper->isValidId(FEBID)) {
762 msg(MSG::WARNING) << "Invalid FEB identifer " << std:: hex << FEBID32 << std::dec << ". Skipping" << endmsg;
763 continue;
764 }
765
766 if(m_febExchange) {
767 if (FEBID32 == m_febId1) {
768 FEBID = HWIdentifier(Identifier32(m_febId2));
769 FEBID32 = FEBID.get_identifier32().get_compact();
770 }
771 else if(FEBID32 == m_febId2) {
772 FEBID = HWIdentifier(Identifier32(m_febId1));
773 FEBID32 = FEBID.get_identifier32().get_compact();
774 }
775 }
776
777 if (m_vFinalPreselection.size()) {
778 const unsigned int ftId=m_onlineHelper->feedthrough_Id(FEBID).get_identifier32().get_compact();
779 if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
780 ATH_MSG_DEBUG("Feedthrough with id 0x" << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
781 continue;
782 }
783 }
784
785
786
787 larFebHeader=new LArFebHeader(FEBID);
788 //setROD header data
789
790 larFebHeader->SetFormatVersion(robFrag.rod_version());
791 larFebHeader->SetSourceId(robFrag.rod_source_id());
792 larFebHeader->SetRunNumber(robFrag.rod_run_no());
793 larFebHeader->SetELVL1Id(robFrag.rod_lvl1_id());
794 larFebHeader->SetBCId(robFrag.rod_bc_id());
795 larFebHeader->SetLVL1TigType(robFrag.rod_lvl1_trigger_type());
796 larFebHeader->SetDetEventType(robFrag.rod_detev_type());
797
798 //set DSP data
799 const unsigned nsample=BlStruct->getNumberOfSamples();
800 const uint32_t status= BlStruct->getStatus();
801 larFebHeader->SetDspCodeVersion(BlStruct->getDspCodeVersion());
802 larFebHeader->SetDspEventCounter(BlStruct->getDspEventCounter());
803 larFebHeader->SetRodResults1Size(BlStruct->getResults1Size());
804 larFebHeader->SetRodResults2Size(BlStruct->getResults2Size());
805 larFebHeader->SetRodRawDataSize(BlStruct->getRawDataSize());
806 larFebHeader->SetNbSweetCells1(BlStruct->getNbSweetCells1());
807 larFebHeader->SetNbSweetCells2(BlStruct->getNbSweetCells2());
808 larFebHeader->SetNbSamples(nsample);
809 larFebHeader->SetOnlineChecksum(BlStruct->onlineCheckSum());
810 larFebHeader->SetOfflineChecksum(BlStruct->offlineCheckSum());
811
812 if(!BlStruct->hasControlWords()) {
813 larFebHeader->SetFebELVL1Id(robFrag.rod_lvl1_id());
814 larFebHeader->SetFebBCId(robFrag.rod_bc_id());
815 } else {
816 const uint16_t evtid = BlStruct->getCtrl1(0) & 0x1f;
817 const uint16_t bcid = BlStruct->getCtrl2(0) & 0x1fff;
818
819 larFebHeader->SetFebELVL1Id(evtid);
820 larFebHeader->SetFebBCId(bcid);
821 for(int iadc=0;iadc<16;iadc++) {
822 larFebHeader->SetFebCtrl1(BlStruct->getCtrl1(iadc));
823 larFebHeader->SetFebCtrl2(BlStruct->getCtrl2(iadc));
824 larFebHeader->SetFebCtrl3(BlStruct->getCtrl3(iadc));
825 }
826 for(unsigned int i = 0; i<nsample; i++ ) {
827 larFebHeader->SetFebSCA(BlStruct->getRadd(0,i) & 0xff);
828 }
829 }
830 larFebHeader->SetRodStatus(status);
831 coll.push_back(larFebHeader);
832
833 } while (BlStruct->nextFEB()); //Get NextFeb
834}
value_type get_compact() const
Get the compact id.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
void SetRodResults1Size(const uint16_t size)
set the ROD block sizes
void SetOnlineChecksum(const uint32_t checksum)
void SetNbSweetCells2(const uint16_t n)
void SetRodStatus(const uint32_t status)
set the ROD Status
void SetFebBCId(const uint16_t bcid)
set the FEB Bunch Crossing ID
void SetFebCtrl2(const uint16_t ctrl2)
set the FEB Control Word #2
void SetFormatVersion(const uint32_t formatVersion)
set the format version
void SetOfflineChecksum(const uint32_t checksum)
void SetFebSCA(const uint16_t sca)
set the SCA's
void SetDetEventType(const uint32_t detEvType)
set the Detector event type ID
void SetDspEventCounter(const uint32_t eventCounter)
set the Event number counted by the DSP code
void SetLVL1TigType(const uint32_t lvl1ttype)
set the Level1 trigger type ID
void SetRodRawDataSize(const uint16_t size)
void SetFebCtrl3(const uint16_t ctrl3)
set the FEB Control Word #3
void SetFebCtrl1(const uint16_t ctrl1)
set the FEB Control Word #1
void SetBCId(const uint16_t bcid)
set the Bunch Crossing ID
void SetFebELVL1Id(const uint16_t elvl1Id)
set the FEB Event ID
void SetRunNumber(const uint32_t runNumber)
set the run number
void SetSourceId(const uint32_t sourceID)
set the source Id
void SetRodResults2Size(const uint16_t size)
void SetDspCodeVersion(const uint32_t codeVersion)
set the version of the DSP code
void SetNbSweetCells1(const uint16_t n)
set the number of samples and cells above thresholds
void SetNbSamples(const uint16_t n)
void SetELVL1Id(const uint16_t elvl1Id)
set the EventID
virtual uint16_t getCtrl1(uint32_t adc) const
virtual uint16_t getCtrl3(uint32_t adc) const
virtual uint16_t getResults1Size() const
virtual uint16_t getRawDataSize() const
virtual uint32_t getDspCodeVersion() const
virtual uint16_t getCtrl2(uint32_t adc) const
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
virtual uint16_t getNbSweetCells2() const
virtual uint32_t getNumberOfSamples() const
virtual uint32_t hasControlWords() const
virtual uint16_t getResults2Size() const
virtual uint16_t getNbSweetCells1() const
virtual int32_t getDspEventCounter() const
status
Definition merge.py:16
setEventNumber setTimeStamp bcid

◆ fillCollection() [6/6]

void LArRodDecoder::fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
const uint32_t * p,
uint32_t n,
LArRawChannelContainer & coll,
const CaloGain::CaloGain gain ) const

Definition at line 228 of file LArRodDecoder.cxx.

230{
231 int32_t energy;
232 int32_t time;
233 int32_t quality;
235 int fcNb;
236 HWIdentifier cId;
237 LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
238 if (!BlStruct) return;
239
240 do {
241 HWIdentifier fId( Identifier32(BlStruct->getFEBID()) );
242 unsigned int fId32 = fId.get_identifier32().get_compact();
243 if (!m_onlineHelper->isValidId(fId)) {
244 msg(MSG::WARNING) << "Invalid FEB identifer " << std::hex << fId32 << std::dec << ". Skipping" << endmsg;
245 continue;
246 }
247 // std::cout << "rawChan FEBID=" << std::hex <<fId32 << std::dec<<std::endl;
248
249 if(m_febExchange) {
250 if (fId32 == m_febId1) {
251 fId = HWIdentifier(Identifier32(m_febId2));
252 fId32 = fId.get_identifier32().get_compact();
253 }
254 else if(fId32 == m_febId2) {
255 fId = HWIdentifier(Identifier32(m_febId1));
256 fId32 = fId.get_identifier32().get_compact();
257 }
258 }
259 if (!BlStruct->hasPhysicsBlock()) {
260 ATH_MSG_DEBUG("No Physics Data for this FEB - NULL event for FEBID 0x" << std::hex << BlStruct->getFEBID() << std::dec);
261 continue;
262 }
263
264 // RL 04.17.2008 skip check for some FEBs
265 int do_check=1;
266 std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
267 std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
268 for(; it_feb!=it_feb_end;++it_feb)
269 if(fId==*it_feb) {
270 do_check=0;
271 break;
272 }
273 if(do_check) {
274 //WL 31.10.2007 //check RodStatus-word to catch corrupt events
275 if (BlStruct->getStatus() & m_StatusNMask) {
276 msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
277 continue;
278 }
279 }
280
281 // RL 05.11.2007 checksum
282 if(m_CheckSum) {
283 const uint32_t onsum = BlStruct->onlineCheckSum();
284 const uint32_t offsum = BlStruct->offlineCheckSum();
285 if(onsum!=offsum) {
286 msg(MSG::WARNING) << "Checksum error:" << endmsg;
287 msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
288 msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << endmsg;
289 continue;
290 }
291 }
292
293 if (m_vFTPreselection.size()) {
294 int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
295 if (!std::binary_search(m_vFTPreselection.begin(), m_vFTPreselection.end(),ftId)) {
296 ATH_MSG_DEBUG("Feedthrough with id " << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
297 continue;
298 }
299 }
300 const int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
301 while (BlStruct->getNextEnergy(fcNb,energy,time,quality,gain)) {
302 if (fcNb>=NthisFebChannel)
303 continue;
304 cId = m_onlineHelper->channel_Id(fId,fcNb);
305 uint16_t iquality = 0;
306 uint16_t iprovenance = 0x1000;
307 if (quality>0) {
308 iprovenance |= 0x2000;
309 iquality = (quality & 0xFFFF);
310 }
311 LArRawChannel chan(cId, energy, time, iquality, iprovenance, (CaloGain::CaloGain)gain);
312 coll.push_back(chan);
313 }
314 }
315 while (BlStruct->nextFEB()); //Get NextFeb
316 return;
317}
virtual uint32_t hasPhysicsBlock() const
virtual int getNextEnergy(int &channelNumber, int32_t &energy, int32_t &time, int32_t &quality, uint32_t &gain)
time(flags, cells_name, *args, **kw)

◆ fillCollectionHLT()

uint32_t LArRodDecoder::fillCollectionHLT ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
const uint32_t * p,
uint32_t n,
LArCellCollection & coll,
LArRodBlockStructure *& providedRodBlockStructure,
uint16_t & rodMinorVersion = rMV,
uint32_t & robBlockType = rBT ) const
inline

Definition at line 290 of file LArRodDecoder.h.

294{
295 LArCell *collElem=0; //Pointer to a new element to be added to the collection
296 uint32_t error = 0;
297
298#ifndef NDEBUG
299 ATH_MSG_VERBOSE("Prepare LArRodBlockStructure. Got a fragment of size " << n);
300#endif
301/* if (n<2) //Avoid segmentation fault
302 {(*m_log) << MSG::WARNING << "Got empty Rod Fragment!" << endmsg;
303 return;
304 }
305*/
306 const uint32_t blocksize=p[0]; //First word contains block size
307 if (blocksize>n) {
308 msg(MSG::ERROR) << "Got truncated ROD Fragment!" << endmsg;
309 // First Bit is truncated (see also below)
310 error|= 0x1;
311 return error;
312 }
313
314 //Get version and blocktype form header
315 eformat::helper::Version ver(robFrag.rod_version());
316 const uint16_t rMV_present=ver.minor_version();
317 const uint32_t rBT_present=robFrag.rod_detev_type()&0xff;
318
319 LArRodBlockStructure* BlStruct(nullptr);
320 if ( !providedRodBlockStructure || (rodMinorVersion!=rMV_present) || (robBlockType!=rBT_present) ){
321 BlStruct = prepareBlockStructure1 (rMV_present, rBT_present);
322 if (!BlStruct) {
323 // Second Bit is block empty or unknown
324 error|= 0x2;
325 return error;
326 }
327 providedRodBlockStructure = BlStruct;
328 rodMinorVersion = rMV_present;
329 robBlockType = rBT_present;
330 } else BlStruct = providedRodBlockStructure;
331
332 BlStruct->setFragment(p,n);
333 for(LArCellCollection::iterator ii=coll.begin();ii!=coll.end();++ii)
334 (*ii)->setEnergyFast(0.0);
335
336 int32_t energy(0);
337 int32_t time;
338 int32_t quality;
340 CaloGain::CaloGain calogain;
341 int fcNb;
342 int nfeb;
343 calogain=CaloGain::LARNGAIN;
344 if(!BlStruct->setGain(calogain)){
345 ATH_MSG_DEBUG("Setting the Gain Problem");
346 }
347
348 int feb_number=0;
349 do //Loop over FEB's
350 {
351 HWIdentifier fId(BlStruct->getFEBID());
352 if (!(fId.get_identifier32().get_compact())) {
353#ifndef NDEBUG
354 ATH_MSG_DEBUG("Bad FebID=0x"<< std::hex << BlStruct->getFEBID() << std::dec << " found for this FEB, skipping it!");
355#endif
356 // Third Bit is FEB ID issue (disabled - use 0x20 instead)
357 //error|= 0x4;
358 continue;
359 }
360 // RL 05.11.2007 checksum
361 if(m_CheckSum) {
362 uint32_t onsum = BlStruct->onlineCheckSum();
363 uint32_t offsum = BlStruct->offlineCheckSum();
364 if(onsum!=offsum) {
365 msg(MSG::WARNING) << "Checksum error:" << endmsg;
366 msg(MSG::WARNING) << " online checksum = 0x" << MSG::hex << onsum << endmsg;
367 msg(MSG::WARNING) << " offline checksum = 0x" << MSG::hex << offsum << MSG::dec << endmsg;
368 // Fourth Bit CheckSum issue (maybe disabled!)
369 error|= 0x8;
370 continue;
371 }
372 }
373 feb_number++;
374
375 if ( BlStruct->hasPhysicsBlock() ) {
376 if ( fId == m_febIdHLT ) nfeb = 128; // This is the second feb
377 else nfeb = 0;
378 int NthisFebChannel=128 ; // m_onlineHelper->channelInSlotMax(fId);
379 uint16_t iquality;
380 uint16_t iprovenance;
381 while (BlStruct->getNextEnergy(fcNb,energy,time,quality,gain)) {
382 if (fcNb>=NthisFebChannel) continue;
383 collElem = coll[fcNb+nfeb];
384 iprovenance=0x1000; // data comes from DSP computation
385 iquality=0;
386 if ( quality>=0 ) { iprovenance|= 0x2000; iquality=(quality& 0xffff);}
387 // time converted to ns
388 collElem->set(energy, time*1e-3, iquality, iprovenance, (CaloGain::CaloGain)gain);
389 //setCellEnergy(collElem,energy, time, quality, (CaloGain::CaloGain)gain);
390 }
391 continue;
392 }
393 }
394 while (BlStruct->nextFEB()); //Get NextFeb
395 // Error meaning data corruption. Maybe in any FEB
396 if ( BlStruct->report_error() ) error |= 0x1;
397 // error of uncompatible number of cells is bit 5
398 unsigned int collection_size = coll.size();
399 if ( feb_number== 0 && collection_size>0 ) error |= 0x20;
400 if ( feb_number== 1 && collection_size !=128 ) error |= 0x20;
401 if ( feb_number== 2 && collection_size !=256 ) error |= 0x20;
402 return error;
403}
void set(const CaloDetDescrElement *caloDDE, const Identifier &ID)
Fast method to change the identity of a cell.
Definition CaloCell.h:511
DataModel_detail::iterator< DataVector > iterator
Definition DataVector.h:842
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
bool setFragment(const uint32_t *p, uint32_t n)
unsigned int m_febIdHLT
LArRodBlockStructure * prepareBlockStructure1(const uint16_t rodMinorVersion, const uint32_t robBlockType) const
@ LARNGAIN
Definition CaloGain.h:19

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::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.

◆ interfaceID()

const InterfaceID & LArRodDecoder::interfaceID ( )
static

Definition at line 71 of file LArRodDecoder.cxx.

72{ return IID_ILArRodDecoder; }
static const InterfaceID IID_ILArRodDecoder("LArRodDecoder", 1, 0)

◆ makeBlockStructure()

std::unique_ptr< LArRodBlockStructure > LArRodDecoder::makeBlockStructure ( unsigned int rodBlockType,
unsigned int rodMinorVersion ) const
private

Definition at line 914 of file LArRodDecoder.cxx.

916{
917 switch (rodBlockType) {
918 case 2:
919 // RodBlockType 2 = Transparent mode only
920 switch (rodMinorVersion) {
921 case 0: // Transparent mode v0 05.01.2004
922 case 1: // Transparent mode v0
923 case 2: // Transparent mode v0
924 case 3: // Transparent mode v0
925 case 4: // Transparent mode v0
926 return std::make_unique<LArRodBlockTransparentV0<LArRodBlockHeaderTransparentV0> >();
927 case 5: // Calibration (Transparent mode) v1 17.01.2006
928 return std::make_unique<LArRodBlockCalibrationV1>();
929 case 6: // Calibration (Transparent mode) v3 31.05.2006
930 case 7: // Calibration (Transparent mode) v3
931 case 8: // Calibration (Transparent mode) v3
932 case 9: // Calibration (Transparent mode) v3
933 case 10:// Calibration (Transparent mode) v3
934 case 11:// Calibration (Transparent mode) v3
935 case 12:// Calibration (Transparent mode) v3
936 return std::make_unique<LArRodBlockCalibrationV3>();
937 default:
938 break;
939 }
940 break;
941
942 case 3:
943 // RodBlockType 3 = Test mode
944 return std::make_unique<LArRodBlockTransparentV0<LArRodBlockHeaderTransparentV0> >();
945
946 case 4:
947 // RodBlockType 4 = Physics mode
948 switch (rodMinorVersion) {
949 case 0: // Physics mode v0 05.01.2004 first draft
950 return std::make_unique<LArRodBlockPhysicsV0>();
951 case 1: // Physics mode v1 19.08.2004 only small differences
952 return std::make_unique<LArRodBlockPhysicsV1>();
953 case 2: // Physics mode v2 05.10.2004 adapted to real DSP data
954 case 3: // Physics mode v2
955 case 4: // Physics mode v2
956 case 5: // Physics mode v2
957 case 6: // Physics mode v2
958 case 7: // Physics mode v2
959 case 8: // Physics mode v2
960 return std::make_unique<LArRodBlockPhysicsV2>();
961 case 9: // Physics mode v4 10.07.2007 for commissioning
962 return std::make_unique<LArRodBlockPhysicsV4>();
963 case 10: // Physics mode v5 16.06.2008 for LHC
964 case 11: // Physics mode v5 16.06.2008 for LHC
965 {
966 auto bl = std::make_unique<LArRodBlockPhysicsV5>();
968 bl->setRequiredNSamples(m_requiredPhysicsNSamples);
969 }
970 return bl;
971 }
972 case 12: // Physics mode v5 09.03.2011 for LHC
973 {
974 auto bl = std::make_unique<LArRodBlockPhysicsV6>();
976 bl->setRequiredNSamples(m_requiredPhysicsNSamples);
977 }
978 return bl;
979 }
980 default:
981 break;
982 }
983 break;
984
985 case 5:
986 // RodBlockType 5 = Physics simulation mode
987 // Physics mode v3 11.04.2005 for simulation
988 return std::make_unique<LArRodBlockPhysicsV3>();
989
990 case 6:
991 // RodBlockType 6 = Physics test mode
992 switch (rodMinorVersion) {
993 case 0: // Physics mode v0 05.01.2004 first draft
994 return std::make_unique<LArRodBlockPhysicsV0>();
995 case 1: // Physics mode v2 05.10.2004 adapted to real DSP data
996 case 2: // Physics mode v2
997 return std::make_unique<LArRodBlockPhysicsV2>();
998 default:
999 break;
1000 }
1001 break;
1002
1003 case 7:
1004 // RodBlockType 7 = Calibration mode
1005 switch (rodMinorVersion) {
1006 case 0: // Calibration mode v0 05.01.2004
1007 return std::make_unique<LArRodBlockCalibrationV0<LArRodBlockHeaderCalibrationV0> >();
1008 case 1: // Calibration mode v1 17.01.2006
1009 case 2: // Calibration mode v1
1010 case 3: // Calibration mode v1
1011 case 4: // Calibration mode v1
1012 return std::make_unique<LArRodBlockCalibrationV1>();
1013 case 5: // Calibration mode v2 26.04.2006
1014 return std::make_unique<LArRodBlockCalibrationV2>();
1015 case 6: // Calibration mode v3 31.05.2006
1016 case 7: // Calibration mode v3
1017 case 8: // Calibration mode v3
1018 case 9: // Calibration mode v3
1019 case 10:// Calibration mode v3
1020 case 11:// Calibration mode v3
1021 case 12:// Calibration mode v3
1022 return std::make_unique<LArRodBlockCalibrationV3>();
1023 default:
1024 break;
1025 }
1026 break;
1027
1028 case 10:
1029 // RodBlockType 10 = Accumulated mode (used for pre-processed pedestal runs)
1030 // Accumulated mode v3 10.06.2008
1031 return std::make_unique<LArRodBlockAccumulatedV3>();
1032
1033 default:
1034 break;
1035 }
1036
1037 return std::unique_ptr<LArRodBlockStructure>();
1038}

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

bool AthCommonMsg< AlgTool >::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< AlgTool > >::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.

◆ prepareBlockStructure()

LArRodBlockStructure * LArRodDecoder::prepareBlockStructure ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
const uint32_t * p,
uint32_t n,
const CaloGain::CaloGain RequestedGain ) const
private

Definition at line 872 of file LArRodDecoder.cxx.

874{
875#ifndef NDEBUG
876 ATH_MSG_DEBUG("Prepare LArRodBlockStructure. Got a fragement of size " << n);
877#endif
878
879 //Get version and blocktype form header
880 eformat::helper::Version ver(robFrag.rod_version());
881 const uint16_t rodMinorVersion=ver.minor_version();
882 const uint32_t rodBlockType=robFrag.rod_detev_type()&0xff;
883 LArRodBlockStructure* BlStruct = prepareBlockStructure1 (rodMinorVersion, rodBlockType);
884 if (!BlStruct) {
885 return nullptr;
886 }
887
888 //BlStruct->dumpFragment(v); // For testing purpose
889 if (!BlStruct->setFragment(p,n)) {
890 constexpr int maxMess = 100;
891 static std::atomic<int> nMess = 1;
892 int thismess = nMess++;
893 if (thismess <= maxMess) {
894 msg(MSG::ERROR) << "Could not set fragment (wrong number of samples in data ?) - container will not be filled" << endmsg;
895 if (thismess == maxMess)
896 msg(MSG::ERROR) << "This message will not be repeated" << endmsg;
897 }
898 return NULL;
899 }
900#ifndef NDEBUG
901 ATH_MSG_VERBOSE("Set Fragment at address "<< &(p[0]) << " " << p[5]);
902#endif
903
904 BlStruct->setGain(RequestedGain); //Will be ignored if BlockStructure does not support fixed gains.
905 //FIXME: Very ugly hack! See explanation in LArRodDecoder.h
906 if (m_firstSample) {
907 BlStruct->setFirstSample(m_firstSample);
908 }
909 return BlStruct;
910}
virtual int setGain(const int GainValue)
void setFirstSample(const int rearrangeFirstSample)

◆ prepareBlockStructure1()

LArRodBlockStructure * LArRodDecoder::prepareBlockStructure1 ( const uint16_t rodMinorVersion,
const uint32_t robBlockType ) const
private

Definition at line 838 of file LArRodDecoder.cxx.

839{
840 const unsigned MAXMINOR = 12;
841 const unsigned MAXTYPE = 10;
842
843 if (rodMinorVersion > MAXMINOR || robBlockType > MAXTYPE) {
844 msg(MSG::ERROR) << "Bad Rod block type " << robBlockType
845 << " / " << rodMinorVersion << endmsg;
846 return nullptr;
847 }
848 std::vector<std::unique_ptr<LArRodBlockStructure> >& blstructs =
849 *m_blstructs.get();
850 unsigned int index = robBlockType * (MAXMINOR+1) + rodMinorVersion;
851 if (blstructs.empty()) {
852 blstructs.resize ((MAXMINOR+1)*(MAXTYPE+1));
853 }
854 if (!blstructs[index]) {
855 blstructs[index] = makeBlockStructure (robBlockType, rodMinorVersion);
856 }
857 if (!blstructs[index]) {
858 msg(MSG::ERROR) << "Bad Rod block type " << robBlockType
859 << " / " << rodMinorVersion << endmsg;
860 return nullptr;
861 }
862
863#ifndef NDEBUG
864 ATH_MSG_DEBUG("Found version " << rodMinorVersion << " of Rod block type " << robBlockType);
865#endif
866
867 return blstructs[index].get();
868}
std::unique_ptr< LArRodBlockStructure > makeBlockStructure(unsigned int rodBlockType, unsigned int rodMinorVersion) const
str index
Definition DeMoScan.py:362

◆ 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< AlgTool > >::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< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setCellEnergy()

void LArRodDecoder::setCellEnergy ( LArCell * element,
int energy,
int time,
int quality,
CaloGain::CaloGain gain ) const
inlineprivate

Definition at line 405 of file LArRodDecoder.h.

408{
409 // Set energy, time, quality and hardware gain
410 element->set((float)energy, (float)time, (double)quality, gain);
411}

◆ setsecfeb()

void LArRodDecoder::setsecfeb ( HWIdentifier feb)
inline

Definition at line 148 of file LArRodDecoder.h.

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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 }
std::vector< SG::VarHandleKeyArray * > m_vhka

◆ writeFebInfo()

void LArRodDecoder::writeFebInfo ( LArCellCollection & m_coll,
LArFebEnergy & febene ) const
inlineprivate

Definition at line 413 of file LArRodDecoder.h.

415 {
416 coll.addfebenergy(febene);
417 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

SG::SlotSpecificObj<std::vector<std::unique_ptr<LArRodBlockStructure> > > m_blstructs LArRodDecoder::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 246 of file LArRodDecoder.h.

◆ m_CheckSum

bool LArRodDecoder::m_CheckSum
private

Definition at line 249 of file LArRodDecoder.h.

◆ m_delayScale

double LArRodDecoder::m_delayScale
private

Definition at line 244 of file LArRodDecoder.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evt

SG::ReadHandleKey<xAOD::EventInfo> LArRodDecoder::m_evt {this, "EvtInfo", "EventInfo", "EventInfo name"}
private

Definition at line 220 of file LArRodDecoder.h.

220{this, "EvtInfo", "EventInfo", "EventInfo name"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_febExchange

bool LArRodDecoder::m_febExchange
private

Definition at line 223 of file LArRodDecoder.h.

◆ m_febId1

unsigned int LArRodDecoder::m_febId1
private

Definition at line 224 of file LArRodDecoder.h.

◆ m_febId2

unsigned int LArRodDecoder::m_febId2
private

Definition at line 224 of file LArRodDecoder.h.

◆ m_febIdHLT

unsigned int LArRodDecoder::m_febIdHLT = 0U
private

Definition at line 224 of file LArRodDecoder.h.

◆ m_firstSample

int LArRodDecoder::m_firstSample
private

Definition at line 226 of file LArRodDecoder.h.

◆ m_IgnoreCheckFEBs

std::vector<unsigned int> LArRodDecoder::m_IgnoreCheckFEBs
private

Definition at line 241 of file LArRodDecoder.h.

◆ m_LArCellCorrNames

std::vector<std::string> LArRodDecoder::m_LArCellCorrNames
private

Definition at line 240 of file LArRodDecoder.h.

◆ m_LArCellCorrTools

std::vector<const CaloCellCorrection*> LArRodDecoder::m_LArCellCorrTools
private

Definition at line 242 of file LArRodDecoder.h.

◆ m_LArCellEthreshold

float LArRodDecoder::m_LArCellEthreshold
private

Definition at line 221 of file LArRodDecoder.h.

◆ m_MultiDSPMode

bool LArRodDecoder::m_MultiDSPMode
private

Definition at line 248 of file LArRodDecoder.h.

◆ m_onlineHelper

const LArOnlineID* LArRodDecoder::m_onlineHelper
private

Definition at line 239 of file LArRodDecoder.h.

◆ m_readtdc

bool LArRodDecoder::m_readtdc
private

Definition at line 222 of file LArRodDecoder.h.

◆ m_requiredPhysicsNSamples

unsigned short LArRodDecoder::m_requiredPhysicsNSamples
private

Definition at line 250 of file LArRodDecoder.h.

◆ m_StatusMask

uint32_t LArRodDecoder::m_StatusMask
private

Definition at line 238 of file LArRodDecoder.h.

◆ m_StatusNMask

uint32_t LArRodDecoder::m_StatusNMask = 0U
private

Definition at line 238 of file LArRodDecoder.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vBEPreselection

std::vector<int> LArRodDecoder::m_vBEPreselection
private

Definition at line 235 of file LArRodDecoder.h.

◆ m_vFinalPreselection

std::vector<unsigned int> LArRodDecoder::m_vFinalPreselection
private

Definition at line 237 of file LArRodDecoder.h.

◆ m_vFTPreselection

std::vector<int> LArRodDecoder::m_vFTPreselection
private

Definition at line 234 of file LArRodDecoder.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.

◆ m_vPosNegPreselection

std::vector<int> LArRodDecoder::m_vPosNegPreselection
private

Definition at line 236 of file LArRodDecoder.h.


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