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

#include <CpmMonitorAlgorithm.h>

Inheritance diagram for CpmMonitorAlgorithm:
Collaboration diagram for CpmMonitorAlgorithm:

Public Types

enum class  Environment_t {
  user = 0 , online , tier0 , tier0Raw ,
  tier0ESD , AOD , altprod
}
 Specifies the processing environment. More...
enum class  DataType_t {
  userDefined = 0 , monteCarlo , collisions , cosmics ,
  heavyIonCollisions
}
 Specifies what type of input data is being monitored. More...

Public Member Functions

 CpmMonitorAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
virtual ~CpmMonitorAlgorithm ()=default
virtual StatusCode initialize () override
 initialize
virtual StatusCode fillHistograms (const EventContext &ctx) const override
 adds event to the monitoring histograms
virtual StatusCode execute (const EventContext &ctx) const override
 Applies filters and trigger requirements.
void fill (const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
 Fills a vector of variables to a group by reference.
void fill (const ToolHandle< GenericMonitoringTool > &groupHandle, const std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &variables) const
 Fills a vector of variables to a group by reference.
template<typename... T>
void fill (const ToolHandle< GenericMonitoringTool > &groupHandle, T &&... variables) const
 Fills a variadic list of variables to a group by reference.
void fill (const std::string &groupName, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
 Fills a vector of variables to a group by name.
void fill (const std::string &groupName, const std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &variables) const
 Fills a vector of variables to a group by name.
template<typename... T>
void fill (const std::string &groupName, T &&... variables) const
 Fills a variadic list of variables to a group by name.
Environment_t environment () const
 Accessor functions for the environment.
Environment_t envStringToEnum (const std::string &str) const
 Convert the environment string from the python configuration to an enum object.
DataType_t dataType () const
 Accessor functions for the data type.
DataType_t dataTypeStringToEnum (const std::string &str) const
 Convert the data type string from the python configuration to an enum object.
const ToolHandle< GenericMonitoringTool > & getGroup (const std::string &name) const
 Get a specific monitoring tool from the tool handle array.
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool () const
 Get the trigger decision tool member.
bool trigChainsArePassed (const std::vector< std::string > &vTrigNames) const
 Check whether triggers are passed.
SG::ReadHandle< xAOD::EventInfoGetEventInfo (const EventContext &) const
 Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
virtual float lbAverageInteractionsPerCrossing (const EventContext &ctx=Gaudi::Hive::currentContext()) const
 Calculate the average mu, i.e.
virtual float lbInteractionsPerCrossing (const EventContext &ctx=Gaudi::Hive::currentContext()) const
 Calculate instantaneous number of interactions, i.e.
virtual float lbAverageLuminosity (const EventContext &ctx=Gaudi::Hive::currentContext()) const
 Calculate average luminosity (in ub-1 s-1 => 10^30 cm-2 s-1).
virtual float lbLuminosityPerBCID (const EventContext &ctx=Gaudi::Hive::currentContext()) const
 Calculate the instantaneous luminosity per bunch crossing.
virtual double lbDuration (const EventContext &ctx=Gaudi::Hive::currentContext()) const
 Calculate the duration of the luminosity block (in seconds)
virtual float lbAverageLivefraction (const EventContext &ctx=Gaudi::Hive::currentContext()) const
 Calculate the average luminosity livefraction.
virtual float livefractionPerBCID (const EventContext &ctx=Gaudi::Hive::currentContext()) const
 Calculate the live fraction per bunch crossing ID.
virtual double lbLumiWeight (const EventContext &ctx=Gaudi::Hive::currentContext()) const
 Calculate the average integrated luminosity multiplied by the live fraction.
virtual StatusCode parseList (const std::string &line, std::vector< std::string > &result) const
 Parse a string into a vector.
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

Public Attributes

 inputs = glob.glob('/eos/atlas/atlastier0/rucio/data18_13TeV/physics_Main/00354311/data18_13TeV.00354311.physics_Main.recon.ESD.f1129/data18_13TeV.00354311.physics_Main.recon.ESD.f1129._lb0013._SFO-8._0001.1')
 flags = initConfigFlags()
 Files
 HISTFileName
 cfg = MainServicesCfg(flags)
 CpmMonitorCfg = CpmMonitoringConfig(flags)
 OutputLevel
 withDetails
 False
 summariseProps
int nevents = -1

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.

Protected Attributes

ToolHandleArray< GenericMonitoringToolm_tools {this,"GMTools",{}}
 Array of Generic Monitoring Tools.
PublicToolHandle< Trig::TrigDecisionToolm_trigDecTool
 Tool to tell whether a specific trigger is passed.
ToolHandleArray< IDQFilterToolm_DQFilterTools {this,"FilterTools",{}}
 Array of Data Quality filter tools.
SG::ReadCondHandleKey< LuminosityCondDatam_lumiDataKey {this,"LuminosityCondDataKey","LuminosityCondData","SG Key of LuminosityCondData object"}
SG::ReadCondHandleKey< LBDurationCondDatam_lbDurationDataKey {this,"LBDurationCondDataKey","LBDurationCondData","SG Key of LBDurationCondData object"}
SG::ReadCondHandleKey< TrigLiveFractionCondDatam_trigLiveFractionDataKey {this,"TrigLiveFractionCondDataKey","TrigLiveFractionCondData", "SG Key of TrigLiveFractionCondData object"}
AthMonitorAlgorithm::Environment_t m_environment
 Instance of the Environment_t enum.
AthMonitorAlgorithm::DataType_t m_dataType
 Instance of the DataType_t enum.
Gaudi::Property< std::string > m_environmentStr {this,"Environment","user"}
 Environment string pulled from the job option and converted to enum.
Gaudi::Property< std::string > m_dataTypeStr {this,"DataType","userDefined"}
 DataType string pulled from the job option and converted to enum.
Gaudi::Property< std::string > m_triggerChainString {this,"TriggerChain",""}
 Trigger chain string pulled from the job option and parsed into a vector.
std::vector< std::string > m_vTrigChainNames
 Vector of trigger chain names parsed from trigger chain string.
Gaudi::Property< std::string > m_fileKey {this,"FileKey",""}
 Internal Athena name for file.
Gaudi::Property< bool > m_useLumi {this,"EnableLumi",false}
 Allows use of various luminosity functions.
Gaudi::Property< float > m_defaultLBDuration {this,"DefaultLBDuration",60.}
 Default duration of one lumi block.
Gaudi::Property< int > m_detailLevel {this,"DetailLevel",0}
 Sets the level of detail used in the monitoring.
SG::ReadHandleKey< xAOD::EventInfom_EventInfoKey {this,"EventInfoKey","EventInfo"}
 Key for retrieving EventInfo from StoreGate.

Private Types

enum  SummaryErrors {
  EMParity , EMLink , HadParity , HadLink ,
  CPMStatus , TOBParity , SumParity , CMXStatus ,
  NumberOfSummaryBins
}
typedef std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > MonVarVec_t
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

std::vector< bool > getIsolationBits (int val, int nThresh, int nBits) const
StatusCode fillCpmTowerVectors (SG::ReadHandle< xAOD::CPMTowerContainer > &cpmTower, std::vector< MonitorCpmTT > &monCpmTTs_em, std::vector< MonitorCpmTT > &monCpmTTs_had, std::vector< int > &errorsCPM, bool core, Monitored::Scalar< int > &cpmLoc, Monitored::Scalar< int > &GLinkParityError) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

double m_phiScaleTT {}
StringProperty m_packageName {this,"PackageName","CpmMonitor","group name for histograming"}
Gaudi::Property< int > m_crates {this,"s_crates", 4, "Number of CPM crates"}
Gaudi::Property< int > m_modules {this,"s_modules", 14, "Number of modules per crate (modules numbered 1-14)"}
Gaudi::Property< int > m_maxSlices {this,"s_maxSlices", 5, "Maximum number of slices"}
Gaudi::Property< int > m_tobsPerCPM {this,"s_tobsPerCPM", 5, "Maximum number of TOBs per CPM sent to CMX"}
Gaudi::Property< int > m_isolBits {this,"s_isolBits", 5, "Number of bits for encoded isolation"}
Gaudi::Property< int > m_threshBits {this,"s_threshBits", 3, "Number of bits per threshold for hit sums"}
Gaudi::Property< int > m_thresholds {this,"s_thresholds", 16, "Number of EM/Tau threshold bits"}
Gaudi::Property< int > m_maxTobsPerCmx {this,"MaxTOBsPerCMX", 70, "Maximum number of TOBs per CMX plotted"}
SG::WriteHandleKey< std::vector< int > > m_errorLocation {this,"ErrorLocation","L1CaloCPMErrorVector","Error vector name"}
SG::ReadHandleKey< xAOD::TriggerTowerContainerm_xAODTriggerTowerContainerName {this, "BS_xAODTriggerTowerContainer",LVL1::TrigT1CaloDefs::xAODTriggerTowerLocation,"Trigger Tower Container"}
SG::ReadHandleKey< xAOD::CPMTowerContainerm_cpmTowerLocation {this, "CPMTowerLocation", LVL1::TrigT1CaloDefs::CPMTowerLocation, "CPM container"}
SG::ReadHandleKey< xAOD::CPMTowerContainerm_cpmTowerLocationOverlap {this, "CPMTowerLocationOverlap",LVL1::TrigT1CaloDefs::CPMTowerLocation + "Overlap", "CPM Overlap container"}
SG::ReadHandleKey< xAOD::CPMTobRoIContainerm_cpmTobRoiLocation {this, "CPMTobRoILocation", LVL1::TrigT1CaloDefs::CPMTobRoILocation, "CPMTobRoI container"}
SG::ReadHandleKey< xAOD::CMXCPTobContainerm_cmxCpTobLocation {this, "CMXCPTobLocation", LVL1::TrigT1CaloDefs::CMXCPTobLocation, "CMXCPTob container"}
SG::ReadHandleKey< xAOD::CMXCPHitsContainerm_cmxCpHitsLocation {this, "CMXCPHitsLocation", LVL1::TrigT1CaloDefs::CMXCPHitsLocation, "CMXCPHits container"}
std::string m_name
std::unordered_map< std::string, size_t > m_toolLookupMap
const ToolHandle< GenericMonitoringToolm_dummy
Gaudi::Property< bool > m_enforceExpressTriggers
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 19 of file CpmMonitorAlgorithm.h.

Member Typedef Documentation

◆ MonVarVec_t

typedef std::vector<std::reference_wrapper<Monitored::IMonitoredVariable> > AthMonitorAlgorithm::MonVarVec_t
privateinherited

Definition at line 370 of file AthMonitorAlgorithm.h.

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ DataType_t

enum class AthMonitorAlgorithm::DataType_t
stronginherited

Specifies what type of input data is being monitored.

An enumeration of the different types of data the monitoring application may be running over. This can be used to select which histograms to produce, e.g. to prevent the production of colliding-beam histograms when running on cosmic-ray data. Strings of the same names may be given as jobOptions.

Enumerator
userDefined 
monteCarlo 
collisions 
cosmics 
heavyIonCollisions 

Definition at line 194 of file AthMonitorAlgorithm.h.

194 {
195 userDefined = 0,
196 monteCarlo,
197 collisions,
198 cosmics,
199 heavyIonCollisions,
200 };
AthConfigFlags cosmics(AthConfigFlags flags, str instanceName, str recoMode)

◆ Environment_t

enum class AthMonitorAlgorithm::Environment_t
stronginherited

Specifies the processing environment.

The running environment may be used to select which histograms are produced, and where they are located in the output. For example, the output paths of the histograms are different for the "user", "online" and the various offline flags. Strings of the same names may be given as jobOptions.

Enumerator
user 
online 
tier0 
tier0Raw 
tier0ESD 
AOD 
altprod 

Definition at line 175 of file AthMonitorAlgorithm.h.

175 {
176 user = 0,
177 online,
178 tier0,
179 tier0Raw,
180 tier0ESD,
181 AOD,
182 altprod,
183 };

◆ SummaryErrors

enum CpmMonitorAlgorithm::SummaryErrors
private
Enumerator
EMParity 
EMLink 
HadParity 
HadLink 
CPMStatus 
TOBParity 
SumParity 
CMXStatus 
NumberOfSummaryBins 

Definition at line 92 of file CpmMonitorAlgorithm.h.

92 { EMParity, EMLink, HadParity, HadLink, CPMStatus,
93 TOBParity, SumParity, CMXStatus, NumberOfSummaryBins };

Constructor & Destructor Documentation

◆ CpmMonitorAlgorithm()

CpmMonitorAlgorithm::CpmMonitorAlgorithm ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 10 of file CpmMonitorAlgorithm.cxx.

11 : AthMonitorAlgorithm(name,pSvcLocator),
12 m_phiScaleTT(32./M_PI)
13{
14}
#define M_PI
Base class for Athena Monitoring Algorithms.

◆ ~CpmMonitorAlgorithm()

virtual CpmMonitorAlgorithm::~CpmMonitorAlgorithm ( )
virtualdefault

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}

◆ dataType()

DataType_t AthMonitorAlgorithm::dataType ( ) const
inlineinherited

Accessor functions for the data type.

Returns
the current value of the class's DataType_t instance.

Definition at line 224 of file AthMonitorAlgorithm.h.

224{ return m_dataType; }
AthMonitorAlgorithm::DataType_t m_dataType
Instance of the DataType_t enum.

◆ dataTypeStringToEnum()

AthMonitorAlgorithm::DataType_t AthMonitorAlgorithm::dataTypeStringToEnum ( const std::string & str) const
inherited

Convert the data type string from the python configuration to an enum object.

Returns
a value in the DataType_t enumeration which matches the input string.

Definition at line 144 of file AthMonitorAlgorithm.cxx.

144 {
145 // convert the string to all lowercase
146 std::string lowerCaseStr = str;
147 std::transform(lowerCaseStr.begin(), lowerCaseStr.end(), lowerCaseStr.begin(), ::tolower);
148
149 // check if it matches one of the enum choices
150 if( lowerCaseStr == "userdefined" ) {
152 } else if( lowerCaseStr == "montecarlo" ) {
154 } else if( lowerCaseStr == "collisions" ) {
156 } else if( lowerCaseStr == "cosmics" ) {
157 return DataType_t::cosmics;
158 } else if( lowerCaseStr == "heavyioncollisions" ) {
160 } else { // otherwise, warn the user and return "userDefined"
161 ATH_MSG_WARNING("AthMonitorAlgorithm::dataTypeStringToEnum(): Unknown data type "
162 <<str<<", returning userDefined.");
164 }
165}
#define ATH_MSG_WARNING(x)
void tolower(std::string &s)

◆ 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.

◆ environment()

Environment_t AthMonitorAlgorithm::environment ( ) const
inlineinherited

Accessor functions for the environment.

Returns
the current value of the class's Environment_t instance.

Definition at line 208 of file AthMonitorAlgorithm.h.

208{ return m_environment; }
AthMonitorAlgorithm::Environment_t m_environment
Instance of the Environment_t enum.

◆ envStringToEnum()

AthMonitorAlgorithm::Environment_t AthMonitorAlgorithm::envStringToEnum ( const std::string & str) const
inherited

Convert the environment string from the python configuration to an enum object.

Returns
a value in the Environment_t enumeration which matches the input string.

Definition at line 116 of file AthMonitorAlgorithm.cxx.

116 {
117 // convert the string to all lowercase
118 std::string lowerCaseStr = str;
119 std::transform(lowerCaseStr.begin(), lowerCaseStr.end(), lowerCaseStr.begin(), ::tolower);
120
121 // check if it matches one of the enum choices
122 if( lowerCaseStr == "user" ) {
123 return Environment_t::user;
124 } else if( lowerCaseStr == "online" ) {
126 } else if( lowerCaseStr == "tier0" ) {
128 } else if( lowerCaseStr == "tier0raw" ) {
130 } else if( lowerCaseStr == "tier0esd" ) {
132 } else if( lowerCaseStr == "aod" ) {
133 return Environment_t::AOD;
134 } else if( lowerCaseStr == "altprod" ) {
136 } else { // otherwise, warn the user and return "user"
137 ATH_MSG_WARNING("AthMonitorAlgorithm::envStringToEnum(): Unknown environment "
138 <<str<<", returning user.");
139 return Environment_t::user;
140 }
141}

◆ 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 AthMonitorAlgorithm::execute ( const EventContext & ctx) const
overridevirtualinherited

Applies filters and trigger requirements.

Then, calls fillHistograms().

Parameters
ctxevent context for reentrant Athena call
Returns
StatusCode

Definition at line 77 of file AthMonitorAlgorithm.cxx.

77 {
78
79 // Checks that all of the DQ filters are passed. If any one of the filters
80 // fails, return SUCCESS code and do not fill the histograms with the event.
81 for ( const auto& filterItr : m_DQFilterTools ) {
82 if (!filterItr->accept()) {
83 ATH_MSG_DEBUG("Event rejected due to filter tool.");
84 return StatusCode::SUCCESS;
85 }
86 }
87
88 // Trigger: If there is a decision tool and the chains fail, skip the event.
90 ATH_MSG_DEBUG("Event rejected due to trigger filter.");
91 return StatusCode::SUCCESS;
92 }
93
94 ATH_MSG_DEBUG("Event accepted!");
95 return fillHistograms(ctx);
96}
#define ATH_MSG_DEBUG(x)
virtual StatusCode fillHistograms(const EventContext &ctx) const =0
adds event to the monitoring histograms
bool trigChainsArePassed(const std::vector< std::string > &vTrigNames) const
Check whether triggers are passed.
std::vector< std::string > m_vTrigChainNames
Vector of trigger chain names parsed from trigger chain string.
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
ToolHandleArray< IDQFilterTool > m_DQFilterTools
Array of Data Quality filter tools.

◆ 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.

◆ fillCpmTowerVectors()

StatusCode CpmMonitorAlgorithm::fillCpmTowerVectors ( SG::ReadHandle< xAOD::CPMTowerContainer > & cpmTower,
std::vector< MonitorCpmTT > & monCpmTTs_em,
std::vector< MonitorCpmTT > & monCpmTTs_had,
std::vector< int > & errorsCPM,
bool core,
Monitored::Scalar< int > & cpmLoc,
Monitored::Scalar< int > & GLinkParityError ) const
private

Definition at line 780 of file CpmMonitorAlgorithm.cxx.

787{
788 //
789 xAOD::CPMTowerContainer::const_iterator ctIterator = (*cpmTower).begin();
790 xAOD::CPMTowerContainer::const_iterator ctIteratorEnd = (*cpmTower).end();
791 for (; ctIterator != ctIteratorEnd; ++ctIterator) {
792 const xAOD::CPMTower* ct = *ctIterator;
793 const uint8_t em = ct->emEnergy();
794 const uint8_t had = ct->hadEnergy();
795 const double eta = ct->eta();
796 const double phi = ct->phi();
798 LVL1::CoordToHardware converter;
799 const int crate = (core) ? converter.cpCrate(coord)
800 : converter.cpCrateOverlap(coord);
801 const int cpm = (core) ? converter.cpModule(coord)
802 : converter.cpModuleOverlap(coord);
803 const unsigned int loc = crate * m_modules + cpm - 1;
804 const int slices = (ct->emEnergyVec()).size();
805 const int slice = crate * m_maxSlices + slices - 1;
806 if (loc >= errorsCPM.size()) {
807 ATH_MSG_ERROR("Crate/module index out of range: " << loc << " >= "
808 << errorsCPM.size() << " crate " << crate
809 << " core " << core
810 << " eta " << eta << " phi " << phi <<
811 " cpm " << cpm << " slices " << slices <<
812 " max slices " << m_maxSlices << " m_modules " << m_modules <<
813 " slice " << slice);
814 }
815
816 // Errors
817 bool emParityError=false;
818 bool emLinkDownError=false;
819 uint32_t error = ct->emError();
820 if (error && loc < errorsCPM.size()) {
821 const LVL1::DataError emError(error);
822 if (emError.get(LVL1::DataError::Parity)) {
823 emParityError=true;
824 errorsCPM[loc] |= (1 << EMParity);
825 }
826 if (emError.get(LVL1::DataError::LinkDown)) {
827 emLinkDownError=true;
828 errorsCPM[loc] |= (1 << EMLink);
829 }
830 const int status = (error >> LVL1::DataError::GLinkParity) & 0xff;
831 if (status) {
832 cpmLoc=loc;
833 for (int bit = 0; bit < 8; ++bit) {
834 if ((status >> bit) & 0x1) {
835 GLinkParityError=bit;
836 fill(m_packageName, GLinkParityError, cpmLoc);
837 }
838 }
839 errorsCPM[loc] |= (1 << CPMStatus);
840 }
841 }
842
843 bool hadParityError=false;
844 bool hadLinkDownError=false;
845 error = ct->hadError();
846 if (error && loc < errorsCPM.size()) {
847 const LVL1::DataError hadError(error);
848 if (hadError.get(LVL1::DataError::Parity)) {
849 hadParityError=true;
850 errorsCPM[loc] |= (1 << HadParity);
851 }
852 if (hadError.get(LVL1::DataError::LinkDown)) {
853 hadLinkDownError=true;
854 errorsCPM[loc] |= (1 << HadLink);
855 }
856 }
857 // fill tower vector for plots
858 MonitorCpmTT monTT;
859 monTT.ttower=ct;
860 monTT.phi_scaled=ct->phi()*m_phiScaleTT;
861 monTT.slice=slice;
862 monTT.emParityError=emParityError;
863 monTT.emLinkDownError=emLinkDownError;
864 monTT.hadParityError=hadParityError;
865 monTT.hadLinkDownError=hadLinkDownError;
866 if (em) {
867 monCpmTTs_em.push_back(monTT);
868 }
869 if (had) {
870 monCpmTTs_had.push_back(monTT);
871 }
872
873 } // iterator
874
875
876 return StatusCode::SUCCESS;
877}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_MSG_ERROR(x)
double coord
Type of coordination system.
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
returns the trigger hardware components associated with a given Coordinate
unsigned int cpModuleOverlap(const Coordinate &coord)
return ID of CP module for overlap coord
unsigned int cpModule(const Coordinate &coord)
return ID of CP module.
unsigned int cpCrateOverlap(const Coordinate &coord)
returns crate ID covering that overlap coord.
unsigned int cpCrate(const Coordinate &coord)
returns crate ID covering that coord.
Error data.
Definition DataError.h:27
status
Definition merge.py:16
CPMTower_v2 CPMTower
Define the latest version of the CPMTower class.
void fill(H5::Group &out_file, size_t iterations)

◆ fillHistograms()

StatusCode CpmMonitorAlgorithm::fillHistograms ( const EventContext & ctx) const
overridevirtual

adds event to the monitoring histograms

User will overwrite this function. Histogram booking is no longer done in C++. This function is called in execute once the filters are all passed.

Parameters
ctxforwarded from execute
Returns
StatusCode

Implements AthMonitorAlgorithm.

Definition at line 46 of file CpmMonitorAlgorithm.cxx.

46 {
47
48 ATH_MSG_DEBUG("CpmMonitorAlgorithm::fillHistograms");
49
50 // Retrieve Trigger Towers from SG
51 SG::ReadHandle<xAOD::TriggerTowerContainer> triggerTowerTES(m_xAODTriggerTowerContainerName, ctx);
52
53 ATH_CHECK(triggerTowerTES.isValid());
54
55 // Retrieve Core CPM Towers from SG
56 SG::ReadHandle<xAOD::CPMTowerContainer> cpmTowerTES(m_cpmTowerLocation, ctx);
57 ATH_CHECK(cpmTowerTES.isValid());
58
59 // Retrieve Overlap CPM Towers from SG
60 SG::ReadHandle<xAOD::CPMTowerContainer> cpmTowerOverlapTES(m_cpmTowerLocationOverlap, ctx);
61 ATH_CHECK(cpmTowerOverlapTES.isValid());
62
63 //Retrieve CPM TOB RoIs from SG
64 SG::ReadHandle<xAOD::CPMTobRoIContainer> cpmTobRoiTES(m_cpmTobRoiLocation, ctx);
65 ATH_CHECK(cpmTobRoiTES.isValid());
66
67 //Retrieve CMX-CP TOBs from SG
68 SG::ReadHandle<xAOD::CMXCPTobContainer> cmxCpTobTES(m_cmxCpTobLocation, ctx);
69 ATH_CHECK(cmxCpTobTES.isValid());
70
71 //Retrieve CMX-CP Hits from SG
72 SG::ReadHandle<xAOD::CMXCPHitsContainer> cmxCpHitsTES(m_cmxCpHitsLocation, ctx);
73 ATH_CHECK(cmxCpHitsTES.isValid());
74
75 //
76 // array of monitored items
77 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> variables;
78
79 // Global plots
80 // Create a vector of towers we want to monitor
81 std::vector<MonitorTT> monTTs;
82 xAOD::TriggerTowerContainer::const_iterator ttIterator = (*triggerTowerTES).begin();
83 xAOD::TriggerTowerContainer::const_iterator ttIteratorEnd = (*triggerTowerTES).end();
84 for (; ttIterator != ttIteratorEnd; ++ttIterator) {
85 const int layer = (*ttIterator)->layer();
86 const xAOD::TriggerTower_v2* tt = *ttIterator;
87 const double eta = (*ttIterator)->eta();
88 if ( std::abs(eta) > 2.5) continue;
89
90 if (!tt->cpET()) continue;
91 //check if the TriggerTower is in EM or HAD layer
92 if (layer == 0) { //EM
93 const int em = int(tt->cpET());
94 if (em) {
95 MonitorTT monTT;
96 monTT.ttower=(*ttIterator);
97 monTT.phi_scaled=(*ttIterator)->phi()*m_phiScaleTT;
98 monTTs.push_back(monTT);
99 }
100 }
101 if (layer == 1) { //HAD
102 const int had = int(tt->cpET());
103 if (had) {
104 MonitorTT monTT;
105 monTT.ttower=(*ttIterator);
106 monTT.phi_scaled=(*ttIterator)->phi()*m_phiScaleTT;
107 monTTs.push_back(monTT);
108 }
109 }
110 } //ttIterator
111
112 // setup cutmasks to select the em and had TTs
113 auto mask_em_TT = Monitored::Collection("mask_em_TT", monTTs, []( const auto &tower ) {return ( tower.ttower->layer()==0); } ); variables.push_back( mask_em_TT );
114 auto mask_had_TT = Monitored::Collection("mask_had_TT", monTTs, []( const auto &tower ){return ( tower.ttower->layer()==1); } ); variables.push_back( mask_had_TT );
115
116 // the variables to monitor
117 auto etaTT = Monitored::Collection("etaTT", monTTs, []( const auto &tower ){return tower.ttower->eta();} ); variables.push_back( etaTT );
118 auto phiTT = Monitored::Collection("phiTT", monTTs, []( const auto &tower ){return tower.phi_scaled;} ); variables.push_back( phiTT );
119
120 // CPM Global maps
121
122 // Vectors for error overview bits;
123 std::vector<int> errorsCPM(m_crates * m_modules);
124 std::vector<int> errorsCMX(m_crates * 2); // L/R
125 //cpmTowerTES
126 std::vector<MonitorCpmTT> monCpmTTs_em;
127 std::vector<MonitorCpmTT> monCpmTTs_had;
128 // scalars to fill bitwise histograms directly
129 Monitored::Scalar<int> GLinkParityError = Monitored::Scalar<int>("GLinkParityError", 0);
130 Monitored::Scalar<int> cpmLoc = Monitored::Scalar<int>("cpmLoc", 0);
131 bool core=true;
132 ATH_CHECK(fillCpmTowerVectors(cpmTowerTES, monCpmTTs_em, monCpmTTs_had, errorsCPM, core, cpmLoc, GLinkParityError));
133 std::vector<MonitorCpmTT> monCpmOverlapTTs_em;
134 std::vector<MonitorCpmTT> monCpmOverlapTTs_had;
135 core=false;
136 ATH_CHECK(fillCpmTowerVectors(cpmTowerOverlapTES, monCpmOverlapTTs_em, monCpmOverlapTTs_had, errorsCPM, core, cpmLoc, GLinkParityError));
137
138 // add the CPM global variables to be monitored - exclude Overlap
139 auto etCpmTT_em = Monitored::Collection("etCpmTT_em", monCpmTTs_em, []( const auto &tt ){return tt.ttower->emEnergy();} ); variables.push_back( etCpmTT_em );
140 auto etaCpmTT_em = Monitored::Collection("etaCpmTT_em", monCpmTTs_em, []( const auto &tt ){return tt.ttower->eta();} ); variables.push_back( etaCpmTT_em );
141 auto phiCpmTT_em = Monitored::Collection("phiCpmTT_em", monCpmTTs_em, []( const auto &tt ){return tt.ttower->phi();} ); variables.push_back( phiCpmTT_em );
142 auto phiScaledCpmTT_em = Monitored::Collection("phiScaledCpmTT_em", monCpmTTs_em, []( const auto &tt ){return tt.phi_scaled;} );
143 variables.push_back( phiScaledCpmTT_em );
144 auto etCpmTT_had = Monitored::Collection("etCpmTT_had", monCpmTTs_had, []( const auto &tt ){return tt.ttower->hadEnergy();} ); variables.push_back( etCpmTT_had );
145 auto etaCpmTT_had = Monitored::Collection("etaCpmTT_had", monCpmTTs_had, []( const auto &tt ){return tt.ttower->eta();} ); variables.push_back( etaCpmTT_had );
146 auto phiCpmTT_had = Monitored::Collection("phiCpmTT_had", monCpmTTs_had, []( const auto &tt ){return tt.ttower->phi();} ); variables.push_back( phiCpmTT_had );
147 auto phiScaledCpmTT_had = Monitored::Collection("phiScaledCpmTT_had", monCpmTTs_had, []( const auto &tt ){return tt.phi_scaled;} );
148 variables.push_back( phiScaledCpmTT_had );
149
150 // errors and slices are filled for sum of Core and Overlap
151 std::vector<MonitorCpmTT> monCpmTTs_em_tot(monCpmTTs_em.begin(),monCpmTTs_em.end());
152 monCpmTTs_em_tot.insert(monCpmTTs_em_tot.end(), monCpmOverlapTTs_em.begin(),monCpmOverlapTTs_em.end());
153 std::vector<MonitorCpmTT> monCpmTTs_had_tot(monCpmTTs_had.begin(),monCpmTTs_had.end());
154 monCpmTTs_had_tot.insert(monCpmTTs_had_tot.end(), monCpmOverlapTTs_had.begin(),monCpmOverlapTTs_had.end());
155 // the variables
156 auto etaCpmTT_em_tot = Monitored::Collection("etaCpmTT_em_tot", monCpmTTs_em_tot, []( const auto &tt ){return tt.ttower->eta();} );
157 variables.push_back( etaCpmTT_em_tot) ;
158 auto phiScaledCpmTT_em_tot = Monitored::Collection("phiScaledCpmTT_em_tot", monCpmTTs_em_tot, []( const auto &tt ){return tt.phi_scaled;} );
159 variables.push_back( phiScaledCpmTT_em_tot );
160 auto etaCpmTT_had_tot = Monitored::Collection("etaCpmTT_had_tot", monCpmTTs_had_tot, []( const auto &tt ){return tt.ttower->eta();} );
161 variables.push_back( etaCpmTT_had_tot) ;
162 auto phiScaledCpmTT_had_tot = Monitored::Collection("phiScaledCpmTT_had_tot", monCpmTTs_had_tot, []( const auto &tt ){return tt.phi_scaled;} );
163 variables.push_back( phiScaledCpmTT_had_tot );
164
165
166 // the masks
167 auto parityErrorCpmTT_em = Monitored::Collection("parityErrorCpmTT_em", monCpmTTs_em_tot, []( const auto &tt ){return tt.emParityError;} );
168 variables.push_back( parityErrorCpmTT_em );
169 auto linkDownErrorCpmTT_em = Monitored::Collection("linkDownErrorCpmTT_em", monCpmTTs_em_tot, []( const auto &tt ){return tt.emLinkDownError;} );
170 variables.push_back( linkDownErrorCpmTT_em );
171 auto parityErrorCpmTT_had = Monitored::Collection("parityErrorCpmTT_had", monCpmTTs_had_tot, []( const auto &tt ){return tt.hadParityError;} );
172 variables.push_back( parityErrorCpmTT_had );
173 auto linkDownErrorCpmTT_had = Monitored::Collection("linkDownErrorCpmTT_had", monCpmTTs_had_tot, []( const auto &tt ){return tt.hadLinkDownError;} );
174 variables.push_back( linkDownErrorCpmTT_had );
175
176 // and the sum of the Core and Overlap for EM and HAD
177 std::vector<MonitorCpmTT> monCpmTTs_tot(monCpmTTs_em_tot.begin(),monCpmTTs_em_tot.end());
178 monCpmTTs_tot.insert(monCpmTTs_tot.end(), monCpmTTs_had_tot.begin(),monCpmTTs_had_tot.end());
179
180 auto peakCpmTT_tot = Monitored::Collection("peakCpmTT_tot", monCpmTTs_tot, []( const auto &tt ){return tt.ttower->peak();} );
181 variables.push_back( peakCpmTT_tot );
182 auto sliceCpmTT_tot = Monitored::Collection("sliceCpmTT_tot", monCpmTTs_tot, []( const auto &tt ){return tt.slice;} );
183 variables.push_back( sliceCpmTT_tot );
184
185 //=============================================
186 // CPM TOB RoIs
187 //=============================================
188
189 std::vector<MonitorTobRoI> monTobRoIsEner;
190 std::vector<MonitorTobRoI> monTobRoIsIsol;
191
192 const int vecSize = m_crates * m_modules * 2;
193 std::vector<int> tobCount(vecSize);
194 LVL1::CPRoIDecoder decoder;
195 xAOD::CPMTobRoIContainer::const_iterator crIterator = (*cpmTobRoiTES).begin();
196 xAOD::CPMTobRoIContainer::const_iterator crIteratorEnd = (*cpmTobRoiTES).end();
197 // fill thresholds and bits as scalars in the loop
198 auto thresholdsEm = Monitored::Scalar("bitsTobRoIsIsolEm", 0.);
199 auto thresholdWeightsEm = Monitored::Scalar<float>("bitsTobRoIsIsolEmWeight", 1.);
200 auto thresholdsTau = Monitored::Scalar("bitsTobRoIsIsolTau", 0.);
201 auto thresholdWeightsTau = Monitored::Scalar("bitsTobRoIsIsolTauWeight", 0.);
202 for (; crIterator != crIteratorEnd; ++crIterator) {
203 const int type = (*crIterator)->type(); // 0=EM, 1=Tau
204 const int energy = (*crIterator)->energy();
205 const int isolation = (*crIterator)->isolation();
206 const LVL1::CoordinateRange coord(decoder.coordinate((*crIterator)->roiWord()));
207 const double eta = coord.eta();
208 const double phi = coord.phi();
209 const double phiMod = phi * m_phiScaleTT - 0.5;
210 const double etaMod = eta - 0.05;
211 if (energy) {
212 MonitorTobRoI monTobRoI;
213 monTobRoI.tobroi=(*crIterator);
214 monTobRoI.etaMod=etaMod;
215 monTobRoI.phiMod=phiMod;
216 monTobRoIsEner.push_back(monTobRoI);
217 }
218 if (isolation) {
219 // fill isolation bits
220 std::vector<bool> isolbits=getIsolationBits(isolation, m_isolBits, 1);
221 for (int thr = 0; thr < m_isolBits; ++thr) {
222 if (isolbits[thr]){
223 if(type==0) {
224 thresholdsEm = thr;
225 thresholdWeightsEm = isolbits[thr];
226 fill(m_packageName, thresholdsEm, thresholdWeightsEm);
227 } else {
228 thresholdsTau = thr;
229 thresholdWeightsTau = isolbits[thr];
230 fill(m_packageName, thresholdsTau, thresholdWeightsTau);
231 }
232 }
233 }
234 //
235 MonitorTobRoI monTobRoI;
236 monTobRoI.tobroi=(*crIterator);
237 monTobRoI.etaMod=etaMod;
238 monTobRoI.phiMod=phiMod;
239 monTobRoIsIsol.push_back(monTobRoI);
240 }
241 const int crate = (*crIterator)->crate();
242 const int cpm = (*crIterator)->cpm();
243 ++tobCount[(crate * m_modules + cpm - 1) * 2 + type];
244 }
245 // Energy
246 auto etaTobRoIsEner = Monitored::Collection("etaTobRoIsEner", monTobRoIsEner, []( const auto &roi ){return roi.etaMod;} );
247 variables.push_back(etaTobRoIsEner);
248 auto phiTobRoIsEner = Monitored::Collection("phiTobRoIsEner", monTobRoIsEner, []( const auto &roi ){return roi.phiMod;} );
249 variables.push_back(phiTobRoIsEner);
250 auto energyTobRoIsEner = Monitored::Collection("energyTobRoIsEner", monTobRoIsEner, []( const auto &roi ){return roi.tobroi->energy();} );
251 variables.push_back(energyTobRoIsEner);
252 auto typeTobRoIsEner = Monitored::Collection("typeTobRoIsEner", monTobRoIsEner, []( const auto &roi ){return roi.tobroi->type();} );
253 variables.push_back(typeTobRoIsEner);
254
255 // setup cutmasks to select EM or Tau
256 auto mask_tobroi_ener_em = Monitored::Collection("mask_tobroi_ener_em", monTobRoIsEner, []( const auto &roi ) {return ( roi.tobroi->type()==0); } );
257 variables.push_back( mask_tobroi_ener_em );
258 auto mask_tobroi_ener_tau = Monitored::Collection("mask_tobroi_ener_tau", monTobRoIsEner, []( const auto &roi ){return ( roi.tobroi->type()==1); } );
259 variables.push_back( mask_tobroi_ener_tau );
260
261 // Isol
262 auto etaTobRoIsIsol = Monitored::Collection("etaTobRoIsIsol", monTobRoIsIsol, []( const auto &roi ){return roi.etaMod;} );
263 variables.push_back(etaTobRoIsIsol);
264 auto phiTobRoIsIsol = Monitored::Collection("phiTobRoIsIsol", monTobRoIsIsol, []( const auto &roi ){return roi.phiMod;} );
265 variables.push_back(phiTobRoIsIsol);
266 auto energyTobRoIsIsol = Monitored::Collection("energyTobRoIsIsol", monTobRoIsIsol, []( const auto &roi ){return roi.tobroi->isolation();} );
267 variables.push_back(energyTobRoIsIsol);
268
269 auto mask_tobroi_isol_em = Monitored::Collection("mask_tobroi_isol_em", monTobRoIsIsol, []( const auto &roi ) {return ( roi.tobroi->type()==0); } );
270 variables.push_back( mask_tobroi_isol_em );
271 auto mask_tobroi_isol_tau = Monitored::Collection("mask_tobroi_isol_tau", monTobRoIsIsol, []( const auto &roi ){return ( roi.tobroi->type()==1); } );
272 variables.push_back( mask_tobroi_isol_tau );
273
274
275 // count ToBs
276 std::vector<int> tobCountEm;
277 std::vector<int> tobCountTau;
278 for (int crate = 0; crate < m_crates; ++crate) {
279 for (int cpm = 1; cpm <= m_modules; ++cpm) {
280 for (int type = 0; type < 2; ++type) {
281 int val = tobCount[(crate * m_modules + cpm - 1) * 2 + type];
282 if (val) {
283 if (val > m_tobsPerCPM) val = m_tobsPerCPM + 1;
284 if (type == 0) {
285 tobCountEm.push_back(val);
286 } else {
287 tobCountTau.push_back(val);
288 }
289 }
290 }
291 }
292 }
293 auto tobEm = Monitored::Collection("tobPerCPMEm", tobCountEm, []( const auto &tob ){return tob;} ); variables.push_back( tobEm );
294 auto tobTau = Monitored::Collection("tobPerCPMTau", tobCountTau, []( const auto &tob ){return tob;} ); variables.push_back( tobTau );
295
296
297 //=============================================
298 // CMX-CP TOBs
299 //=============================================
300
301 std::vector<MonitorCmxCpTob> monCmxCpTobEnerLeft;
302 std::vector<MonitorCmxCpTob> monCmxCpTobEnerRight;
303 std::vector<MonitorCmxCpTob> monCmxCpTobError;
304 std::vector<MonitorCmxCpTob> monCmxCpTobIsolLeft;
305 std::vector<MonitorCmxCpTob> monCmxCpTobIsolRight;
306
307 tobCount.assign(vecSize, 0);
308 std::vector<int> cmxCount(m_crates * 2);
309 xAOD::CMXCPTobContainer::const_iterator cmxCpTobIter = (*cmxCpTobTES).begin();
310 xAOD::CMXCPTobContainer::const_iterator cmxCpTobIterEnd = (*cmxCpTobTES).end();
311 //
312 auto cmxCpmTobsIsolBitsLeft = Monitored::Scalar("cmxCpmTobsIsolBitsLeft", 0.);
313 auto cmxCpmTobsIsolBitsLeftW = Monitored::Scalar<float>("cmxCpmTobsIsolBitsLeftWeight", 1.);
314 auto cmxCpmTobsIsolBitsRight= Monitored::Scalar("cmxCpmTobsIsolBitsRight", 0.);
315 auto cmxCpmTobsIsolBitsRightW = Monitored::Scalar<float>("cmxCpmTobsIsolBitsRightWeight", 1.);
316 for (; cmxCpTobIter != cmxCpTobIterEnd; ++cmxCpTobIter) {
317 const uint8_t crate = (*cmxCpTobIter)->crate();
318 const uint8_t cpm = (*cmxCpTobIter)->cpm(); // 1-14
319 const uint8_t cmx = (*cmxCpTobIter)->cmx(); // 0=Left, 1=Right (Assumed in Sim to be Left Tau, Right EM)
320 const uint8_t chip = (*cmxCpTobIter)->chip(); // 4 bits
321 const uint8_t location = (*cmxCpTobIter)->location();// 2 bits
322 const uint8_t energy = (*cmxCpTobIter)->energy();
323 const uint8_t isolation = (*cmxCpTobIter)->isolation();
324 const uint32_t error = (*cmxCpTobIter)->error();
325 const uint8_t x = crate * m_modules + cpm - 1;
326 const uint8_t y = chip * 4 + location;
327 if (energy) {
328 MonitorCmxCpTob monCmxCpTob;
329 monCmxCpTob.tob=(*cmxCpTobIter);
330 monCmxCpTob.x=x;
331 monCmxCpTob.y=y;
332 if (cmx)
333 monCmxCpTobEnerRight.push_back(monCmxCpTob);
334 else
335 monCmxCpTobEnerLeft.push_back(monCmxCpTob);
336 }
337 if (isolation) {
338 MonitorCmxCpTob monCmxCpTob;
339 monCmxCpTob.tob=(*cmxCpTobIter);
340 monCmxCpTob.x=x;
341 monCmxCpTob.y=y;
342 if (cmx)
343 monCmxCpTobIsolRight.push_back(monCmxCpTob);
344 else
345 monCmxCpTobIsolLeft.push_back(monCmxCpTob);
346
347 int nBits=1; int offset = 0;
348 const int mask = (1 << nBits) - 1;
349 for (int thr = 0; thr < m_isolBits; ++thr) {
350 const int hit = (isolation >> (nBits*thr)) & mask;
351 if (hit) {
352 if(cmx) {
353 cmxCpmTobsIsolBitsRight=thr+offset;
354 cmxCpmTobsIsolBitsRightW=hit;
355 fill(m_packageName, cmxCpmTobsIsolBitsRight, cmxCpmTobsIsolBitsRightW);
356 } else {
357 cmxCpmTobsIsolBitsLeft=thr+offset;
358 cmxCpmTobsIsolBitsLeftW=hit;
359 fill(m_packageName, cmxCpmTobsIsolBitsLeft, cmxCpmTobsIsolBitsLeftW);
360 }
361 }
362 } // isol bits
363 } // isolation
364 if (error) {
365 MonitorCmxCpTob monCmxCpTob;
366 monCmxCpTob.tob=(*cmxCpTobIter);
367 monCmxCpTob.x=x;
368 monCmxCpTob.parityError=false;
369
370 const LVL1::DataError err(error);
372 tobCount[x * 2 + cmx] = m_tobsPerCPM + 1;
373 }
374 const int ybase = cmx * 5;
375 monCmxCpTob.ybase=ybase;
376 bool parity = false;
378 parity = true;
379 monCmxCpTob.parityError=true;
380 monCmxCpTob.ybaseError=ybase;
381 }
383 parity = true;
384 monCmxCpTob.parityError=true;
385 monCmxCpTob.ybaseError=ybase+1;
386 }
388 parity = true;
389 monCmxCpTob.parityError=true;
390 monCmxCpTob.ybaseError=ybase+2;
391 }
393 parity = true;
394 monCmxCpTob.parityError=true;
395 monCmxCpTob.ybaseError=ybase+3;
396 }
398 parity = true;
399 monCmxCpTob.parityError=true;
400 monCmxCpTob.ybaseError=ybase+4;
401 }
402 if (parity) errorsCMX[crate * 2 + cmx] |= (1 << TOBParity);
403
404 // and now push error structs
405 monCmxCpTobError.push_back(monCmxCpTob);
406 } // end of error
407 //
408 if (energy || isolation || error) {
409 ++tobCount[x * 2 + cmx];
410 ++cmxCount[crate * 2 + cmx];
411 }
412
413 //
414 auto cmxCpmTobsLeft = Monitored::Scalar("cmxCpmTobsLeft", 0.);
415 auto cmxCpmTobsRight = Monitored::Scalar("cmxCpmTobsRight", 0.);
416 auto cmxTobsCmxLeft = Monitored::Scalar("cmxTobsCmxLeft", 0.);
417 auto cmxTobsCmxRight = Monitored::Scalar("cmxTobsCmxRight", 0.);
418 for (int crate = 0; crate < m_crates; ++crate) {
419 for (int cpm = 1; cpm <= m_modules; ++cpm) {
420 for (int cmx = 0; cmx < 2; ++cmx) {
421 int val = tobCount[(crate * m_modules + cpm - 1) * 2 + cmx];
422 if (val) {
423 if (val > m_tobsPerCPM) val = m_tobsPerCPM + 1;
424 if (cmx == 0) {
425 cmxCpmTobsLeft=val;
426 fill(m_packageName, cmxCpmTobsLeft);
427 } else {
428 cmxCpmTobsRight=val;
429 fill(m_packageName, cmxCpmTobsRight);
430 }
431 }
432 }
433 }
434 for (int cmx = 0; cmx < 2; ++cmx) {
435 int val = cmxCount[crate * 2 + cmx];
436 if (val) {
437 if (val >= m_maxTobsPerCmx) val = m_maxTobsPerCmx - 1;
438 if (cmx == 0) {
439 cmxTobsCmxLeft=val;
440 fill(m_packageName, cmxTobsCmxLeft);
441 } else {
442 cmxTobsCmxRight=val;
443 fill(m_packageName, cmxTobsCmxRight);
444 }
445 }
446 }
447 }
448 } // CMX loop end
449
450 // now fill CMX-CP TOB monitor items
451 // Energy
452 auto cmxCpmTobsEnerLeft = Monitored::Collection("cmxCpmTobsEnerLeft", monCmxCpTobEnerLeft, []( const auto &tob ){return tob.tob->energy();} );
453 variables.push_back(cmxCpmTobsEnerLeft);
454 auto cmxCpmTobsEnerRight = Monitored::Collection("cmxCpmTobsEnerRight", monCmxCpTobEnerRight, []( const auto &tob ){return tob.tob->energy();} );
455 variables.push_back(cmxCpmTobsEnerRight);
456
457 auto cmxCpmTobsEnerXLeft = Monitored::Collection("cmxCpmTobsEnerXLeft", monCmxCpTobEnerLeft, []( const auto &tob ){return tob.x;} );
458 variables.push_back(cmxCpmTobsEnerXLeft);
459 auto cmxCpmTobsEnerYLeft = Monitored::Collection("cmxCpmTobsEnerYLeft", monCmxCpTobEnerLeft, []( const auto &tob ){return tob.y;} );
460 variables.push_back(cmxCpmTobsEnerYLeft);
461 auto cmxCpmTobsEnerXRight = Monitored::Collection("cmxCpmTobsEnerXRight", monCmxCpTobEnerRight, []( const auto &tob ){return tob.x;} );
462 variables.push_back(cmxCpmTobsEnerXRight);
463 auto cmxCpmTobsEnerYRight = Monitored::Collection("cmxCpmTobsEnerYRight", monCmxCpTobEnerRight, []( const auto &tob ){return tob.y;} );
464 variables.push_back(cmxCpmTobsEnerYRight);
465
466 // isolation
467 auto cmxCpmTobsIsolLeft = Monitored::Collection("cmxCpmTobsIsolLeft", monCmxCpTobIsolLeft, []( const auto &tob ){return tob.tob->isolation();} );
468 variables.push_back(cmxCpmTobsIsolLeft);
469 auto cmxCpmTobsIsolRight = Monitored::Collection("cmxCpmTobsIsolRight", monCmxCpTobIsolRight, []( const auto &tob ){return tob.tob->isolation();} );
470 variables.push_back(cmxCpmTobsIsolRight);
471
472 auto cmxCpmTobsIsolXLeft = Monitored::Collection("cmxCpmTobsIsolXLeft", monCmxCpTobIsolLeft, []( const auto &tob ){return tob.x;} );
473 variables.push_back(cmxCpmTobsIsolXLeft);
474 auto cmxCpmTobsIsolYLeft = Monitored::Collection("cmxCpmTobsIsolYLeft", monCmxCpTobIsolLeft, []( const auto &tob ){return tob.y;} );
475 variables.push_back(cmxCpmTobsIsolYLeft);
476 auto cmxCpmTobsIsolXRight = Monitored::Collection("cmxCpmTobsIsolXRight", monCmxCpTobIsolRight, []( const auto &tob ){return tob.x;} );
477 variables.push_back(cmxCpmTobsIsolXRight);
478 auto cmxCpmTobsIsolYRight = Monitored::Collection("cmxCpmTobsIsolYRight", monCmxCpTobIsolRight, []( const auto &tob ){return tob.y;} );
479 variables.push_back(cmxCpmTobsIsolYRight);
480
481 // errors
482 auto cmxCpmTobsErrorX = Monitored::Collection("cmxCpmTobsErrorX", monCmxCpTobError, []( const auto &tob ){return tob.x;} );
483 variables.push_back(cmxCpmTobsErrorX);
484 auto cmxCpmTobsErrorCmx = Monitored::Collection("cmxCpmTobsErrorCmx", monCmxCpTobError, []( const auto &tob ){return tob.tob->cmx();} );
485 variables.push_back(cmxCpmTobsErrorCmx);
486 auto cmxCpmTobsErrorYbase = Monitored::Collection("cmxCpmTobsErrorYbase", monCmxCpTobError, []( const auto &tob ){return tob.ybaseError;} );
487 variables.push_back(cmxCpmTobsErrorYbase);
488 // parity error mask
489 auto cmxCpmTobsErrorParity = Monitored::Collection("cmxCpmTobsErrorParity", monCmxCpTobError, []( const auto &tob ){return tob.parityError;} );
490 variables.push_back(cmxCpmTobsErrorParity);
491
492 //
493 //=============================================
494 // CMX-CP Hits
495 //=============================================
496
497 std::vector<MonitorCmxCpHits> monCmxCpHits;
498 std::vector<MonitorCmxCpHits> monCmxCpHitsLeft;
499 std::vector<MonitorCmxCpHits> monCmxCpHitsRight;
500
501 // scalars to fill bitwise histograms directly
502 Monitored::Scalar<int> cmxCpMapX = Monitored::Scalar<int>("cmxCpMapX", 0);
503 Monitored::Scalar<int> cmxCpMapY = Monitored::Scalar<int>("cmxCpMapY", 0);
504 Monitored::Scalar<int> cmxCpMapHit = Monitored::Scalar<int>("cmxCpMapHit", 0);
505 Monitored::Scalar<int> cmxCpCountsX = Monitored::Scalar<int>("cmxCpCountsX", 0);
506 Monitored::Scalar<int> cmxCpCountsY = Monitored::Scalar<int>("cmxCpCountsY", 0);
507 Monitored::Scalar<int> cmxCpCountsHit = Monitored::Scalar<int>("cmxCpCountsHit", 0);
508 //
509 Monitored::Scalar<int> cmxTopoTobsCpmRight = Monitored::Scalar<int>("cmxTopoTobsCpmRight", 0);
510 Monitored::Scalar<int> cmxTopoTobsCpmLeft = Monitored::Scalar<int>("cmxTopoTobsCpmLeft", 0);
511 //
512 Monitored::Scalar<int> cmxCpThresBinLeftX = Monitored::Scalar<int>("cmxCpThresBinLeftX", 0);
513 Monitored::Scalar<int> cmxCpThresBinLeftY = Monitored::Scalar<int>("cmxCpThresBinLeftY", 0);
514 Monitored::Scalar<int> cmxCpThresBinLeftHit = Monitored::Scalar<int>("cmxCpThresBinLeftHit", 0);
515 Monitored::Scalar<int> cmxCpThresBinRightX = Monitored::Scalar<int>("cmxCpThresBinRightX", 0);
516 Monitored::Scalar<int> cmxCpThresBinRightY = Monitored::Scalar<int>("cmxCpThresBinRightY", 0);
517 Monitored::Scalar<int> cmxCpThresBinRightHit = Monitored::Scalar<int>("cmxCpThresBinRightHit", 0);
518
519 cmxCount.assign(m_crates * 2, 0);
520 xAOD::CMXCPHitsContainer::const_iterator cmIterator = (*cmxCpHitsTES).begin();
521 xAOD::CMXCPHitsContainer::const_iterator cmIteratorEnd = (*cmxCpHitsTES).end();
522 for (; cmIterator != cmIteratorEnd; ++cmIterator) {
523 const uint32_t hits0 = (*cmIterator)->hits0();
524 const uint32_t hits1 = (*cmIterator)->hits1();
525 const uint8_t crate = (*cmIterator)->crate();
526 const uint8_t cmx = (*cmIterator)->cmx();
527 const uint8_t source = (*cmIterator)->sourceComponent();
528 const uint8_t slices = ((*cmIterator)->hitsVec0()).size();
529 const uint8_t crateCmx = crate * 2 + cmx;
530
531 //
532 MonitorCmxCpHits monCmxCpHit;
533 monCmxCpHit.hit=(*cmIterator);
534 monCmxCpHit.crateCmx=crateCmx;
535 monCmxCpHit.srcTopoCheckSum=false;
536 monCmxCpHit.crateSlices=crate * m_maxSlices + slices - 1;
537 if (source == xAOD::CMXCPHits::TOPO_CHECKSUM) {
538 monCmxCpHit.srcTopoCheckSum=true;
539 } else if (source == xAOD::CMXCPHits::TOPO_OCCUPANCY_MAP) {
540 if (hits0) {
541 const int nBits = 1;
542 const int offset = 1;
543 const int mask = (1 << nBits) - 1;
544 for (int thr = 0; thr < m_modules; ++thr) {
545 const int hit = (hits0 >> (nBits*thr)) & mask;
546 if (hit) {
547 cmxCpMapX=thr+offset;
548 cmxCpMapY=crateCmx;
549 cmxCpMapHit=hit;
550 fill(m_packageName,cmxCpMapX,cmxCpMapY,cmxCpMapHit);
551 }
552 }
553 }
554 } else if (source == xAOD::CMXCPHits::TOPO_OCCUPANCY_COUNTS) {
555
556 if (hits0) {
557 const int nBits = 3;
558 const int offset = 1;
559 const int mask = (1 << nBits) - 1;
560 for (int thr = 0; thr < (m_modules/2); ++thr) {
561 const int hit = (hits0 >> (nBits*thr)) & mask;
562 if (hit) {
563 cmxCpCountsX=thr+offset;
564 cmxCpCountsY=crateCmx;
565 cmxCpCountsHit=hit;
566 fill(m_packageName,cmxCpCountsX,cmxCpCountsY,cmxCpCountsHit);
567 }
568 }
569 }
570 for (int mod = 0; mod < m_modules / 2; ++mod) {
571 const int val = (hits0 >> (mod * 3)) & 0x7;
572 if (val) {
573 if (cmx) {
574 cmxTopoTobsCpmRight=val;
575 fill(m_packageName,cmxTopoTobsCpmRight);
576 } else {
577 cmxTopoTobsCpmLeft=val;
578 fill(m_packageName,cmxTopoTobsCpmLeft);
579 }
580 }
581 cmxCount[crate * 2 + cmx] += val;
582 } // hits0
583
584 if (hits1) {
585 const int nBits = 3;
586 const int offset = m_modules / 2 + 1;
587 const int mask = (1 << nBits) - 1;
588 for (int thr = 0; thr < (m_modules/2); ++thr) {
589 const int hit = (hits1 >> (nBits*thr)) & mask;
590 if (hit) {
591 cmxCpCountsX=thr+offset;
592 cmxCpCountsY=crateCmx;
593 cmxCpCountsHit=hit;
594 fill(m_packageName,cmxCpCountsX,cmxCpCountsY,cmxCpCountsHit);
595 }
596 }
597 for (int mod = 0; mod < m_modules / 2; ++mod) {
598 const int val = (hits1 >> (mod * 3)) & 0x7;
599 if (val) {
600 if (cmx) {
601 cmxTopoTobsCpmRight=val;
602 fill(m_packageName,cmxTopoTobsCpmRight);
603 } else {
604 cmxTopoTobsCpmLeft=val;
605 fill(m_packageName,cmxTopoTobsCpmLeft);
606 }
607 }
608 cmxCount[crate * 2 + cmx] += val;
609 }
610 } // hits1
611 } else {
612 int bin = 0;
613 if (source == xAOD::CMXCPHits::LOCAL) bin = crate;
614 else if (source == xAOD::CMXCPHits::REMOTE_0) bin = m_crates;
615 else if (source == xAOD::CMXCPHits::REMOTE_1) bin = m_crates + 1;
616 else if (source == xAOD::CMXCPHits::REMOTE_2) bin = m_crates + 2;
617 else if (source == xAOD::CMXCPHits::TOTAL) bin = m_crates + 3;
618 const int nThresh = m_thresholds / 2;
619 if (hits0) {
620 const int nBits = m_threshBits;
621 const int offset = 0;
622 const int mask = (1 << nBits) - 1;
623
624 for (int thr = 0; thr < nThresh; ++thr) {
625 const int hit = (hits0 >> (nBits*thr)) & mask;
626 if (hit) {
627 if (cmx) {
628 cmxCpThresBinRightX=bin;
629 cmxCpThresBinRightY=thr+offset;
630 cmxCpThresBinRightHit=hit;
631 fill(m_packageName,cmxCpThresBinRightX,cmxCpThresBinRightY,cmxCpThresBinRightHit);
632 } else {
633 cmxCpThresBinLeftX=bin;
634 cmxCpThresBinLeftY=thr+offset;
635 cmxCpThresBinLeftHit=hit;
636 fill(m_packageName,cmxCpThresBinLeftX,cmxCpThresBinLeftY,cmxCpThresBinLeftHit);
637 }
638 }
639 }
640 } // hits0
641
642 if (hits1) {
643 //
644 const int nBits = 3;
645 const int offset = nThresh;
646 const int mask = (1 << nBits) - 1;
647 for (int thr = 0; thr < nThresh; ++thr) {
648 const int hit = (hits1 >> (nBits*thr)) & mask;
649 if (hit) {
650 if (cmx) {
651 cmxCpThresBinRightX=bin;
652 cmxCpThresBinRightY=thr+offset;
653 cmxCpThresBinRightHit=hit;
654 fill(m_packageName,cmxCpThresBinRightX,cmxCpThresBinRightY,cmxCpThresBinRightHit);
655 } else {
656 cmxCpThresBinLeftX=bin;
657 cmxCpThresBinLeftY=thr+offset;
658 cmxCpThresBinLeftHit=hit;
659 fill(m_packageName,cmxCpThresBinLeftX,cmxCpThresBinLeftY,cmxCpThresBinLeftHit);
660 }
661 }
662 }
663 } // hits1
664
665 }
666
667 monCmxCpHits.push_back(monCmxCpHit);
668 if (cmx)
669 monCmxCpHitsRight.push_back(monCmxCpHit);
670 else
671 monCmxCpHitsLeft.push_back(monCmxCpHit);
672
673 } //CmxCpHitsCollection iterator
674 //
675 auto cmxCpmHitsPeak = Monitored::Collection("cmxCpHitsPeak", monCmxCpHits, []( const auto &hit ){return hit.hit->peak();} );
676 variables.push_back(cmxCpmHitsPeak);
677 auto cmxCpmHitsCrateSlices = Monitored::Collection("cmxCpHitsCrateSlices", monCmxCpHits, []( const auto &hit ){return hit.crateSlices;} );
678 variables.push_back(cmxCpmHitsCrateSlices);
679 auto cmxCpmHitsCrateCmx = Monitored::Collection("cmxCpHitsCrateCmx", monCmxCpHits, []( const auto &hit ){return hit.crateCmx;} );
680 variables.push_back(cmxCpmHitsCrateCmx);
681 // for masks
682 auto cmxCpmHitsHits0 = Monitored::Collection("cmxCpHitsHits0", monCmxCpHits, []( const auto &hit ){return hit.hit->hits0();} );
683 variables.push_back(cmxCpmHitsHits0);
684 auto cmxCpmHitsHits1 = Monitored::Collection("cmxCpHitsHits1", monCmxCpHits, []( const auto &hit ){return hit.hit->hits1();} );
685 variables.push_back(cmxCpmHitsHits1);
686 // mask for checksum plus hits0
687 auto cmxCpmHits0TopoCheckSum = Monitored::Collection("cmxCpHits0TopoCheckSum", monCmxCpHits, []( const auto &hit ){return (hit.hit->hits0() && hit.srcTopoCheckSum);} );
688 variables.push_back(cmxCpmHits0TopoCheckSum);
689
690 // CMX-CP Topo Tobs
691 Monitored::Scalar<int> cmxCpTopoTobsCmxLeft = Monitored::Scalar<int>("cmxCpTopoTobsCmxLeft", 0);
692 Monitored::Scalar<int> cmxCpTopoTobsCmxRight = Monitored::Scalar<int>("cmxCpTopoTobsCmxRight", 0);
693 for (int crate = 0; crate < m_crates; ++crate) {
694 for (int cmx = 0; cmx < 2; ++cmx) {
695 int val = cmxCount[crate * 2 + cmx];
696 if (val) {
697 if (val >= m_maxTobsPerCmx) val = m_maxTobsPerCmx - 1;
698 if (cmx == 0) {
699 cmxCpTopoTobsCmxLeft=val;
700 fill(m_packageName,cmxCpTopoTobsCmxLeft);
701 } else {
702 cmxCpTopoTobsCmxRight=val;
703 fill(m_packageName,cmxCpTopoTobsCmxRight);
704 }
705 }
706 }
707 }
708
709 // Update error summary plot
710 Monitored::Scalar<int> cpmErrorX = Monitored::Scalar<int>("cpmErrorX", 0);
711 Monitored::Scalar<int> cpmErrorY = Monitored::Scalar<int>("cpmErrorY", 0);
712 Monitored::Scalar<int> cpmErrorSummary = Monitored::Scalar<int>("cpmErrorSummary", 0);
713 Monitored::Scalar<int> cpmErrorSummary_Events = Monitored::Scalar<int>("cpmErrorSummary_Events", 0);
714 std::vector<int> crateErr(4);
715 for (int err = 0; err < NumberOfSummaryBins; ++err) {
716 int error = 0;
717 for (int loc = 0; loc < m_crates * m_modules; ++loc) {
718 if ((errorsCPM[loc] >> err) & 0x1) {
719 cpmErrorX=loc;
720 cpmErrorY=err;
721 fill(m_packageName,cpmErrorX,cpmErrorY);
722 error = 1;
723 crateErr[loc / m_modules] |= (1 << err);
724 }
725 if (loc < m_crates * 2) {
726 if ((errorsCMX[loc] >> err) & 0x1) {
727 cpmErrorX=loc+(m_crates*m_modules);
728 cpmErrorY=err;
729 fill(m_packageName,cpmErrorX,cpmErrorY);
730 error = 1;
731 crateErr[loc / 2] |= (1 << err);
732 }
733 }
734 }
735 if (error) {
736 cpmErrorSummary=err;
737 fill(m_packageName,cpmErrorSummary);
738 // event numbers
739 cpmErrorSummary_Events=err;
740 auto evtstr = Monitored::Scalar<std::string>("evtstr", std::to_string(ctx.eventID().event_number()));
741 fill(m_packageName,evtstr,cpmErrorSummary_Events);
742 }
743 } // NSummaryBins
744
745
746 // Save error vector for global summary
747
748 auto save = std::make_unique<std::vector<int>>(crateErr);
749 auto* result = SG::makeHandle(m_errorLocation, ctx).put(std::move(save));
750 if (!result) {
751 ATH_MSG_ERROR("Error recording CPM error vector in TES");
752 return StatusCode::FAILURE;
753 }
754
755 fill(m_packageName,variables);
756 variables.clear();
757 return StatusCode::SUCCESS;
758}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define y
#define x
StatusCode fillCpmTowerVectors(SG::ReadHandle< xAOD::CPMTowerContainer > &cpmTower, std::vector< MonitorCpmTT > &monCpmTTs_em, std::vector< MonitorCpmTT > &monCpmTTs_had, std::vector< int > &errorsCPM, bool core, Monitored::Scalar< int > &cpmLoc, Monitored::Scalar< int > &GLinkParityError) const
Gaudi::Property< int > m_maxSlices
Gaudi::Property< int > m_modules
Gaudi::Property< int > m_threshBits
Gaudi::Property< int > m_crates
Gaudi::Property< int > m_maxTobsPerCmx
Gaudi::Property< int > m_thresholds
std::vector< bool > getIsolationBits(int val, int nThresh, int nBits) const
Gaudi::Property< int > m_tobsPerCPM
Gaudi::Property< int > m_isolBits
Description of TriggerTower_v2.
virtual double phi() const final
The azimuthal angle ( ) of the particle.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
setEventNumber uint32_t
const xAOD::TriggerTower_v2 * ttower
const xAOD::CPMTobRoI_v1 * tobroi

◆ 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

◆ GetEventInfo()

SG::ReadHandle< xAOD::EventInfo > AthMonitorAlgorithm::GetEventInfo ( const EventContext & ctx) const
inherited

Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)

Parameters
ctxEventContext for the event
Returns
a SG::ReadHandle<xAOD::EventInfo>

Definition at line 111 of file AthMonitorAlgorithm.cxx.

111 {
112 return SG::ReadHandle<xAOD::EventInfo>(m_EventInfoKey, ctx);
113}
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
Key for retrieving EventInfo from StoreGate.

◆ getGroup()

const ToolHandle< GenericMonitoringTool > & AthMonitorAlgorithm::getGroup ( const std::string & name) const
inherited

Get a specific monitoring tool from the tool handle array.

Finds a specific GenericMonitoringTool instance from the list of monitoring tools (a ToolHandleArray). Throws a FATAL warning if the object found is empty.

Parameters
namestring name of the desired tool
Returns
reference to the desired monitoring tool

Definition at line 168 of file AthMonitorAlgorithm.cxx.

168 {
169 // get the pointer to the tool, and check that it exists
170 auto idx = m_toolLookupMap.find(name);
171 if (ATH_LIKELY(idx != m_toolLookupMap.end())) {
172 return m_tools[idx->second];
173 }
174 else {
175 // treat empty tool handle case as in Monitored::Group
176 if (m_toolLookupMap.empty()) {
177 return m_dummy;
178 }
179
180 if (!isInitialized()) {
182 "It seems that the AthMonitorAlgorithm::initialize was not called "
183 "in derived class initialize method");
184 } else {
185 std::string available = std::accumulate(
186 m_toolLookupMap.begin(), m_toolLookupMap.end(), std::string(""),
187 [](const std::string& s, auto h) { return s + "," + h.first; });
188 ATH_MSG_FATAL("The tool " << name << " could not be found in the tool array of the "
189 << "monitoring algorithm " << m_name << ". This probably reflects a discrepancy between "
190 << "your python configuration and c++ filling code. Note: your available groups are {"
191 << available << "}.");
192 }
193 }
194 return m_dummy;
195}
#define ATH_MSG_FATAL(x)
#define ATH_LIKELY(x)
std::unordered_map< std::string, size_t > m_toolLookupMap
const ToolHandle< GenericMonitoringTool > m_dummy
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.

◆ getIsolationBits()

std::vector< bool > CpmMonitorAlgorithm::getIsolationBits ( int val,
int nThresh,
int nBits ) const
private

Definition at line 761 of file CpmMonitorAlgorithm.cxx.

762{
763 // return vector of threshold bits
764 //
765 std::vector<bool> nthres(nThresh, false);
766
767 if (val) {
768 const int mask = (1 << nBits) - 1;
769 for (int thr = 0; thr < nThresh; ++thr) {
770 const int hit = (val >> (nBits*thr)) & mask;
771 nthres[thr] = bool(hit);
772 }
773 } else {
774 ATH_MSG_WARNING("getIsolationBits: no input word supplied" );
775 }
776 return nthres;
777
778}

◆ getTrigDecisionTool()

const ToolHandle< Trig::TrigDecisionTool > & AthMonitorAlgorithm::getTrigDecisionTool ( ) const
inherited

Get the trigger decision tool member.

The trigger decision tool is used to check whether a specific trigger is passed by an event.

Returns
m_trigDecTool

Definition at line 198 of file AthMonitorAlgorithm.cxx.

198 {
199 return m_trigDecTool;
200}

◆ initialize()

StatusCode CpmMonitorAlgorithm::initialize ( )
overridevirtual

initialize

Returns
StatusCode

Reimplemented from AthMonitorAlgorithm.

Definition at line 16 of file CpmMonitorAlgorithm.cxx.

16 {
17
18 ATH_MSG_DEBUG("CpmMonitorAlgorith::initialize");
19 ATH_MSG_DEBUG("Package Name "<< m_packageName);
20 // container names
21 ATH_MSG_DEBUG("m_xAODTriggerTowerContainerName"<< m_xAODTriggerTowerContainerName);
22 ATH_MSG_DEBUG("m_cpmTowerLocation"<< m_cpmTowerLocation);
23 ATH_MSG_DEBUG("m_cpmTowerLocationOverlap"<< m_cpmTowerLocationOverlap);
24
25 // steering parameters
26 ATH_MSG_DEBUG("m_crates"<<m_crates );
27 ATH_MSG_DEBUG("m_modules"<<m_modules );
28 ATH_MSG_DEBUG("m_maxSlices"<<m_maxSlices );
29 ATH_MSG_DEBUG("m_tobsPerCPM"<<m_tobsPerCPM );
30 ATH_MSG_DEBUG("m_isolBits"<<m_isolBits );
31 ATH_MSG_DEBUG("m_maxTobsPerCmx"<<m_maxTobsPerCmx );
32
33 // initialise all the containers that we need
34 ATH_CHECK(m_xAODTriggerTowerContainerName.initialize());
35 ATH_CHECK(m_cpmTowerLocation.initialize());
36 ATH_CHECK(m_cpmTowerLocationOverlap.initialize());
37 ATH_CHECK( m_cpmTobRoiLocation.initialize());
38 ATH_CHECK( m_cmxCpTobLocation.initialize());
39 ATH_CHECK( m_cmxCpHitsLocation.initialize());
40
41 ATH_CHECK(m_errorLocation.initialize());
42
44}
virtual StatusCode initialize() override
initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.

◆ 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()

◆ 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.

◆ parseList()

StatusCode AthMonitorAlgorithm::parseList ( const std::string & line,
std::vector< std::string > & result ) const
virtualinherited

Parse a string into a vector.

The input string is a single long string of all of the trigger names. It parses this string and turns it into a vector, where each element is one trigger or trigger category.

Parameters
lineThe input string.
resultThe parsed output vector of strings.
Returns
StatusCode

Definition at line 345 of file AthMonitorAlgorithm.cxx.

345 {
346 std::string item;
347 std::stringstream ss(line);
348
349 ATH_MSG_DEBUG( "AthMonitorAlgorithm::parseList()" );
350
351 while ( std::getline(ss, item, ',') ) {
352 std::stringstream iss(item); // remove whitespace
353 iss >> item;
354 result.push_back(item);
355 }
356
357 return StatusCode::SUCCESS;
358}
static Double_t ss

◆ 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.

◆ trigChainsArePassed()

bool AthMonitorAlgorithm::trigChainsArePassed ( const std::vector< std::string > & vTrigNames) const
inherited

Check whether triggers are passed.

For the event, use the trigger decision tool to check that at least one of the triggers listed in the supplied vector is passed.

Parameters
vTrigNamesList of trigger names.
Returns
If empty input, default to true. If at least one trigger is specified, returns whether at least one trigger was passed.

Definition at line 203 of file AthMonitorAlgorithm.cxx.

203 {
204
205
206 // If no triggers were given, return true.
207 if (vTrigNames.empty()) return true;
208
209
210 // Trigger: Check if this Algorithm is being run as an Express Stream job.
211 // Events are entering the express stream are chosen randomly, and by chain,
212 // Hence an additional check should be aplied to see if the chain(s)
213 // monitored here are responsible for the event being selected for
214 // the express stream.
215
216 const auto group = m_trigDecTool->getChainGroup(vTrigNames);
218 const auto passedBits = m_trigDecTool->isPassedBits(group);
219 bool expressPass = passedBits & TrigDefs::Express_passed; //bitwise AND
220 if(!expressPass) {
221 return false;
222 }
223 }
224
225 // monitor the event if any of the chains in the chain group passes the event.
226 return group->isPassed();
227
228}
Gaudi::Property< bool > m_enforceExpressTriggers

◆ 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

◆ cfg

CpmMonitorAlgorithm.cfg = MainServicesCfg(flags)

Definition at line 454 of file CpmMonitorAlgorithm.py.

◆ CpmMonitorCfg

CpmMonitorAlgorithm.CpmMonitorCfg = CpmMonitoringConfig(flags)

Definition at line 457 of file CpmMonitorAlgorithm.py.

◆ False

CpmMonitorAlgorithm.False

Definition at line 463 of file CpmMonitorAlgorithm.py.

◆ Files

CpmMonitorAlgorithm.Files

Definition at line 446 of file CpmMonitorAlgorithm.py.

◆ flags

CpmMonitorAlgorithm.flags = initConfigFlags()

Definition at line 445 of file CpmMonitorAlgorithm.py.

◆ HISTFileName

CpmMonitorAlgorithm.HISTFileName

Definition at line 447 of file CpmMonitorAlgorithm.py.

◆ inputs

CpmMonitorAlgorithm.inputs = glob.glob('/eos/atlas/atlastier0/rucio/data18_13TeV/physics_Main/00354311/data18_13TeV.00354311.physics_Main.recon.ESD.f1129/data18_13TeV.00354311.physics_Main.recon.ESD.f1129._lb0013._SFO-8._0001.1')

Definition at line 443 of file CpmMonitorAlgorithm.py.

◆ m_cmxCpHitsLocation

SG::ReadHandleKey<xAOD::CMXCPHitsContainer> CpmMonitorAlgorithm::m_cmxCpHitsLocation {this, "CMXCPHitsLocation", LVL1::TrigT1CaloDefs::CMXCPHitsLocation, "CMXCPHits container"}
private

Definition at line 102 of file CpmMonitorAlgorithm.h.

102{this, "CMXCPHitsLocation", LVL1::TrigT1CaloDefs::CMXCPHitsLocation, "CMXCPHits container"};
static const std::string CMXCPHitsLocation

◆ m_cmxCpTobLocation

SG::ReadHandleKey<xAOD::CMXCPTobContainer> CpmMonitorAlgorithm::m_cmxCpTobLocation {this, "CMXCPTobLocation", LVL1::TrigT1CaloDefs::CMXCPTobLocation, "CMXCPTob container"}
private

Definition at line 101 of file CpmMonitorAlgorithm.h.

101{this, "CMXCPTobLocation", LVL1::TrigT1CaloDefs::CMXCPTobLocation, "CMXCPTob container"};
static const std::string CMXCPTobLocation

◆ m_cpmTobRoiLocation

SG::ReadHandleKey<xAOD::CPMTobRoIContainer> CpmMonitorAlgorithm::m_cpmTobRoiLocation {this, "CPMTobRoILocation", LVL1::TrigT1CaloDefs::CPMTobRoILocation, "CPMTobRoI container"}
private

Definition at line 100 of file CpmMonitorAlgorithm.h.

100{this, "CPMTobRoILocation", LVL1::TrigT1CaloDefs::CPMTobRoILocation, "CPMTobRoI container"};
static const std::string CPMTobRoILocation

◆ m_cpmTowerLocation

SG::ReadHandleKey<xAOD::CPMTowerContainer> CpmMonitorAlgorithm::m_cpmTowerLocation {this, "CPMTowerLocation", LVL1::TrigT1CaloDefs::CPMTowerLocation, "CPM container"}
private

Definition at line 98 of file CpmMonitorAlgorithm.h.

98{this, "CPMTowerLocation", LVL1::TrigT1CaloDefs::CPMTowerLocation, "CPM container"};
static const std::string CPMTowerLocation

◆ m_cpmTowerLocationOverlap

SG::ReadHandleKey<xAOD::CPMTowerContainer> CpmMonitorAlgorithm::m_cpmTowerLocationOverlap {this, "CPMTowerLocationOverlap",LVL1::TrigT1CaloDefs::CPMTowerLocation + "Overlap", "CPM Overlap container"}
private

Definition at line 99 of file CpmMonitorAlgorithm.h.

99{this, "CPMTowerLocationOverlap",LVL1::TrigT1CaloDefs::CPMTowerLocation + "Overlap", "CPM Overlap container"};

◆ m_crates

Gaudi::Property<int> CpmMonitorAlgorithm::m_crates {this,"s_crates", 4, "Number of CPM crates"}
private

Definition at line 79 of file CpmMonitorAlgorithm.h.

79{this,"s_crates", 4, "Number of CPM crates"};

◆ m_dataType

AthMonitorAlgorithm::DataType_t AthMonitorAlgorithm::m_dataType
protectedinherited

Instance of the DataType_t enum.

Definition at line 356 of file AthMonitorAlgorithm.h.

◆ m_dataTypeStr

Gaudi::Property<std::string> AthMonitorAlgorithm::m_dataTypeStr {this,"DataType","userDefined"}
protectedinherited

DataType string pulled from the job option and converted to enum.

Definition at line 358 of file AthMonitorAlgorithm.h.

358{this,"DataType","userDefined"};

◆ m_defaultLBDuration

Gaudi::Property<float> AthMonitorAlgorithm::m_defaultLBDuration {this,"DefaultLBDuration",60.}
protectedinherited

Default duration of one lumi block.

Definition at line 365 of file AthMonitorAlgorithm.h.

365{this,"DefaultLBDuration",60.};

◆ m_detailLevel

Gaudi::Property<int> AthMonitorAlgorithm::m_detailLevel {this,"DetailLevel",0}
protectedinherited

Sets the level of detail used in the monitoring.

Definition at line 366 of file AthMonitorAlgorithm.h.

366{this,"DetailLevel",0};

◆ 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_DQFilterTools

ToolHandleArray<IDQFilterTool> AthMonitorAlgorithm::m_DQFilterTools {this,"FilterTools",{}}
protectedinherited

Array of Data Quality filter tools.

Definition at line 346 of file AthMonitorAlgorithm.h.

346{this,"FilterTools",{}};

◆ m_dummy

const ToolHandle<GenericMonitoringTool> AthMonitorAlgorithm::m_dummy
privateinherited

Definition at line 374 of file AthMonitorAlgorithm.h.

◆ m_enforceExpressTriggers

Gaudi::Property<bool> AthMonitorAlgorithm::m_enforceExpressTriggers
privateinherited
Initial value:
{this,
"EnforceExpressTriggers", false,
"Requires that matched triggers made the event enter the express stream"}

Definition at line 377 of file AthMonitorAlgorithm.h.

377 {this,
378 "EnforceExpressTriggers", false,
379 "Requires that matched triggers made the event enter the express stream"};

◆ m_environment

AthMonitorAlgorithm::Environment_t AthMonitorAlgorithm::m_environment
protectedinherited

Instance of the Environment_t enum.

Definition at line 355 of file AthMonitorAlgorithm.h.

◆ m_environmentStr

Gaudi::Property<std::string> AthMonitorAlgorithm::m_environmentStr {this,"Environment","user"}
protectedinherited

Environment string pulled from the job option and converted to enum.

Definition at line 357 of file AthMonitorAlgorithm.h.

357{this,"Environment","user"};

◆ m_errorLocation

SG::WriteHandleKey<std::vector<int> > CpmMonitorAlgorithm::m_errorLocation {this,"ErrorLocation","L1CaloCPMErrorVector","Error vector name"}
private

Definition at line 89 of file CpmMonitorAlgorithm.h.

89{this,"ErrorLocation","L1CaloCPMErrorVector","Error vector name"};

◆ m_EventInfoKey

SG::ReadHandleKey<xAOD::EventInfo> AthMonitorAlgorithm::m_EventInfoKey {this,"EventInfoKey","EventInfo"}
protectedinherited

Key for retrieving EventInfo from StoreGate.

Definition at line 367 of file AthMonitorAlgorithm.h.

367{this,"EventInfoKey","EventInfo"};

◆ 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_fileKey

Gaudi::Property<std::string> AthMonitorAlgorithm::m_fileKey {this,"FileKey",""}
protectedinherited

Internal Athena name for file.

Definition at line 363 of file AthMonitorAlgorithm.h.

363{this,"FileKey",""};

◆ m_isolBits

Gaudi::Property<int> CpmMonitorAlgorithm::m_isolBits {this,"s_isolBits", 5, "Number of bits for encoded isolation"}
private

Definition at line 83 of file CpmMonitorAlgorithm.h.

83{this,"s_isolBits", 5, "Number of bits for encoded isolation"};

◆ m_lbDurationDataKey

SG::ReadCondHandleKey<LBDurationCondData> AthMonitorAlgorithm::m_lbDurationDataKey {this,"LBDurationCondDataKey","LBDurationCondData","SG Key of LBDurationCondData object"}
protectedinherited

Definition at line 350 of file AthMonitorAlgorithm.h.

351{this,"LBDurationCondDataKey","LBDurationCondData","SG Key of LBDurationCondData object"};

◆ m_lumiDataKey

SG::ReadCondHandleKey<LuminosityCondData> AthMonitorAlgorithm::m_lumiDataKey {this,"LuminosityCondDataKey","LuminosityCondData","SG Key of LuminosityCondData object"}
protectedinherited

Definition at line 348 of file AthMonitorAlgorithm.h.

349{this,"LuminosityCondDataKey","LuminosityCondData","SG Key of LuminosityCondData object"};

◆ m_maxSlices

Gaudi::Property<int> CpmMonitorAlgorithm::m_maxSlices {this,"s_maxSlices", 5, "Maximum number of slices"}
private

Definition at line 81 of file CpmMonitorAlgorithm.h.

81{this,"s_maxSlices", 5, "Maximum number of slices"};

◆ m_maxTobsPerCmx

Gaudi::Property<int> CpmMonitorAlgorithm::m_maxTobsPerCmx {this,"MaxTOBsPerCMX", 70, "Maximum number of TOBs per CMX plotted"}
private

Definition at line 86 of file CpmMonitorAlgorithm.h.

86{this,"MaxTOBsPerCMX", 70, "Maximum number of TOBs per CMX plotted"};

◆ m_modules

Gaudi::Property<int> CpmMonitorAlgorithm::m_modules {this,"s_modules", 14, "Number of modules per crate (modules numbered 1-14)"}
private

Definition at line 80 of file CpmMonitorAlgorithm.h.

80{this,"s_modules", 14, "Number of modules per crate (modules numbered 1-14)"};

◆ m_name

std::string AthMonitorAlgorithm::m_name
privateinherited

Definition at line 371 of file AthMonitorAlgorithm.h.

◆ m_packageName

StringProperty CpmMonitorAlgorithm::m_packageName {this,"PackageName","CpmMonitor","group name for histograming"}
private

Definition at line 77 of file CpmMonitorAlgorithm.h.

77{this,"PackageName","CpmMonitor","group name for histograming"};

◆ m_phiScaleTT

double CpmMonitorAlgorithm::m_phiScaleTT {}
private

Definition at line 75 of file CpmMonitorAlgorithm.h.

75{};

◆ m_threshBits

Gaudi::Property<int> CpmMonitorAlgorithm::m_threshBits {this,"s_threshBits", 3, "Number of bits per threshold for hit sums"}
private

Definition at line 84 of file CpmMonitorAlgorithm.h.

84{this,"s_threshBits", 3, "Number of bits per threshold for hit sums"};

◆ m_thresholds

Gaudi::Property<int> CpmMonitorAlgorithm::m_thresholds {this,"s_thresholds", 16, "Number of EM/Tau threshold bits"}
private

Definition at line 85 of file CpmMonitorAlgorithm.h.

85{this,"s_thresholds", 16, "Number of EM/Tau threshold bits"};

◆ m_tobsPerCPM

Gaudi::Property<int> CpmMonitorAlgorithm::m_tobsPerCPM {this,"s_tobsPerCPM", 5, "Maximum number of TOBs per CPM sent to CMX"}
private

Definition at line 82 of file CpmMonitorAlgorithm.h.

82{this,"s_tobsPerCPM", 5, "Maximum number of TOBs per CPM sent to CMX"};

◆ m_toolLookupMap

std::unordered_map<std::string, size_t> AthMonitorAlgorithm::m_toolLookupMap
privateinherited

Definition at line 372 of file AthMonitorAlgorithm.h.

◆ m_tools

ToolHandleArray<GenericMonitoringTool> AthMonitorAlgorithm::m_tools {this,"GMTools",{}}
protectedinherited

Array of Generic Monitoring Tools.

Definition at line 341 of file AthMonitorAlgorithm.h.

341{this,"GMTools",{}};

◆ m_trigDecTool

PublicToolHandle<Trig::TrigDecisionTool> AthMonitorAlgorithm::m_trigDecTool
protectedinherited

Tool to tell whether a specific trigger is passed.

Definition at line 345 of file AthMonitorAlgorithm.h.

◆ m_triggerChainString

Gaudi::Property<std::string> AthMonitorAlgorithm::m_triggerChainString {this,"TriggerChain",""}
protectedinherited

Trigger chain string pulled from the job option and parsed into a vector.

Definition at line 360 of file AthMonitorAlgorithm.h.

360{this,"TriggerChain",""};

◆ m_trigLiveFractionDataKey

SG::ReadCondHandleKey<TrigLiveFractionCondData> AthMonitorAlgorithm::m_trigLiveFractionDataKey {this,"TrigLiveFractionCondDataKey","TrigLiveFractionCondData", "SG Key of TrigLiveFractionCondData object"}
protectedinherited

Definition at line 352 of file AthMonitorAlgorithm.h.

353{this,"TrigLiveFractionCondDataKey","TrigLiveFractionCondData", "SG Key of TrigLiveFractionCondData object"};

◆ m_useLumi

Gaudi::Property<bool> AthMonitorAlgorithm::m_useLumi {this,"EnableLumi",false}
protectedinherited

Allows use of various luminosity functions.

Definition at line 364 of file AthMonitorAlgorithm.h.

364{this,"EnableLumi",false};

◆ 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_vTrigChainNames

std::vector<std::string> AthMonitorAlgorithm::m_vTrigChainNames
protectedinherited

Vector of trigger chain names parsed from trigger chain string.

Definition at line 361 of file AthMonitorAlgorithm.h.

◆ m_xAODTriggerTowerContainerName

SG::ReadHandleKey<xAOD::TriggerTowerContainer> CpmMonitorAlgorithm::m_xAODTriggerTowerContainerName {this, "BS_xAODTriggerTowerContainer",LVL1::TrigT1CaloDefs::xAODTriggerTowerLocation,"Trigger Tower Container"}
private

Definition at line 97 of file CpmMonitorAlgorithm.h.

97{this, "BS_xAODTriggerTowerContainer",LVL1::TrigT1CaloDefs::xAODTriggerTowerLocation,"Trigger Tower Container"};
static const std::string xAODTriggerTowerLocation

◆ nevents

int CpmMonitorAlgorithm.nevents = -1

Definition at line 465 of file CpmMonitorAlgorithm.py.

◆ OutputLevel

CpmMonitorAlgorithm.OutputLevel

Definition at line 461 of file CpmMonitorAlgorithm.py.

◆ summariseProps

CpmMonitorAlgorithm.summariseProps

Definition at line 463 of file CpmMonitorAlgorithm.py.

◆ withDetails

CpmMonitorAlgorithm.withDetails

Definition at line 463 of file CpmMonitorAlgorithm.py.


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