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

Class for Tile Cell based monitoring. More...

#include <TileCellMonitorAlgorithm.h>

Inheritance diagram for TileCellMonitorAlgorithm:

Public Types

enum  L1TriggerTypeBit {
  BIT0_RNDM , BIT1_ZEROBIAS , BIT2_L1CAL , BIT3_MUON ,
  BIT4_RPC , BIT5_FTK , BIT6_CTP , BIT7_CALIB ,
  ANY_PHYSICS
}
 Describes L1 trigger type bits. More...
enum  AuxiliarySampling { SAMP_ALL = 4 , MAX_SAMP = 5 }
 Describes Tile auxiliary sampling. More...
enum  Partition {
  PART_LBA , PART_LBC , PART_EBA , PART_EBC ,
  PART_ALL , MAX_PART
}
 Describes Tile partitions (ROS - 1) More...
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

virtual ~TileCellMonitorAlgorithm ()=default
virtual StatusCode initialize () override
 initialize
virtual StatusCode fillHistograms (const EventContext &ctx) const override
 adds event to the monitoring histograms
 TileMonitorAlgorithm (const std::string &name, ISvcLocator *svcLocator)
std::vector< int > getL1TriggerIndices (uint32_t lvl1TriggerType) const
 Return indices of histograms to be filled according fired L1 trigger type.
L1TriggerTypeBit getL1TriggerTypeBit (int lvl1TriggerIdx) const
 Return Level1 Trigger type bit according trigger index.
int getNumberOfL1Triggers (void) const
 Return number of L1 triggers for which histograms should be filled.
bool isPhysicsEvent (uint32_t lvl1TriggerType) const
 Return true if it is physics event or false for calibration event.
Partition getPartition (const CaloCell *cell, const TileID *tileID) const
 Return Partition for Tile cell or MAX_PART otherwise.
Partition getPartition (Identifier id, const TileID *tileID) const
 Return Partition for Tile cell identifier or MAX_PART otherwise.
Partition getPartition (IdentifierHash hash, const TileID *tileID) const
 Return Partition for Tile cell identifier hash or MAX_PART otherwise.
 AthMonitorAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
 Constructor.
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

 flags = initConfigFlags()
 Files
 HISTFileName
 useTrigger
 enableLumiAccess
 MaxEvents
 cfg = MainServicesCfg(flags)
list l1Triggers
 withDetails
 True
 summariseProps
 sc = cfg.run()

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

typedef std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > MonVarVec_t
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

int getDigitizer (int channel) const
void fillMaskedInDB (const TileBadChannels *badChannels) const
void fillSynchronization (const std::vector< const CaloCell * > &cells, const std::vector< int > &l1TriggersIndices) const
L1TriggerTypeBit getL1TriggerTypeBitFromName (const std::string &triggerBitName) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

Gaudi::Property< float > m_energyThreshold
Gaudi::Property< float > m_negativeEnergyThreshold
Gaudi::Property< float > m_energyThresholdForTime
Gaudi::Property< float > m_energyLimitForTime
Gaudi::Property< float > m_energyBalanceThreshold
Gaudi::Property< float > m_timeBalanceThreshold
Gaudi::Property< float > m_energyThresholdForGapScint
Gaudi::Property< bool > m_fillTimeHistograms
Gaudi::Property< bool > m_fillChannelTimeHistograms
Gaudi::Property< bool > m_fillGapScintHistograms
Gaudi::Property< bool > m_fillTimeAndEnergyDiffHistograms
Gaudi::Property< std::vector< float > > m_energyRangeForMuon
Gaudi::Property< std::vector< float > > m_timeRangeForMuon
Gaudi::Property< std::vector< float > > m_energyThresholdForGain
ServiceHandle< TileCablingSvcm_cablingSvc
 Name of Tile cabling service.
SG::ReadHandleKey< TileDQstatusm_DQstatusKey
SG::ReadCondHandleKey< TileBadChannelsm_badChannelsKey
 Name of TileBadChannels in condition store.
SG::ReadHandleKey< CaloCellContainerm_caloCellContainerKey
const TileIDm_tileID {nullptr}
const TileHWIDm_tileHWID {nullptr}
const TileCablingServicem_cabling {nullptr}
std::vector< int > m_energyBalModPartGroups
std::vector< int > m_timeBalModPartGroups
std::vector< int > m_cellSynchGroups
std::vector< int > m_maskedOnFlyGroups
std::vector< int > m_maskedDueDQGroups
std::vector< int > m_maskedCellsDueDQGroups
std::vector< int > m_maskedOnFlyLBGroups
std::vector< int > m_maskedCellsLBGroups
std::vector< std::vector< int > > m_maskedGroups
std::vector< std::vector< int > > m_energySampEGroups
std::vector< std::vector< int > > m_moduleCorrGroups
std::vector< std::vector< int > > m_chanTimeGroups
std::vector< std::vector< int > > m_digiTimeGroups
std::vector< std::vector< int > > m_nCellsGroups
std::vector< std::vector< int > > m_nCellsOverThrGroups
std::vector< std::vector< int > > m_detailOccupGroups
std::vector< std::vector< int > > m_overThrOccupGroups
std::vector< std::vector< int > > m_overThr30GeVOccupGroups
std::vector< std::vector< int > > m_overThr300GeVOccupGroups
std::vector< std::vector< int > > m_eneDiffChanModGroups
std::vector< std::vector< std::vector< int > > > m_overThrOccupGainGroups
std::vector< std::vector< std::vector< int > > > m_detailOccupGainGroups
std::vector< std::vector< std::vector< int > > > m_energyGapScintGroups
std::vector< std::vector< std::vector< int > > > m_chanTimeSampGroups
std::vector< std::vector< std::vector< int > > > m_eneDiffSampGroups
std::vector< std::vector< std::vector< int > > > m_timeDiffSampGroups
std::vector< std::vector< int > > m_eneEtaPhiGroups
std::vector< std::vector< int > > m_overThrEtaPhiGroups
std::vector< int > m_negOccupGroups
std::vector< int > m_timeBalGroups
std::vector< int > m_energyBalGroups
Gaudi::Property< std::vector< std::string > > m_fillHistogramsForL1Triggers
std::vector< L1TriggerTypeBitm_l1Triggers
std::vector< int > m_l1TriggerIndices
std::vector< std::string > m_l1TriggerBitNames
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

Class for Tile Cell based monitoring.

Definition at line 29 of file TileCellMonitorAlgorithm.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

◆ AuxiliarySampling

Describes Tile auxiliary sampling.

Enumerator
SAMP_ALL 
MAX_SAMP 

Definition at line 42 of file TileMonitorAlgorithm.h.

◆ 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 };

◆ L1TriggerTypeBit

Describes L1 trigger type bits.

Enumerator
BIT0_RNDM 
BIT1_ZEROBIAS 
BIT2_L1CAL 
BIT3_MUON 
BIT4_RPC 
BIT5_FTK 
BIT6_CTP 
BIT7_CALIB 
ANY_PHYSICS 

Definition at line 35 of file TileMonitorAlgorithm.h.

◆ Partition

Describes Tile partitions (ROS - 1)

Enumerator
PART_LBA 
PART_LBC 
PART_EBA 
PART_EBC 
PART_ALL 
MAX_PART 

Definition at line 48 of file TileMonitorAlgorithm.h.

Constructor & Destructor Documentation

◆ ~TileCellMonitorAlgorithm()

virtual TileCellMonitorAlgorithm::~TileCellMonitorAlgorithm ( )
virtualdefault

Member Function Documentation

◆ AthMonitorAlgorithm()

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

Constructor.

Definition at line 45 of file AthMonitorAlgorithm.cxx.

9:AthReentrantAlgorithm(name,pSvcLocator)
10 // Put this here rather than in the header to allow forward-declaring
11 // TrigDecisionTool.
12,m_trigDecTool{this, "TrigDecisionTool",""}
16{}
AthMonitorAlgorithm::DataType_t m_dataType
Instance of the DataType_t enum.
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.
AthMonitorAlgorithm::Environment_t m_environment
Instance of the Environment_t enum.

◆ 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; }

◆ 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; }

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

◆ fillHistograms()

StatusCode TileCellMonitorAlgorithm::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 TileMonitorAlgorithm.

Definition at line 124 of file TileCellMonitorAlgorithm.cxx.

124 {
125
126 using Tile = TileCalibUtils;
127
128 // In case you want to measure the execution time
129 auto timer = Monitored::Timer("TIME_execute");
130
131 const xAOD::EventInfo* eventInfo = GetEventInfo(ctx).get();
132
133 const TileDQstatus* dqStatus = SG::makeHandle(m_DQstatusKey, ctx).get();
134 auto lumiBlock = Monitored::Scalar<int>("lumiBlock", eventInfo->lumiBlock());
135
136
137 if (msgLvl(MSG::DEBUG)) {
138 msg(MSG::DEBUG) << "Run = " << eventInfo->runNumber()
139 << " LB = " << eventInfo->lumiBlock()
140 << " Evt = " << eventInfo->eventNumber()
141 << " BCID = " << eventInfo->bcid()
142 << " lvl1 = 0x" << std::hex << eventInfo->level1TriggerType() << std::dec;
143
144 const std::vector<xAOD::EventInfo::StreamTag>& eventStreamTags = eventInfo->streamTags();
145 if (!eventStreamTags.empty()) {
146 msg(MSG::DEBUG) << " stream name/type:";
147 for (const auto& eventStreamTag : eventStreamTags) {
148 msg(MSG::DEBUG) << " " << eventStreamTag.name() << "/" << eventStreamTag.type();
149 }
150 }
151
152 msg(MSG::DEBUG) << endmsg;
153 }
154
155 // Weights for E-cells, only towers 10..15
156 static const float energyWeight[6] = {1.f/3.f, 1.f/6.f, 1.f/11.f, 1.f/11.f, 1.f/28.f, 1.f/28.f};
157 static const int gapScintIndex[6] = {0, 1, 2, 2, 3, 3};
158
159 std::vector<const CaloCell*> muonCells;
160
161 std::vector<int> energyBalModPartModule;
162 std::vector<int> energyBalModPartPartition;
163
164 std::vector<int> timeBalModPartModule;
165 std::vector<int> timeBalModPartPartition;
166
167 double energySample[MAX_PART][MAX_SAMP]{};
168 int nCells[MAX_PART]{};
169 int nBadCells[MAX_PART]{};
170
171 // Arrays for BCID plots
172 int nCellsOverThreshold[MAX_PART]{};
173
174 // Number of channels masked on the fly
175 int nBadChannelsOnFly[MAX_PART]{};
176
177 // Number of channels masked on the fly due to bad DQ status
178 unsigned int nMaskedChannelsDueDQ[MAX_PART]{};
179
180 // Number of cells masked on the fly due to bad DQ status
181 unsigned int nMaskedCellsDueDQ[MAX_PART]{};
182
183 std::vector<int> negOccupModule[Tile::MAX_ROS - 1];
184 std::vector<int> negOccupChannel[Tile::MAX_ROS - 1];
185
186 std::vector<float> timeBal[Tile::MAX_ROS - 1];
187 std::vector<int> timeBalModule[Tile::MAX_ROS - 1];
188
189 std::vector<float> energyBal[Tile::MAX_ROS - 1];
190 std::vector<int> energyBalModule[Tile::MAX_ROS - 1];
191
192 std::vector<int> detailOccupModule[Tile::MAX_ROS - 1];
193 std::vector<int> detailOccupChannel[Tile::MAX_ROS - 1];
194 std::vector<float> detailOccupEnergies[Tile::MAX_ROS - 1];
195
196 std::vector<int> detailOccupGainModule[Tile::MAX_ROS - 1][Tile::MAX_GAIN];
197 std::vector<int> detailOccupGainChannel[Tile::MAX_ROS - 1][Tile::MAX_GAIN];
198 std::vector<float> detailOccupGainEnergies[Tile::MAX_ROS - 1][Tile::MAX_GAIN];
199
200 std::vector<int> overThrOccupModule[Tile::MAX_ROS - 1];
201 std::vector<int> overThrOccupChannel[Tile::MAX_ROS - 1];
202 std::vector<float> overThrOccupWeight[Tile::MAX_ROS - 1];
203
204 std::vector<int> overThrOccupGainModule[Tile::MAX_ROS - 1][Tile::MAX_GAIN];
205 std::vector<int> overThrOccupGainChannel[Tile::MAX_ROS - 1][Tile::MAX_GAIN];
206 std::vector<float> overThrOccupGainWeight[Tile::MAX_ROS - 1][Tile::MAX_GAIN];
207
208 std::vector<int> overThr30GeVOccupModule[Tile::MAX_ROS - 1];
209 std::vector<int> overThr30GeVOccupChannel[Tile::MAX_ROS - 1];
210
211 std::vector<int> overThr300GeVOccupModule[Tile::MAX_ROS - 1];
212 std::vector<int> overThr300GeVOccupChannel[Tile::MAX_ROS - 1];
213
214 std::vector<int> eneDiff[Tile::MAX_ROS - 1];
215 std::vector<int> eneDiffChannel[Tile::MAX_ROS - 1];
216 std::vector<int> eneDiffModule[Tile::MAX_ROS - 1];
217
218 std::vector<int> maskedOnFlyDrawers[Tile::MAX_ROS - 1];
219 std::vector<int> maskedOnFlyChannel[Tile::MAX_ROS - 1];
220
221 std::vector<int> chanTime[Tile::MAX_ROS - 1];
222 std::vector<int> chanTimeDrawer[Tile::MAX_ROS - 1];
223 std::vector<int> chanTimeChannel[Tile::MAX_ROS - 1];
224 std::vector<int> chanTimeDigitizer[Tile::MAX_ROS - 1];
225
226 int nChannelsInPartition = 2880; // LB
227 for (unsigned int partition = 0; partition < Tile::MAX_ROS - 1; ++partition) {
228 if (partition > 1) nChannelsInPartition = 2048; // EB
229 detailOccupModule[partition].reserve(nChannelsInPartition);
230 detailOccupChannel[partition].reserve(nChannelsInPartition);
231 detailOccupEnergies[partition].reserve(nChannelsInPartition);
232 }
233
234 std::vector<float> occupEta[SAMP_ALL];
235 std::vector<float> occupPhi[SAMP_ALL];
236 std::vector<float> occupEnergy[SAMP_ALL];
237
238 std::vector<float> overThrOccupEta[SAMP_ALL];
239 std::vector<float> overThrOccupPhi[SAMP_ALL];
240
241 std::vector<float> sampChanTime[Tile::MAX_ROS - 1][SAMP_ALL];
242 std::vector<float> sampEnergyDiff[Tile::MAX_ROS - 1][SAMP_ALL];
243 std::vector<float> sampTimeDiff[Tile::MAX_ROS - 1][SAMP_ALL];
244
245 PairBuilder moduleCorr[MAX_PART];
246
247 // Indices of L1 trigger histograms to be filled in the current event
248 std::vector<int> l1TriggersIndices = getL1TriggerIndices(eventInfo->level1TriggerType());
249
250 SG::ReadCondHandle<TileBadChannels> badChannelsHandle(m_badChannelsKey, ctx);
251 const TileBadChannels* badChannels(badChannelsHandle.cptr());
252
253 fillMaskedInDB(badChannels);
254
255 bool isCollision = true;
256
257 SG::ReadHandle<CaloCellContainer> caloCellContainer(m_caloCellContainerKey, ctx);
258 ATH_CHECK( caloCellContainer.isValid() );
259
260
261 for (const CaloCell* cell : *caloCellContainer) {
262 // Tell clang to optimize assuming that FP operations may trap.
263 // Prevents spurious FPEs from the division by energy.
265 Identifier id = cell->ID();
266 if (m_tileID->is_tile(id)) {
267
268 const TileCell* tile_cell = dynamic_cast<const TileCell*>(cell);
269 if (tile_cell == 0) continue;
270
271 int drawer = 0; // Drawer number, range 0-63, the same for both channels
272 int channel1 = -1; // Channel number, range 0-47 or -1 for unknown
273 int channel2 = -1; // Channel number, range 0-47 or -1 for unknown
274
275 int ros1 = -1;
276 int ros2 = -1;
277
278 int partition1 = -1;
279 int partition2 = -1;
280
281 bool isMaskedChannel1 = false;
282 bool isMaskedAdc1 = false;
283 bool isMaskedAdc2 = false;
284
285 int gain1 = tile_cell->gain1(); // Gain of first PMT
286 int gain2 = tile_cell->gain2(); // Gain of second PMT
287
288 const CaloDetDescrElement* caloDDE = tile_cell->caloDDE();
289
290 IdentifierHash hash1 = caloDDE->onl1();
291 if (hash1 != TileHWID::NOT_VALID_HASH) {
292 HWIdentifier channel1_id = m_tileHWID->channel_id(hash1);
293 channel1 = m_tileHWID->channel(channel1_id);
294 drawer = m_tileHWID->drawer(channel1_id);
295 ros1 = m_tileHWID->ros(channel1_id);
296 partition1 = ros1 - 1;
297 }
298
299 IdentifierHash hash2 = caloDDE->onl2();
300 if (hash2 != TileHWID::NOT_VALID_HASH) {
301 HWIdentifier channel2_id = m_tileHWID->channel_id(hash2);
302 channel2 = m_tileHWID->channel(channel2_id);
303 drawer = m_tileHWID->drawer(channel2_id);
304 ros2 = m_tileHWID->ros(channel2_id);
305 partition2 = ros2 - 1;
306 }
307
308 // Note that drawer from HWID and module from ID are different for E3 cells near MBTS
309 int module = m_tileID->module(id); // Range from 0-63
310
311 int sample = m_tileID->sample(id);
312 // Skip special-purpose samplings used for Cs calibration.
313 if (sample >= SAMP_ALL) continue;
314
315 bool single_PMT_scin = (sample == TileID::SAMP_E);
316 bool single_PMT_C10 = (m_tileID->section(id) == TileID::GAPDET
317 && sample == TileID::SAMP_C
318 && (!m_cabling->C10_connected(module)));
319
320 // Distinguish cells with one or two PMTs
321 bool single_PMT = single_PMT_C10 || single_PMT_scin;
322
323 // Distinguish normal cells and phantoms (e.g. non-existing D4 in EBA15, EBC18
324 // or non-existing E3/E4 - they might appear in CaloCellContainer)
325 bool realCell = single_PMT_C10 || m_cabling->TileGap_connected(id);
326
327 // Note that in single PMT cell both badch1() and badch2() are changed together
328 bool isBadChannel1 = tile_cell->badch1();
329 bool isBadChannel2 = tile_cell->badch2();
330
331 int isCellGood = !tile_cell->badcell();
332
333 bool isOkChannel1 = (channel1 > -1 && gain1 != CaloGain::INVALIDGAIN);
334 bool isOkChannel2 = (channel2 > -1 && gain2 != CaloGain::INVALIDGAIN);
335
336 // Get the cell energy, time and position info
337 double energy = cell->energy();
338 double time = cell->time();
339 double eta = cell->eta();
340 double phi = cell->phi();
341 double energy1 = tile_cell->ene1();
342 double energy2 = tile_cell->ene2();
343 double energyDiff = (single_PMT) ? 0.0 : tile_cell->eneDiff();
344 double energyRatio = (energy != 0.0) ? energyDiff/energy : 0.0;
345 double time1 = tile_cell->time1();
346 double time2 = tile_cell->time2();
347 double timeDiff = (single_PMT) ? 0.0 : 2. * tile_cell->timeDiff(); // Attention! factor of 2 is needed here
348
349 double weight = 1.;
350 if (single_PMT_scin) {
351 int tower = m_tileID->tower(id);
352 if (tower > 9 && tower < 16) {
353 weight = energyWeight[tower - 10];
354 }
355 if (m_fillGapScintHistograms) {
356 if (energy > m_energyThresholdForGapScint) {
357 int idx = tower - 10;
358 if (idx >= 0 && idx < static_cast<int>(std::size(gapScintIndex))) {
359 int gapScintIdx = gapScintIndex[idx];
360 unsigned int partition = (ros1 > 0) ? ros1 - 3 : ros2 - 3;
361 auto monEnergy = Monitored::Scalar<float>("energy", energy);
362 fill(m_tools[m_energyGapScintGroups[partition][drawer][gapScintIdx]], monEnergy);
363 }
364 }
365 }
366 }
367
368 if (msgLvl(MSG::VERBOSE)) {
369
370 msg(MSG::VERBOSE) << "Identifier: " << id << " " << m_tileID->to_string(id,-2) << endmsg;
371 msg(MSG::VERBOSE) << " region: " << m_tileID->region(id)
372 << " system: " << m_tileID->system(id)
373 << " section: "<< m_tileID->section(id)
374 << " side: " << m_tileID->side(id)
375 << " module: " << m_tileID->module(id)
376 << " tower: " << m_tileID->tower(id)
377 << " sample: " << m_tileID->sample(id) << endmsg;
378
379 msg(MSG::VERBOSE) << "1st PMT ROS: " << ros1
380 << " drawer: " << drawer
381 << " ch1: " << channel1
382 << " gain1: " << gain1
383 << " qual1: " << (int)tile_cell->qual1()
384 << " qbit1: " << (int)tile_cell->qbit1()
385 << ((drawer != module) ? " drawer != module":" ") << endmsg;
386
387 msg(MSG::VERBOSE) << "2nd PMT ROS: " << ros2
388 << " drawer: " << drawer
389 << " ch2: " << channel2
390 << " gain2: " << gain2
391 << " qual2: " << (int)tile_cell->qual2()
392 << " qbit2: " << (int)tile_cell->qbit2()
393 << ((ros1 != ros2) ? " ros1 != ros2" : " ") << endmsg;
394
395 msg(MSG::VERBOSE) << "Bad status: " << !isCellGood
396 << " bad1: " << isBadChannel1
397 << " bad2: " << isBadChannel2
398 << ((single_PMT_scin && isBadChannel1 && !isMaskedChannel1)
399 ? " NEW BAD E-cell" : " ") << endmsg ;
400
401 msg(MSG::VERBOSE) << " real_cell: " << ((realCell) ? "true" : "false")
402 << " E-cell: " << ((single_PMT_scin) ? "true" : "false")
403 << " specC10: " << ((single_PMT_C10) ? "true" : "false") << endmsg;
404
405 msg(MSG::VERBOSE) << "Energy= " << energy << " = " << energy1 << " + " << energy2
406 << " ediff= " << energyDiff
407 << " eratio= " << energyRatio
408 << "\t Energy[GeV]= " << energy/GeV << endmsg ;
409
410 msg(MSG::VERBOSE) << "Time= " << time << " = (" << time1 << " + " << time2 << ")/2 "
411 << "tdiff= " << timeDiff
412 << "\t time[ns]= " << time/ns << endmsg ;
413 }
414
415
416 if (realCell) {
417
418 int dbGain1 = gain1;
419 int dbGain2 = gain2;
420 // When only one channel is bad, it might be that gain of masked channel is not correct
421 // If two qualities are not identical, then gains are not the same (new feature introduced in rel 17.2)
422 int quality1 = (int)tile_cell->qual1();
423 int quality2 = (int)tile_cell->qual2();
424 if (isBadChannel1 != isBadChannel2 && quality1 != quality2
425 && quality1 < 255 && quality2 < 255) {
426 if (isBadChannel1 && isOkChannel1) dbGain1 = 1 - gain1;
427 if (isBadChannel2 && isOkChannel2) dbGain2 = 1 - gain2;
428 }
429
430 if (hash1 != TileHWID::NOT_VALID_HASH) {
431 HWIdentifier adc1_id = m_tileHWID->adc_id(hash1, dbGain1);
432 isMaskedAdc1 = badChannels->getAdcStatus(adc1_id).isBad();
433 }
434
435 if (hash2 != TileHWID::NOT_VALID_HASH) {
436 HWIdentifier adc2_id = m_tileHWID->adc_id(hash2, dbGain2);
437 isMaskedAdc2 = badChannels->getAdcStatus(adc2_id).isBad();
438 }
439
440 bool channel1MaskedDueDQ(false);
441 if (isBadChannel1 && isOkChannel1 && !(single_PMT_C10 && channel1 == 4)) {
442 if (!isMaskedAdc1) {
443 ++nBadChannelsOnFly[partition1];
444 maskedOnFlyDrawers[partition1].push_back(drawer);
445 maskedOnFlyChannel[partition1].push_back(channel1);
446
447 if (!dqStatus->isAdcDQgood(ros1, drawer, channel1, gain1)) {
448 channel1MaskedDueDQ = true;
449 ++nMaskedChannelsDueDQ[partition1];
450 }
451 }
452 }
453
454 bool channel2MaskedDueDQ(false);
455 if (isBadChannel2 && isOkChannel2 && !(single_PMT_C10 && channel2 == 4)) {
456 if (!isMaskedAdc2) {
457 ++nBadChannelsOnFly[partition2];
458 maskedOnFlyDrawers[partition2].push_back(drawer);
459 maskedOnFlyChannel[partition2].push_back(channel2);
460
461 if (!dqStatus->isAdcDQgood(ros2, drawer, channel2, gain2)) {
462 channel2MaskedDueDQ = true;
463 ++nMaskedChannelsDueDQ[partition2];
464 }
465 }
466 }
467
468 if (isCellGood) {
469
470 if ((energy > m_energyRangeForMuon[0]) && (energy < m_energyRangeForMuon[1])
471 && (time > m_timeRangeForMuon[0]) && (time < m_timeRangeForMuon[1])
472 && (time != 0)) { // Cell has reconstructed time
473 muonCells.push_back(cell);
474 }
475 occupEta[sample].push_back(eta);
476 occupPhi[sample].push_back(phi);
477 occupEnergy[sample].push_back(energy);
478
479 if (isOkChannel1) {
480 detailOccupModule[partition1].push_back(module);
481 detailOccupChannel[partition1].push_back(channel1);
482 detailOccupEnergies[partition1].push_back(energy1 * weight);
483
484 detailOccupGainModule[partition1][gain1].push_back(module);
485 detailOccupGainChannel[partition1][gain1].push_back(channel1);
486 detailOccupGainEnergies[partition1][gain1].push_back(energy1 * weight);
487 }
488
489 if (isOkChannel2) {
490 detailOccupModule[partition2].push_back(module);
491 detailOccupChannel[partition2].push_back(channel2);
492 detailOccupEnergies[partition2].push_back(energy2);
493
494 detailOccupGainModule[partition2][gain2].push_back(module);
495 detailOccupGainChannel[partition2][gain2].push_back(channel2);
496 detailOccupGainEnergies[partition2][gain2].push_back(energy2);
497 }
498
499 } else {
500 ++nBadCells[partition1];
501 if (channel1MaskedDueDQ || channel2MaskedDueDQ) {
502 ++nMaskedCellsDueDQ[partition1];
503 }
504 }
505
506 // Check if energy is below negative threshold
507 if (isOkChannel1 && energy1 < m_negativeEnergyThreshold && (!isMaskedAdc1)) {
508 negOccupModule[partition1].push_back(module);
509 negOccupChannel[partition1].push_back(channel1);
510 }
511
512 if (isOkChannel2 && energy2 < m_negativeEnergyThreshold && (!isMaskedAdc2)) {
513 negOccupModule[partition2].push_back(module);
514 negOccupChannel[partition2].push_back(channel2);
515 }
516
517 if (energy > m_energyThreshold) {
518
519 // Fill channel timing histograms.
520 if (isCollision || m_fillTimeHistograms) {
521 if (isOkChannel1 && energy1 > m_energyThresholdForTime && energy1 < m_energyLimitForTime) {
522 if ((gain1 == 0) && (energy1 < 1000.)) {
523 ATH_MSG_DEBUG("Low energy in LG for time monitoring: " << Tile::getDrawerString(ros1, drawer)
524 << ", channel = " << channel1 << ", energy = " << energy1 << ", time = " << time1);
525 } else {
526 chanTime[partition1].push_back(time1);
527 chanTimeDrawer[partition1].push_back(drawer);
528 chanTimeChannel[partition1].push_back(channel1);
529 chanTimeDigitizer[partition1].push_back(getDigitizer(channel1));
530 if (m_fillChannelTimeHistograms) {
531 sampChanTime[partition1][sample].push_back(time1);
532 }
533 }
534 }
535
536 if (isOkChannel2 && energy2 > m_energyThresholdForTime && energy2 < m_energyLimitForTime) {
537 if ((gain2 == 0) && (energy2 < 1000.)) {
538 ATH_MSG_DEBUG("Low energy in LG for time monitoring: " << Tile::getDrawerString(ros2, drawer)
539 << ", channel = " << channel2 << ", energy = " << energy2 << ", time = " << time2);
540 } else {
541 chanTime[partition2].push_back(time2);
542 chanTimeDrawer[partition2].push_back(drawer);
543 chanTimeChannel[partition2].push_back(channel2);
544 chanTimeDigitizer[partition2].push_back(getDigitizer(channel2));
545 if (m_fillChannelTimeHistograms) {
546 sampChanTime[partition2][sample].push_back(time2);
547 }
548 }
549 }
550 }
551
552 overThrOccupEta[sample].push_back(eta);
553 overThrOccupPhi[sample].push_back(phi);
554
555 if (isOkChannel1 && energy1 > m_energyThreshold && (!isBadChannel1)) {
556 overThrOccupModule[partition1].push_back(module);
557 overThrOccupChannel[partition1].push_back(channel1);
558 overThrOccupWeight[partition1].push_back(weight);
559
560 if (energy1 > m_energyThresholdForGain[gain1]) {
561 overThrOccupGainModule[partition1][gain1].push_back(module);
562 overThrOccupGainChannel[partition1][gain1].push_back(channel1);
563 overThrOccupGainWeight[partition1][gain1].push_back(weight);
564 }
565
566 if (energy1 > 30000.) {
567 overThr30GeVOccupModule[partition1].push_back(module);
568 overThr30GeVOccupChannel[partition1].push_back(channel1);
569
570 if (energy1 > 300000.) {
571 overThr300GeVOccupModule[partition1].push_back(module);
572 overThr300GeVOccupChannel[partition1].push_back(channel1);
573 }
574 }
575 }
576
577 if (isOkChannel2 && energy2 > m_energyThreshold && (!isBadChannel2)) {
578 overThrOccupModule[partition2].push_back(module);
579 overThrOccupChannel[partition2].push_back(channel2);
580 overThrOccupWeight[partition2].push_back(1.0F);
581
582 if (energy2 > m_energyThresholdForGain[gain2]) {
583 overThrOccupGainModule[partition2][gain2].push_back(module);
584 overThrOccupGainChannel[partition2][gain2].push_back(channel2);
585 overThrOccupGainWeight[partition2][gain2].push_back(1.0F);
586 }
587
588 if (energy2 > 30000.) {
589 overThr30GeVOccupModule[partition2].push_back(module);
590 overThr30GeVOccupChannel[partition2].push_back(channel2);
591
592 if (energy2 > 300000.) {
593 overThr300GeVOccupModule[partition2].push_back(module);
594 overThr300GeVOccupChannel[partition2].push_back(channel2);
595 }
596 }
597 }
598
599 bool fillEneAndTimeDiff(m_fillTimeAndEnergyDiffHistograms);
600
601 // avoid double peak structure in energy and time balance histograms
602 if ((gain1 == 0 && gain2 == 1 && (energy1 < 2000 || energy2 < 10 || std::abs(energy1 / energy2) > 5))
603 || (gain1 == 1 && gain2 == 0 && (energy2 < 2000 || energy1 < 10 || std::abs(energy2 / energy1) > 5))) {
604
605 fillEneAndTimeDiff = false;
606 }
607
608 // Fill these histograms only if the both PMTs are good
609 if (!(isBadChannel1 || isBadChannel2 || single_PMT)) {
610
611 if (std::abs(energyRatio) > m_energyBalanceThreshold) {
612 energyBalModPartModule.push_back(module);
613 energyBalModPartPartition.push_back(partition1);
614 }
615
616 if (std::abs(timeDiff) > m_timeBalanceThreshold
617 && (energy1 > m_energyThresholdForTime || energy2 > m_energyThresholdForTime)
618 && (isCollision || m_fillTimeHistograms)) {
619 timeBalModPartModule.push_back(module);
620 timeBalModPartPartition.push_back(partition1);
621 }
622
623 energyBal[partition1].push_back(energyRatio);
624 energyBalModule[partition1].push_back(module);
625
626 eneDiff[partition1].push_back(energyDiff);
627 eneDiffChannel[partition1].push_back(channel1);
628 eneDiffModule[partition1].push_back(module);
629
630 eneDiff[partition2].push_back(-1.0 * energyDiff);
631 eneDiffChannel[partition2].push_back(channel2);
632 eneDiffModule[partition2].push_back(module);
633
634 if (fillEneAndTimeDiff) {
635 sampEnergyDiff[partition1][sample].push_back(energyDiff);
636 }
637
638 if ((energy1 > m_energyThresholdForTime || energy2 > m_energyThresholdForTime)
639 && (isCollision || m_fillTimeHistograms)) {
640
641 timeBal[partition1].push_back(timeDiff);
642 timeBalModule[partition1].push_back(module);
643
644 if (fillEneAndTimeDiff) {
645 sampTimeDiff[partition1][sample].push_back(timeDiff);
646 }
647 }
648
649 moduleCorr[partition1].inputxy(module);
650 moduleCorr[PART_ALL].inputxy(module);
651 }
652
653 if (partition1 >= 0) {
654 // Store info for BCID plots.
655 // Count the number of cells over threshold per partition
656 ++nCellsOverThreshold[partition1];
657 }
658 }
659 }
660
661 if (partition1 >= 0) {
662 // Count total number of cells in a partition
663 ++nCells[partition1];
664
665 // Accumulate total energy per sample per partition
666 energySample[partition1][sample] += energy;
667 }
668 }
669 }
670
671 // Calculate totals for all samples and all partitions
672 for (int partition = 0; partition < PART_ALL; ++partition) {
673
674 nCells[PART_ALL] += nCells[partition];
675 nBadCells[PART_ALL] += nBadCells[partition];
676
677 nBadChannelsOnFly[PART_ALL] += nBadChannelsOnFly[partition];
678 nCellsOverThreshold[PART_ALL] += nCellsOverThreshold[partition];
679
680 nMaskedChannelsDueDQ[PART_ALL] += nMaskedChannelsDueDQ[partition];
681 nMaskedCellsDueDQ[PART_ALL] += nMaskedCellsDueDQ[partition];
682
683 for (int sample = 0; sample < SAMP_ALL; ++sample) {
684 energySample[partition][SAMP_ALL] += energySample[partition][sample];
685 energySample[PART_ALL][sample] += energySample[partition][sample];
686 }
687
688 energySample[PART_ALL][SAMP_ALL] += energySample[partition][SAMP_ALL];
689 }
690
691 if (msgLvl(MSG::DEBUG)) {
692
693 msg(MSG::DEBUG) << "N Cells: "
694 << " " << nCells[PART_LBA]
695 << " " << nCells[PART_LBC]
696 << " " << nCells[PART_EBA]
697 << " " << nCells[PART_EBC]
698 << " " << nCells[PART_ALL] << endmsg;
699
700 if (nCells[PART_ALL] > 0) {
701
702 msg(MSG::DEBUG) << "AboveThr: "
703 << " " << nCellsOverThreshold[PART_LBA]
704 << " " << nCellsOverThreshold[PART_LBC]
705 << " " << nCellsOverThreshold[PART_EBA]
706 << " " << nCellsOverThreshold[PART_EBC]
707 << " " << nCellsOverThreshold[PART_ALL] << endmsg;
708
709 msg(MSG::DEBUG) << "MaskOnFly:"
710 << " " << nBadChannelsOnFly[PART_LBA]
711 << " " << nBadChannelsOnFly[PART_LBC]
712 << " " << nBadChannelsOnFly[PART_EBA]
713 << " " << nBadChannelsOnFly[PART_EBC]
714 << " " << nBadChannelsOnFly[PART_ALL] << endmsg;
715
716 msg(MSG::DEBUG) << "EneSampA:"
717 << " " << energySample[PART_LBA][TileID::SAMP_A]
718 << " " << energySample[PART_LBC][TileID::SAMP_A]
719 << " " << energySample[PART_EBA][TileID::SAMP_A]
720 << " " << energySample[PART_EBC][TileID::SAMP_A]
721 << " " << energySample[PART_ALL][TileID::SAMP_A] << endmsg;
722
723 msg(MSG::DEBUG) << "EneSampB:"
724 << " " << energySample[PART_LBA][TileID::SAMP_B]
725 << " " << energySample[PART_LBC][TileID::SAMP_B]
726 << " " << energySample[PART_EBA][TileID::SAMP_B]
727 << " " << energySample[PART_EBC][TileID::SAMP_B]
728 << " " << energySample[PART_ALL][TileID::SAMP_B] << endmsg;
729
730 msg(MSG::DEBUG) << "EneSampD:"
731 << " " << energySample[PART_LBA][TileID::SAMP_D]
732 << " " << energySample[PART_LBC][TileID::SAMP_D]
733 << " " << energySample[PART_EBA][TileID::SAMP_D]
734 << " " << energySample[PART_EBC][TileID::SAMP_D]
735 << " " << energySample[PART_ALL][TileID::SAMP_D] << endmsg;
736
737 msg(MSG::DEBUG) << "EneSampE:"
738 << " " << energySample[PART_LBA][TileID::SAMP_E]
739 << " " << energySample[PART_LBC][TileID::SAMP_E]
740 << " " << energySample[PART_EBA][TileID::SAMP_E]
741 << " " << energySample[PART_EBC][TileID::SAMP_E]
742 << " " << energySample[PART_ALL][TileID::SAMP_E] << endmsg;
743
744 msg(MSG::DEBUG) << "EneTotal:"
745 << " " << energySample[PART_LBA][SAMP_ALL]
746 << " " << energySample[PART_LBC][SAMP_ALL]
747 << " " << energySample[PART_EBA][SAMP_ALL]
748 << " " << energySample[PART_EBC][SAMP_ALL]
749 << " " << energySample[PART_ALL][SAMP_ALL] << endmsg;
750
751 }
752 }
753
754 std::vector<int> partitions(Tile::MAX_ROS);
755 std::iota(partitions.begin(), partitions.end(), 0);
756
757 auto monPartition = Monitored::Collection("Partition", partitions);
758 auto monBadCells = Monitored::Collection("nBadCells", nBadCells);
759 fill("TileBadCell", monPartition, monBadCells);
760
761 fillSynchronization(muonCells, l1TriggersIndices);
762
763 if (!energyBalModPartPartition.empty()) {
764 for (int l1TriggerIdx : l1TriggersIndices) {
765 auto monModule = Monitored::Collection("module", energyBalModPartModule);
766 auto monPartion = Monitored::Collection("partition", energyBalModPartPartition);
767 fill(m_tools[m_energyBalModPartGroups[l1TriggerIdx]], monModule, monPartion);
768 }
769 }
770
771 if (!timeBalModPartPartition.empty()) {
772 for (int l1TriggerIdx : l1TriggersIndices) {
773 auto monModule = Monitored::Collection("module", timeBalModPartModule);
774 auto monPartion = Monitored::Collection("partition", timeBalModPartPartition);
775 fill(m_tools[m_timeBalModPartGroups[l1TriggerIdx]], monModule, monPartion);
776 }
777 }
778
779 unsigned int bcid = eventInfo->bcid();
780
781 for (unsigned int partition = 0; partition < Tile::MAX_ROS - 1; ++partition) {
782
783 if (!maskedOnFlyDrawers[partition].empty()) {
784 auto monModule = Monitored::Collection("module", maskedOnFlyDrawers[partition]);
785 auto monChannel = Monitored::Collection("channel", maskedOnFlyChannel[partition]);
786 fill(m_tools[m_maskedOnFlyGroups[partition]], monModule, monChannel);
787 }
788
789 if (!negOccupModule[partition].empty()) {
790 auto monModule = Monitored::Collection("module", negOccupModule[partition]);
791 auto monChannel = Monitored::Collection("channel", negOccupChannel[partition]);
792 fill(m_tools[m_negOccupGroups[partition]], monModule, monChannel);
793 }
794
795 if (!energyBalModule[partition].empty()) {
796 auto monModule = Monitored::Collection("module", energyBalModule[partition]);
797 auto monEnergyBal = Monitored::Collection("energyBalance", energyBal[partition]);
798 fill(m_tools[m_energyBalGroups[partition]], monModule, monEnergyBal);
799 }
800
801 if (!timeBalModule[partition].empty()) {
802 auto monModule = Monitored::Collection("module", timeBalModule[partition]);
803 auto monTimeBal = Monitored::Collection("timeBalance", timeBal[partition]);
804 fill(m_tools[m_timeBalGroups[partition]], monModule, monTimeBal);
805 }
806
807 if (!chanTimeDrawer[partition].empty()) {
808 auto monTime = Monitored::Collection("time", chanTime[partition]);
809 auto monModule = Monitored::Collection("module", chanTimeDrawer[partition]);
810 auto monChannel = Monitored::Collection("channel", chanTimeChannel[partition]);
811 auto monDigitizer = Monitored::Collection("digitizer", chanTimeDigitizer[partition]);
812 for (int l1TriggerIdx : l1TriggersIndices) {
813 fill(m_tools[m_chanTimeGroups[partition][l1TriggerIdx]], monModule, monChannel, monTime);
814 fill(m_tools[m_digiTimeGroups[partition][l1TriggerIdx]], monModule, monDigitizer, monTime);
815 }
816 }
817
818 if (!detailOccupModule[partition].empty()) {
819 auto monModule = Monitored::Collection("module", detailOccupModule[partition]);
820 auto monChannel = Monitored::Collection("channel", detailOccupChannel[partition]);
821 auto monEnergies = Monitored::Collection("energy", detailOccupEnergies[partition]);
822 for (int l1TriggerIdx : l1TriggersIndices) {
823 fill(m_tools[m_detailOccupGroups[partition][l1TriggerIdx]], monModule, monChannel, monEnergies);
824 }
825 }
826
827 if (!overThrOccupModule[partition].empty()) {
828 auto monModule = Monitored::Collection("module", overThrOccupModule[partition]);
829 auto monChannel = Monitored::Collection("channel", overThrOccupChannel[partition]);
830 auto monWeight = Monitored::Collection("weight", overThrOccupWeight[partition]);
831 for (int l1TriggerIdx : l1TriggersIndices) {
832 fill(m_tools[m_overThrOccupGroups[partition][l1TriggerIdx]], monModule, monChannel, monWeight);
833 }
834 }
835
836 if (!overThr30GeVOccupModule[partition].empty()) {
837 auto monModule = Monitored::Collection("module", overThr30GeVOccupModule[partition]);
838 auto monChannel = Monitored::Collection("channel", overThr30GeVOccupChannel[partition]);
839 for (int l1TriggerIdx : l1TriggersIndices) {
840 fill(m_tools[m_overThr30GeVOccupGroups[partition][l1TriggerIdx]], monModule, monChannel);
841 }
842 }
843
844 if (!overThr300GeVOccupModule[partition].empty()) {
845 auto monModule = Monitored::Collection("module", overThr300GeVOccupModule[partition]);
846 auto monChannel = Monitored::Collection("channel", overThr300GeVOccupChannel[partition]);
847 for (int l1TriggerIdx : l1TriggersIndices) {
848 fill(m_tools[m_overThr300GeVOccupGroups[partition][l1TriggerIdx]], monModule, monChannel);
849 }
850 }
851
852 if (!eneDiff[partition].empty()) {
853 auto monEnergyDiff = Monitored::Collection("energyDiff", eneDiff[partition]);
854 auto monModule = Monitored::Collection("module", eneDiffModule[partition]);
855 auto monChannel = Monitored::Collection("channel", eneDiffChannel[partition]);
856 for (int l1TriggerIdx : l1TriggersIndices) {
857 fill(m_tools[m_eneDiffChanModGroups[partition][l1TriggerIdx]], monModule, monChannel, monEnergyDiff);
858 }
859 }
860
861 for (unsigned int gain = 0; gain < Tile::MAX_GAIN; ++gain) {
862 if (!overThrOccupGainModule[partition][gain].empty()) {
863 auto monModule = Monitored::Collection("module", overThrOccupGainModule[partition][gain]);
864 auto monChannel = Monitored::Collection("channel", overThrOccupGainChannel[partition][gain]);
865 auto monWeight = Monitored::Collection("weight", overThrOccupGainWeight[partition][gain]);
866 for (int l1TriggerIdx : l1TriggersIndices) {
867 fill(m_tools[m_overThrOccupGainGroups[partition][gain][l1TriggerIdx]], monModule, monChannel, monWeight);
868 }
869 }
870
871 if (!detailOccupGainModule[partition][gain].empty()) {
872 auto monModule = Monitored::Collection("module", detailOccupGainModule[partition][gain]);
873 auto monChannel = Monitored::Collection("channel", detailOccupGainChannel[partition][gain]);
874 auto monEnergies = Monitored::Collection("energy", detailOccupGainEnergies[partition][gain]);
875 for (int l1TriggerIdx : l1TriggersIndices) {
876 fill(m_tools[m_detailOccupGainGroups[partition][gain][l1TriggerIdx]], monModule, monChannel, monEnergies);
877 }
878 }
879 }
880
881 if (m_fillChannelTimeHistograms) {
882 for (unsigned int sample = 0; sample < SAMP_ALL; ++sample) {
883 if (!sampChanTime[partition][sample].empty()) {
884 auto monChanTime = Monitored::Collection("time", sampChanTime[partition][sample]);
885 for (int l1TriggerIdx : l1TriggersIndices) {
886 fill(m_tools[m_chanTimeSampGroups[partition][sample][l1TriggerIdx]], monChanTime);
887 fill(m_tools[m_chanTimeSampGroups[partition][SAMP_ALL][l1TriggerIdx]], monChanTime);
888 }
889 }
890 }
891 }
892
893 if (m_fillTimeAndEnergyDiffHistograms) {
894 for (unsigned int sample = 0; sample < SAMP_ALL; ++sample) {
895 if (!sampEnergyDiff[partition][sample].empty()) {
896 auto monEneDiff = Monitored::Collection("energyDiff", sampEnergyDiff[partition][sample]);
897 for (int l1TriggerIdx : l1TriggersIndices) {
898 fill(m_tools[m_eneDiffSampGroups[partition][sample][l1TriggerIdx]], monEneDiff);
899 fill(m_tools[m_eneDiffSampGroups[partition][SAMP_ALL][l1TriggerIdx]], monEneDiff);
900 }
901 }
902
903 if (!sampTimeDiff[partition][sample].empty()) {
904 auto monTimeDiff = Monitored::Collection("timeDiff", sampTimeDiff[partition][sample]);
905 for (int l1TriggerIdx : l1TriggersIndices) {
906 fill(m_tools[m_timeDiffSampGroups[partition][sample][l1TriggerIdx]], monTimeDiff);
907 fill(m_tools[m_timeDiffSampGroups[partition][SAMP_ALL][l1TriggerIdx]], monTimeDiff);
908 }
909 }
910 }
911 }
912
913 }
914
915 for (int partition = 0; partition < MAX_PART; ++partition) {
916 auto monMaskedDueDQ = Monitored::Scalar<int>("nMaskedChannelsDueDQ", nMaskedChannelsDueDQ[partition]);
917 fill(m_tools[m_maskedDueDQGroups[partition]], lumiBlock, monMaskedDueDQ);
918
919 auto monMaskedCellsDueDQ = Monitored::Scalar<int>("nMaskedCellsDueDQ", nMaskedCellsDueDQ[partition]);
920 fill(m_tools[m_maskedCellsDueDQGroups[partition]], lumiBlock, monMaskedCellsDueDQ);
921
922 auto monMaskedOnFly = Monitored::Scalar<int>("nMaskedChannelsOnFly", nBadChannelsOnFly[partition]);
923 fill(m_tools[m_maskedOnFlyLBGroups[partition]], lumiBlock, monMaskedOnFly);
924
925 auto monMaskedCellsOnFly = Monitored::Scalar<int>("nMaskedCells", nBadCells[partition]);
926 fill(m_tools[m_maskedCellsLBGroups[partition]], lumiBlock, monMaskedCellsOnFly);
927
928
929 if (moduleCorr[partition].numberOfPairs() > 0) {
930 const PairBuilder::PairVector pairs = moduleCorr[partition].pairs();
931 auto monModule1 = Monitored::Collection("firstModule", pairs, [] (const PairBuilder::XYPair& p) {return (double) p.first;});
932 auto monModule2 = Monitored::Collection("secondModule", pairs, [] (const PairBuilder::XYPair& p) {return (double) p.second;});
933 std::vector<float> weight(moduleCorr[partition].numberOfPairs(), moduleCorr[partition].weight());
934 auto monWeight = Monitored::Collection("weight", weight);
935 for (int l1TriggerIdx : l1TriggersIndices) {
936 fill(m_tools[m_moduleCorrGroups[partition][l1TriggerIdx]], monModule1, monModule2, monWeight);
937 }
938 }
939
940 for (int l1TriggerIdx : l1TriggersIndices) {
941 auto monCellsNumber = Monitored::Scalar<float>("nCells", nCells[partition]);
942 fill(m_tools[m_nCellsGroups[partition][l1TriggerIdx]], lumiBlock, monCellsNumber);
943
944 auto monBCID = Monitored::Scalar<unsigned int>("BCID", bcid);
945 auto monCellsNumberOvThr = Monitored::Scalar<float>("nCells", nCellsOverThreshold[partition]);
946 fill(m_tools[m_nCellsOverThrGroups[partition][l1TriggerIdx]], monBCID, monCellsNumberOvThr);
947 }
948
949 if (partition > 1) { // Fill SampE energy for EB
950 for (int l1TriggerIdx : l1TriggersIndices) {
951 auto monEnergy = Monitored::Scalar<float>("energy", energySample[partition][TileID::SAMP_E]);
952 fill(m_tools[m_energySampEGroups[partition][l1TriggerIdx]], monEnergy);
953 }
954 }
955 }
956
957 for (unsigned int sample = 0; sample < SAMP_ALL; ++sample) {
958 if (!occupEnergy[sample].empty()) {
959 auto monEta = Monitored::Collection("eta", occupEta[sample]);
960 auto monPhi = Monitored::Collection("phi", occupPhi[sample]);
961 auto monEnergy = Monitored::Collection("energy", occupEnergy[sample]);
962 for (int l1TriggerIdx : l1TriggersIndices) {
963 fill(m_tools[m_eneEtaPhiGroups[sample][l1TriggerIdx]], monEta, monPhi, monEnergy);
964 fill(m_tools[m_eneEtaPhiGroups[SAMP_ALL][l1TriggerIdx]], monEta, monPhi, monEnergy);
965 }
966 }
967
968 if (!overThrOccupEta[sample].empty()) {
969 auto monEta = Monitored::Collection("eta", overThrOccupEta[sample]);
970 auto monPhi = Monitored::Collection("phi", overThrOccupPhi[sample]);
971 for (int l1TriggerIdx : l1TriggersIndices) {
972 fill(m_tools[m_overThrEtaPhiGroups[sample][l1TriggerIdx]], monEta, monPhi);
973 fill(m_tools[m_overThrEtaPhiGroups[SAMP_ALL][l1TriggerIdx]], monEta, monPhi);
974 }
975 }
976 }
977
978
979
980 fill("TileCellMonExecuteTime", timer);
981
982 return StatusCode::SUCCESS;
983}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
static const Attributes_t empty
bool msgLvl(const MSG::Level lvl) const
bool is_tile(Identifier id) const
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
Definition CaloCell.h:321
IdentifierHash onl2() const
cell online identifier 2
IdentifierHash onl1() const
cell online identifier 1
Declare a monitored scalar variable.
A monitored timer.
const PairVector & pairs() const
Return the pairs as a vector of pairs of integers.
std::vector< XYPair > PairVector
Definition PairBuilder.h:36
void inputxy(const int ystrip)
Input a new y value.
std::pair< int, int > XYPair
Definition PairBuilder.h:35
static bool C10_connected(int module)
bool TileGap_connected(const Identifier &id) const
Static class providing several utility functions and constants.
void fillMaskedInDB(const TileBadChannels *badChannels) const
const TileCablingService * m_cabling
void fillSynchronization(const std::vector< const CaloCell * > &cells, const std::vector< int > &l1TriggersIndices) const
uint8_t qual1(void) const
get quality of first PMT (data member)
Definition TileCell.h:197
float time1(void) const
get time of first PMT
Definition TileCell.h:192
virtual bool badcell(void) const override final
check if whole cell is bad (i.e.
Definition TileCell.h:214
int gain2(void) const
get gain of second PMT
Definition TileCell.cxx:175
bool badch1(void) const
check if first PMT is in bad channel list and masked
Definition TileCell.h:209
uint8_t qbit2(void) const
get quality bits of second PMT (data member)
Definition TileCell.h:206
int gain1(void) const
get gain of first PMT
Definition TileCell.cxx:168
uint8_t qual2(void) const
get quality of second PMT (data member)
Definition TileCell.h:200
float ene1(void) const
get energy of first PMT
Definition TileCell.h:187
bool badch2(void) const
check if second PMT is in bad channel list and masked
Definition TileCell.h:212
float timeDiff(void) const
get time diff for two PMTs (data member)
Definition TileCell.h:184
float time2(void) const
get time of second PMT
Definition TileCell.h:194
uint8_t qbit1(void) const
get quality bits of first PMT (data member)
Definition TileCell.h:203
float ene2(void) const
get energy of second PMT
Definition TileCell.h:189
Class that holds Data Quality fragment information and provides functions to extract the data quality...
bool isAdcDQgood(int partition, int drawer, int ch, int gain) const
returns status of single ADC returns False if there are any errors
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition TileHWID.h:189
@ NOT_VALID_HASH
Definition TileHWID.h:314
int drawer(const HWIdentifier &id) const
extract drawer field from HW identifier
Definition TileHWID.h:171
HWIdentifier channel_id(int ros, int drawer, int channel) const
channel HWIdentifer
Definition TileHWID.cxx:199
HWIdentifier adc_id(int ros, int drawer, int channel, int adc) const
adc HWIdentifer
Definition TileHWID.cxx:229
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
Definition TileHWID.h:167
std::vector< int > getL1TriggerIndices(uint32_t lvl1TriggerType) const
Return indices of histograms to be filled according fired L1 trigger type.
int sample(const Identifier &id) const
int tower(const Identifier &id) const
std::string to_string(const Identifier &id, int level=0) const
int system(const Identifier &id) const
int side(const Identifier &id) const
int section(const Identifier &id) const
int region(int section, int side) const
uint32_t lumiBlock() const
The current event's luminosity block number.
uint32_t bcid() const
The bunch crossing ID of the event.
uint16_t level1TriggerType() const
The Level-1 trigger type.
const std::vector< StreamTag > & streamTags() const
Get the streams that the event was put in.
uint32_t runNumber() const
The current event's run number.
uint64_t eventNumber() const
The current event's event number.
@ INVALIDGAIN
Definition CaloGain.h:18
time(flags, cells_name, *args, **kw)
dict partitions
Definition DeMoScan.py:65
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())
EventInfo_v1 EventInfo
Definition of the latest event info version.
setEventNumber setTimeStamp bcid
setRawEt setRawPhi nCells
void fill(H5::Group &out_file, size_t iterations)
MsgStream & msg
Definition testRead.cxx:32
#define CXXUTILS_TRAPPING_FP
Definition trapping_fp.h:24

◆ fillMaskedInDB()

void TileCellMonitorAlgorithm::fillMaskedInDB ( const TileBadChannels * badChannels) const
private

Definition at line 986 of file TileCellMonitorAlgorithm.cxx.

986 {
987
988 using Tile = TileCalibUtils;
989
990 std::vector<HWIdentifier>::const_iterator adc_it = m_tileHWID->adc_begin();
991 std::vector<HWIdentifier>::const_iterator adc_end = m_tileHWID->adc_end();
992
993 std::vector<int> drawers[Tile::MAX_ROS - 1][Tile::MAX_GAIN];
994 std::vector<int> channels[Tile::MAX_ROS - 1][Tile::MAX_GAIN];
995
996 for (; adc_it != adc_end; ++adc_it) {
997 HWIdentifier adc_id(*adc_it);
998
999 if (badChannels->getAdcStatus(adc_id).isBad()) {
1000
1001 unsigned int partition = m_tileHWID->ros(adc_id);
1002 if (partition > 0) {
1003 partition -= 1; // ROS - 1
1004 unsigned int drawer = m_tileHWID->drawer(adc_id);
1005 unsigned int channel = m_tileHWID->channel(adc_id);
1006 unsigned int adc = m_tileHWID->adc(adc_id);
1007
1008 drawers[partition][adc].push_back(drawer);
1009 channels[partition][adc].push_back(channel);
1010 }
1011
1012 }
1013 }
1014
1015 for (unsigned int partition = 0; partition < Tile::MAX_ROS - 1; ++partition) {
1016 for (unsigned int gain = 0; gain < Tile::MAX_GAIN; ++gain) {
1017 if (!drawers[partition][gain].empty()) {
1018
1019 auto monModule = Monitored::Collection("module", drawers[partition][gain]);
1020 auto monChannel = Monitored::Collection("channel", channels[partition][gain]);
1021 fill(m_tools[m_maskedGroups[partition][gain]], monModule, monChannel);
1022
1023 }
1024 }
1025 }
1026}
const TileBchStatus & getAdcStatus(const HWIdentifier adc_id) const
Return Tile ADC status.
bool isBad() const
std::vector< HWIdentifier >::const_iterator adc_end() const
end iterator for ADC Identifiers
Definition TileHWID.h:312
int adc(const HWIdentifier &id) const
extract adc field from HW identifier
Definition TileHWID.h:193
std::vector< HWIdentifier >::const_iterator adc_begin() const
begin iterator for ADC Identifiers
Definition TileHWID.h:308

◆ fillSynchronization()

void TileCellMonitorAlgorithm::fillSynchronization ( const std::vector< const CaloCell * > & cells,
const std::vector< int > & l1TriggersIndices ) const
private

Definition at line 1029 of file TileCellMonitorAlgorithm.cxx.

1030 {
1031
1032 std::vector<float> timeDifference;
1033
1034 int size = cells.size();
1035 if (size > 1) {
1036 for (int i = 1; i < size; ++i) {
1037 float x1 = cells[i]->x();
1038 float y1 = cells[i]->y();
1039 float z1 = cells[i]->z();
1040 float time1 = cells[i]->time();
1041
1042 for (int j = 0; j < i; ++j) {
1043 float x2 = cells[j]->x();
1044 float y2 = cells[j]->y();
1045 float z2 = cells[j]->z();
1046 float time2 = cells[j]->time();
1047
1048 float timeMeasured = (y2 > y1) ? time1 - time2 : time2 - time1;
1049
1050 float distance = sqrt( (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));
1051 float timeExpected = distance / 300.;
1052
1053 timeDifference.push_back(timeExpected - timeMeasured);
1054 }
1055 }
1056
1057 auto monTimeDifference = Monitored::Collection("timeDifference", timeDifference);
1058 for (int l1TriggerIdx : l1TriggersIndices) {
1059 fill(m_tools[m_cellSynchGroups[l1TriggerIdx]], monTimeDifference);
1060 }
1061 }
1062}

◆ 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

◆ getDigitizer()

int TileCellMonitorAlgorithm::getDigitizer ( int channel) const
private

Definition at line 1064 of file TileCellMonitorAlgorithm.cxx.

1064 {
1065
1066 // Conversion from channel number to digitizer number
1067 static const int channel2digitizer[48] = {8, 8, 8, 8, 8, 8,
1068 7, 7, 7, 7, 7, 7,
1069 6, 6, 6, 6, 6, 6,
1070 5, 5, 5, 5, 5, 5,
1071 4, 4, 4, 4, 4, 4,
1072 3, 3, 3, 3, 3, 3,
1073 2, 2, 2, 2, 2, 2,
1074 1, 1, 1, 1, 1, 1};
1075
1076 return channel2digitizer[channel];
1077}

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

◆ getL1TriggerIndices()

std::vector< int > TileMonitorAlgorithm::getL1TriggerIndices ( uint32_t lvl1TriggerType) const
inherited

Return indices of histograms to be filled according fired L1 trigger type.

Parameters
lvl1TriggerTypeLevel1 Trigger Type
Returns
vector of indices of histograms to be filled

Definition at line 67 of file TileMonitorAlgorithm.cxx.

67 {
68
69 std::vector<int> triggerIndices;
70 int triggerIdx{-1};
71
72 if (lvl1TriggerType != 0) {
73 // First bit tells if physics (=1) or calibration (=0) event
74 if ((lvl1TriggerType >> BIT7_CALIB) & 1) { // format is 0x1AAAAAAA
75 // Always try store at least AnyPhysTrig (=8)
76 triggerIdx = m_l1TriggerIndices[ANY_PHYSICS];
77 if (triggerIdx >= 0) triggerIndices.push_back(triggerIdx);
78 // Adding the phys triggers one by one
79 for (int bitTrigger = 0; bitTrigger < BIT7_CALIB; ++bitTrigger) {
80 if ((lvl1TriggerType >> bitTrigger) & 1) {
81 triggerIdx = m_l1TriggerIndices[bitTrigger];
82 if (triggerIdx >= 0) triggerIndices.push_back(triggerIdx);
83 }
84 }
85 } else { // Calibration event foramt is 0x0AAAAAAA
86 triggerIdx = m_l1TriggerIndices[BIT7_CALIB];
87 if (triggerIdx >= 0) triggerIndices.push_back(triggerIdx);
88 }
89 } else {
90 // Always try store at least AnyPhysTrig (=8)
91 triggerIdx = m_l1TriggerIndices[ANY_PHYSICS];
92 if (triggerIdx >= 0) triggerIndices.push_back(triggerIdx);
93 }
94
95 return triggerIndices;
96}
std::vector< int > m_l1TriggerIndices

◆ getL1TriggerTypeBit()

TileMonitorAlgorithm::L1TriggerTypeBit TileMonitorAlgorithm::getL1TriggerTypeBit ( int lvl1TriggerIdx) const
inherited

Return Level1 Trigger type bit according trigger index.

Parameters
lvl1TriggerIdxLevel1 Trigger index
Returns
level1 trigger type bit according trigger index

Definition at line 104 of file TileMonitorAlgorithm.cxx.

104 {
105 return m_l1Triggers.at(lvl1TriggerIdx);
106}
std::vector< L1TriggerTypeBit > m_l1Triggers

◆ getL1TriggerTypeBitFromName()

TileMonitorAlgorithm::L1TriggerTypeBit TileMonitorAlgorithm::getL1TriggerTypeBitFromName ( const std::string & triggerBitName) const
privateinherited

Definition at line 35 of file TileMonitorAlgorithm.cxx.

35 {
36
37 // Convert the triger name to lower case
38 std::string loCaseTriggerBitName = triggerBitName;
39 std::transform(triggerBitName.begin(), triggerBitName.end(), loCaseTriggerBitName.begin(), ::tolower);
40
41 if( loCaseTriggerBitName == "bit0_rndm" ) {
43 } else if( loCaseTriggerBitName == "bit1_zerobias" ) {
45 } else if( loCaseTriggerBitName == "bit2_l1cal" ) {
47 } else if( loCaseTriggerBitName == "bit3_muon" ) {
49 } else if( loCaseTriggerBitName == "bit4_rpc" ) {
51 } else if( loCaseTriggerBitName == "bit5_ftk" ) {
53 } else if( loCaseTriggerBitName == "bit6_ctp" ) {
55 } else if( loCaseTriggerBitName == "bit7_calib" ) {
57 } else if( loCaseTriggerBitName == "anyphystrig" ) {
59 } else { // Otherwise, warn the user and return "AnyPhysTrig"
60 ATH_MSG_WARNING("::getL1TriggerTypeBitFromName(): Unknown L1 trigger type bit name: "
61 << triggerBitName << ", returning AnyPhysTrig.");
63 }
64}

◆ getNumberOfL1Triggers()

int TileMonitorAlgorithm::getNumberOfL1Triggers ( void ) const
inlineinherited

Return number of L1 triggers for which histograms should be filled.

Definition at line 68 of file TileMonitorAlgorithm.h.

68{return m_fillHistogramsForL1Triggers.size();};
Gaudi::Property< std::vector< std::string > > m_fillHistogramsForL1Triggers

◆ getPartition() [1/3]

TileMonitorAlgorithm::Partition TileMonitorAlgorithm::getPartition ( const CaloCell * cell,
const TileID * tileID ) const
inherited

Return Partition for Tile cell or MAX_PART otherwise.

Parameters
cellCalo cell

Definition at line 109 of file TileMonitorAlgorithm.cxx.

109 {
110 return cell ? getPartition(cell->ID(), tileID) : MAX_PART;
111}
Partition getPartition(const CaloCell *cell, const TileID *tileID) const
Return Partition for Tile cell or MAX_PART otherwise.

◆ getPartition() [2/3]

TileMonitorAlgorithm::Partition TileMonitorAlgorithm::getPartition ( Identifier id,
const TileID * tileID ) const
inherited

Return Partition for Tile cell identifier or MAX_PART otherwise.

Parameters
idCalo cell identifier

Definition at line 120 of file TileMonitorAlgorithm.cxx.

120 {
121
122 Partition partition = MAX_PART; // by default for non Tile cell
123
124 if (tileID->is_tile(id)) {
125 int section = tileID->section(id);
126 int side = tileID->side(id);
127
128 if (section == 1) {
129 partition = (side == 1) ? PART_LBA : PART_LBC;
130 } else if (section == 2 || section == 3) {
131 partition = (side == 1) ? PART_EBA : PART_EBC;
132 }
133 }
134
135 return partition;
136}
void section(const std::string &sec)
Partition
Describes Tile partitions (ROS - 1)

◆ getPartition() [3/3]

TileMonitorAlgorithm::Partition TileMonitorAlgorithm::getPartition ( IdentifierHash hash,
const TileID * tileID ) const
inherited

Return Partition for Tile cell identifier hash or MAX_PART otherwise.

Parameters
hashCalo cell identifier hash

Definition at line 114 of file TileMonitorAlgorithm.cxx.

114 {
115 return getPartition(tileID->cell_id(hash), tileID);
116}
Identifier cell_id(const Identifier &any_id) const

◆ 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 TileCellMonitorAlgorithm::initialize ( )
overridevirtual

initialize

Returns
StatusCode

Reimplemented from TileMonitorAlgorithm.

Definition at line 22 of file TileCellMonitorAlgorithm.cxx.

22 {
23
24 ATH_MSG_INFO("in initialize()");
25
26 ATH_CHECK( detStore()->retrieve(m_tileID) );
27 ATH_CHECK( detStore()->retrieve(m_tileHWID) );
28
29 ATH_CHECK( m_cablingSvc.retrieve() );
30 m_cabling = m_cablingSvc->cablingService();
31
32 ATH_CHECK( m_DQstatusKey.initialize() );
33 ATH_CHECK( m_badChannelsKey.initialize() );
34 ATH_CHECK( m_caloCellContainerKey.initialize() );
35
36 using Tile = TileCalibUtils;
37 using namespace Monitored;
38
39 int nL1Triggers = getNumberOfL1Triggers();
40
41 m_cellSynchGroups = buildToolMap<int>(m_tools, "TileCellSynch", nL1Triggers);
42 m_energyBalModPartGroups = buildToolMap<int>(m_tools, "TileCellEneBalModPart", nL1Triggers);
43 m_timeBalModPartGroups = buildToolMap<int>(m_tools, "TileCellTimeBalModPart", nL1Triggers);
44 m_maskedOnFlyGroups = buildToolMap<int>(m_tools, "TileCellStatusOnFly", Tile::MAX_ROS - 1);
45 m_maskedDueDQGroups = buildToolMap<int>(m_tools, "TileMaskChannelDueDQvsLB", MAX_PART);
46 m_maskedCellsDueDQGroups = buildToolMap<int>(m_tools, "TileMaskedCellDueDQvsLB", MAX_PART);
47
48 m_maskedOnFlyLBGroups = buildToolMap<int>(m_tools, "TileMaskChannelOnFlyLB", MAX_PART);
49 m_maskedCellsLBGroups = buildToolMap<int>(m_tools, "TileMaskCellLB", MAX_PART);
50
51 m_maskedGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellStatusInDB",
52 Tile::MAX_ROS - 1, Tile::MAX_GAIN);
53
54 m_energySampEGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellEventEnergy_SampE",
55 Tile::MAX_ROS, nL1Triggers);
56
57 m_moduleCorrGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellModuleCorrelation",
58 Tile::MAX_ROS, nL1Triggers);
59
60 m_chanTimeGroups = buildToolMap<std::vector<int>>(m_tools, "TileChanPartTime",
61 Tile::MAX_ROS - 1, nL1Triggers);
62
63 m_digiTimeGroups = buildToolMap<std::vector<int>>(m_tools, "TileDigiPartTime",
64 Tile::MAX_ROS - 1, nL1Triggers);
65
66 m_detailOccupGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellDetailOccMap",
67 Tile::MAX_ROS - 1, nL1Triggers);
68
69 m_overThrOccupGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellDetailOccMapOvThr",
70 Tile::MAX_ROS - 1, nL1Triggers);
71
72 m_overThr30GeVOccupGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellDetailOccMapOvThr30GeV",
73 Tile::MAX_ROS - 1, nL1Triggers);
74
75 m_overThr300GeVOccupGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellDetailOccMapOvThr300GeV",
76 Tile::MAX_ROS - 1, nL1Triggers);
77
78 m_eneDiffChanModGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellEneDiffChanMod",
79 Tile::MAX_ROS - 1, nL1Triggers);
80
81 m_overThrOccupGainGroups = buildToolMap<std::vector<std::vector<int>>>(m_tools, "TileCellDetailOccMapOvThrGain",
82 Tile::MAX_ROS - 1, Tile::MAX_GAIN, nL1Triggers);
83
84 m_detailOccupGainGroups = buildToolMap<std::vector<std::vector<int>>>(m_tools, "TileCellDetailOccMapGain",
85 Tile::MAX_ROS - 1, Tile::MAX_GAIN, nL1Triggers);
86
87 if (m_fillGapScintHistograms) {
88 m_energyGapScintGroups = buildToolMap<std::vector<std::vector<int>>>(m_tools, "TileGapScintilatorEnergy", 2 /* EBA and EBC */,
89 Tile::MAX_DRAWER, 4 /* E1-E4 */);
90 }
91
92 m_nCellsGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellsNumberLB",
93 Tile::MAX_ROS, nL1Triggers);
94
95 m_nCellsOverThrGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellOccOvThrBCID",
96 Tile::MAX_ROS, nL1Triggers);
97
98 m_eneEtaPhiGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellEneEtaPhi",
99 MAX_SAMP, nL1Triggers);
100
101 m_overThrEtaPhiGroups = buildToolMap<std::vector<int>>(m_tools, "TileCellEtaPhiOvThr",
102 MAX_SAMP, nL1Triggers);
103
104 if (m_fillChannelTimeHistograms) {
105 m_chanTimeSampGroups = buildToolMap<std::vector<std::vector<int>>>(m_tools, "TileChannelTime",
106 Tile::MAX_ROS - 1, MAX_SAMP, nL1Triggers);
107 }
108
109 m_eneDiffSampGroups = buildToolMap<std::vector<std::vector<int>>>(m_tools, "TileCellEneDiff",
110 Tile::MAX_ROS - 1, MAX_SAMP, nL1Triggers);
111
112 m_timeDiffSampGroups = buildToolMap<std::vector<std::vector<int>>>(m_tools, "TileCellTimeDiff",
113 Tile::MAX_ROS - 1, MAX_SAMP, nL1Triggers);
114
115 m_negOccupGroups = buildToolMap<int>(m_tools, "TileCellDetailNegOccMap", Tile::MAX_ROS - 1);
116 m_timeBalGroups = buildToolMap<int>(m_tools, "TileCellTimeBalance", Tile::MAX_ROS - 1);
117 m_energyBalGroups = buildToolMap<int>(m_tools, "TileCellEnergyBalance", Tile::MAX_ROS - 1);
118
119
121}
#define ATH_MSG_INFO(x)
StatusCode initialize(bool used=true)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
std::vector< std::vector< std::vector< int > > > m_eneDiffSampGroups
std::vector< std::vector< std::vector< int > > > m_timeDiffSampGroups
virtual StatusCode initialize() override
initialize
Generic monitoring tool for athena components.
std::vector< V > buildToolMap(const ToolHandleArray< GenericMonitoringTool > &tools, const std::string &baseName, int nHist)
Builds an array of indices (base case)

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

◆ isPhysicsEvent()

bool TileMonitorAlgorithm::isPhysicsEvent ( uint32_t lvl1TriggerType) const
inherited

Return true if it is physics event or false for calibration event.

Parameters
lvl1TriggerTypeLevel1 Trigger Type
Returns
true if it is physics event according L1 trigger type

Definition at line 98 of file TileMonitorAlgorithm.cxx.

98 {
99 // First bit tells if physics (=1) or calibration (=0) event
100 return (lvl1TriggerType == 0) || (((lvl1TriggerType >> BIT7_CALIB) & 1) == 1);
101}

◆ 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}
#define ATH_MSG_ERROR(x)
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.

◆ TileMonitorAlgorithm()

TileMonitorAlgorithm::TileMonitorAlgorithm ( const std::string & name,
ISvcLocator * svcLocator )
inline

Definition at line 23 of file TileMonitorAlgorithm.h.

24 :AthMonitorAlgorithm(name, svcLocator), m_l1TriggerIndices(9, -1) {}
Base class for Athena Monitoring Algorithms.

◆ 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

TileCellMonitorAlgorithm.cfg = MainServicesCfg(flags)

Definition at line 363 of file TileCellMonitorAlgorithm.py.

◆ enableLumiAccess

TileCellMonitorAlgorithm.enableLumiAccess

Definition at line 355 of file TileCellMonitorAlgorithm.py.

◆ Files

TileCellMonitorAlgorithm.Files

Definition at line 352 of file TileCellMonitorAlgorithm.py.

◆ flags

TileCellMonitorAlgorithm.flags = initConfigFlags()

Definition at line 351 of file TileCellMonitorAlgorithm.py.

◆ HISTFileName

TileCellMonitorAlgorithm.HISTFileName

Definition at line 353 of file TileCellMonitorAlgorithm.py.

◆ l1Triggers

list TileCellMonitorAlgorithm.l1Triggers
Initial value:
= ['bit0_RNDM', 'bit1_ZeroBias', 'bit2_L1Cal', 'bit3_Muon',
'bit4_RPC', 'bit5_FTK', 'bit6_CTP', 'bit7_Calib', 'AnyPhysTrig']

Definition at line 366 of file TileCellMonitorAlgorithm.py.

◆ m_badChannelsKey

SG::ReadCondHandleKey<TileBadChannels> TileCellMonitorAlgorithm::m_badChannelsKey
private
Initial value:
{this,
"TileBadChannels", "TileBadChannels", "Input Tile bad channel status"}

Name of TileBadChannels in condition store.

Definition at line 98 of file TileCellMonitorAlgorithm.h.

98 {this,
99 "TileBadChannels", "TileBadChannels", "Input Tile bad channel status"};

◆ m_cabling

const TileCablingService* TileCellMonitorAlgorithm::m_cabling {nullptr}
private

Definition at line 106 of file TileCellMonitorAlgorithm.h.

106{nullptr};

◆ m_cablingSvc

ServiceHandle<TileCablingSvc> TileCellMonitorAlgorithm::m_cablingSvc
private
Initial value:
{ this,
"TileCablingSvc", "TileCablingSvc", "Tile cabling service"}

Name of Tile cabling service.

Definition at line 89 of file TileCellMonitorAlgorithm.h.

89 { this,
90 "TileCablingSvc", "TileCablingSvc", "Tile cabling service"};

◆ m_caloCellContainerKey

SG::ReadHandleKey<CaloCellContainer> TileCellMonitorAlgorithm::m_caloCellContainerKey
private
Initial value:
{this,
"CaloCellContainer", "AllCalo", "Calo cell container name"}

Definition at line 101 of file TileCellMonitorAlgorithm.h.

101 {this,
102 "CaloCellContainer", "AllCalo", "Calo cell container name"};

◆ m_cellSynchGroups

std::vector<int> TileCellMonitorAlgorithm::m_cellSynchGroups
private

Definition at line 110 of file TileCellMonitorAlgorithm.h.

◆ m_chanTimeGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_chanTimeGroups
private

Definition at line 120 of file TileCellMonitorAlgorithm.h.

◆ m_chanTimeSampGroups

std::vector<std::vector<std::vector<int> > > TileCellMonitorAlgorithm::m_chanTimeSampGroups
private

Definition at line 133 of file TileCellMonitorAlgorithm.h.

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

std::vector<std::vector<std::vector<int> > > TileCellMonitorAlgorithm::m_detailOccupGainGroups
private

Definition at line 130 of file TileCellMonitorAlgorithm.h.

◆ m_detailOccupGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_detailOccupGroups
private

Definition at line 124 of file TileCellMonitorAlgorithm.h.

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

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_digiTimeGroups
private

Definition at line 121 of file TileCellMonitorAlgorithm.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_DQstatusKey

SG::ReadHandleKey<TileDQstatus> TileCellMonitorAlgorithm::m_DQstatusKey
private
Initial value:
{this,
"TileDQstatus", "TileDQstatus", "Tile DQ status name"}

Definition at line 92 of file TileCellMonitorAlgorithm.h.

92 {this,
93 "TileDQstatus", "TileDQstatus", "Tile DQ status name"};

◆ m_dummy

const ToolHandle<GenericMonitoringTool> AthMonitorAlgorithm::m_dummy
privateinherited

Definition at line 374 of file AthMonitorAlgorithm.h.

◆ m_eneDiffChanModGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_eneDiffChanModGroups
private

Definition at line 128 of file TileCellMonitorAlgorithm.h.

◆ m_eneDiffSampGroups

std::vector<std::vector<std::vector<int> > > TileCellMonitorAlgorithm::m_eneDiffSampGroups
private

Definition at line 134 of file TileCellMonitorAlgorithm.h.

◆ m_eneEtaPhiGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_eneEtaPhiGroups
private

Definition at line 137 of file TileCellMonitorAlgorithm.h.

◆ m_energyBalanceThreshold

Gaudi::Property<float> TileCellMonitorAlgorithm::m_energyBalanceThreshold
private
Initial value:
{this,
"EnergyBalanceThreshold", 3.0F, "Energy ratio threshold"}

Definition at line 56 of file TileCellMonitorAlgorithm.h.

56 {this,
57 "EnergyBalanceThreshold", 3.0F, "Energy ratio threshold"};

◆ m_energyBalGroups

std::vector<int> TileCellMonitorAlgorithm::m_energyBalGroups
private

Definition at line 142 of file TileCellMonitorAlgorithm.h.

◆ m_energyBalModPartGroups

std::vector<int> TileCellMonitorAlgorithm::m_energyBalModPartGroups
private

Definition at line 108 of file TileCellMonitorAlgorithm.h.

◆ m_energyGapScintGroups

std::vector<std::vector<std::vector<int> > > TileCellMonitorAlgorithm::m_energyGapScintGroups
private

Definition at line 131 of file TileCellMonitorAlgorithm.h.

◆ m_energyLimitForTime

Gaudi::Property<float> TileCellMonitorAlgorithm::m_energyLimitForTime
private
Initial value:
{this,
"EnergyLimitForTime", 1000000.0F, "Energy limit for timing in MeV"}

Definition at line 53 of file TileCellMonitorAlgorithm.h.

53 {this,
54 "EnergyLimitForTime", 1000000.0F, "Energy limit for timing in MeV"};

◆ m_energyRangeForMuon

Gaudi::Property<std::vector<float> > TileCellMonitorAlgorithm::m_energyRangeForMuon
private
Initial value:
{this,
"EnergyRangeForMuon", {300.0F, 2000.F}, "Cell energy range for muon in MeV"}

Definition at line 77 of file TileCellMonitorAlgorithm.h.

77 {this,
78 "EnergyRangeForMuon", {300.0F, 2000.F}, "Cell energy range for muon in MeV"};

◆ m_energySampEGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_energySampEGroups
private

Definition at line 118 of file TileCellMonitorAlgorithm.h.

◆ m_energyThreshold

Gaudi::Property<float> TileCellMonitorAlgorithm::m_energyThreshold
private
Initial value:
{this,
"EnergyThreshold", 300.0F, "Energy threshold in MeV"}

Definition at line 44 of file TileCellMonitorAlgorithm.h.

44 {this,
45 "EnergyThreshold", 300.0F, "Energy threshold in MeV"};

◆ m_energyThresholdForGain

Gaudi::Property<std::vector<float> > TileCellMonitorAlgorithm::m_energyThresholdForGain
private
Initial value:
{this,
"EnergyThresholdForGain", {10000.0F, 300.F}, "Channel energy threshold per gain for over thershold occupnacy maps"}

Definition at line 83 of file TileCellMonitorAlgorithm.h.

83 {this,
84 "EnergyThresholdForGain", {10000.0F, 300.F}, "Channel energy threshold per gain for over thershold occupnacy maps"};

◆ m_energyThresholdForGapScint

Gaudi::Property<float> TileCellMonitorAlgorithm::m_energyThresholdForGapScint
private
Initial value:
{this,
"EnergyThresholdForGapScintilator", 0.0F, "Energy threshold for Gap Scintilator (E1-E4) in MeV"}

Definition at line 62 of file TileCellMonitorAlgorithm.h.

62 {this,
63 "EnergyThresholdForGapScintilator", 0.0F, "Energy threshold for Gap Scintilator (E1-E4) in MeV"};

◆ m_energyThresholdForTime

Gaudi::Property<float> TileCellMonitorAlgorithm::m_energyThresholdForTime
private
Initial value:
{this,
"EnergyThresholdForTime", 500.0F, "Energy threshold for timing in MeV"}

Definition at line 50 of file TileCellMonitorAlgorithm.h.

50 {this,
51 "EnergyThresholdForTime", 500.0F, "Energy threshold for timing in MeV"};

◆ 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_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_fillChannelTimeHistograms

Gaudi::Property<bool> TileCellMonitorAlgorithm::m_fillChannelTimeHistograms
private
Initial value:
{this,
"fillChannelTimeHistograms", true, "Fill histograms with channel time per sample"}

Definition at line 68 of file TileCellMonitorAlgorithm.h.

68 {this,
69 "fillChannelTimeHistograms", true, "Fill histograms with channel time per sample"};

◆ m_fillGapScintHistograms

Gaudi::Property<bool> TileCellMonitorAlgorithm::m_fillGapScintHistograms
private
Initial value:
{this,
"fillGapScintilatorHistograms", false, "Fill histograms for indvidual Gap scintilators (E1-E4 cells)"}

Definition at line 71 of file TileCellMonitorAlgorithm.h.

71 {this,
72 "fillGapScintilatorHistograms", false, "Fill histograms for indvidual Gap scintilators (E1-E4 cells)"};

◆ m_fillHistogramsForL1Triggers

Gaudi::Property<std::vector<std::string> > TileMonitorAlgorithm::m_fillHistogramsForL1Triggers
privateinherited
Initial value:
{this,
"fillHistogramsForL1Triggers", {}, "Fill histograms per given L1 trigger types"}

Definition at line 100 of file TileMonitorAlgorithm.h.

100 {this,
101 "fillHistogramsForL1Triggers", {}, "Fill histograms per given L1 trigger types"};

◆ m_fillTimeAndEnergyDiffHistograms

Gaudi::Property<bool> TileCellMonitorAlgorithm::m_fillTimeAndEnergyDiffHistograms
private
Initial value:
{this, "fillTimeAndEnergyDiffHistograms", true,
"Fill histograms with time and energy difference between two PMTs of the same Cell"}

Definition at line 74 of file TileCellMonitorAlgorithm.h.

74 {this, "fillTimeAndEnergyDiffHistograms", true,
75 "Fill histograms with time and energy difference between two PMTs of the same Cell"};

◆ m_fillTimeHistograms

Gaudi::Property<bool> TileCellMonitorAlgorithm::m_fillTimeHistograms
private
Initial value:
{this,
"fillTimeHistograms", false, "Force filling timing histograms"}

Definition at line 65 of file TileCellMonitorAlgorithm.h.

65 {this,
66 "fillTimeHistograms", false, "Force filling timing histograms"};

◆ m_l1TriggerBitNames

std::vector<std::string> TileMonitorAlgorithm::m_l1TriggerBitNames
privateinherited
Initial value:
{"bit0_RNDM", "bit1_ZeroBias", "bit2_L1CAL", "bit3_MUON",
"bit4_RPC", "bit5_FTK", "bti6_CTP", "bit7_Calib", "AnyPhysTrig"}

Definition at line 105 of file TileMonitorAlgorithm.h.

105 {"bit0_RNDM", "bit1_ZeroBias", "bit2_L1CAL", "bit3_MUON",
106 "bit4_RPC", "bit5_FTK", "bti6_CTP", "bit7_Calib", "AnyPhysTrig"};

◆ m_l1TriggerIndices

std::vector<int> TileMonitorAlgorithm::m_l1TriggerIndices
privateinherited

Definition at line 104 of file TileMonitorAlgorithm.h.

◆ m_l1Triggers

std::vector<L1TriggerTypeBit> TileMonitorAlgorithm::m_l1Triggers
privateinherited

Definition at line 103 of file TileMonitorAlgorithm.h.

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

std::vector<int> TileCellMonitorAlgorithm::m_maskedCellsDueDQGroups
private

Definition at line 113 of file TileCellMonitorAlgorithm.h.

◆ m_maskedCellsLBGroups

std::vector<int> TileCellMonitorAlgorithm::m_maskedCellsLBGroups
private

Definition at line 115 of file TileCellMonitorAlgorithm.h.

◆ m_maskedDueDQGroups

std::vector<int> TileCellMonitorAlgorithm::m_maskedDueDQGroups
private

Definition at line 112 of file TileCellMonitorAlgorithm.h.

◆ m_maskedGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_maskedGroups
private

Definition at line 116 of file TileCellMonitorAlgorithm.h.

◆ m_maskedOnFlyGroups

std::vector<int> TileCellMonitorAlgorithm::m_maskedOnFlyGroups
private

Definition at line 111 of file TileCellMonitorAlgorithm.h.

◆ m_maskedOnFlyLBGroups

std::vector<int> TileCellMonitorAlgorithm::m_maskedOnFlyLBGroups
private

Definition at line 114 of file TileCellMonitorAlgorithm.h.

◆ m_moduleCorrGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_moduleCorrGroups
private

Definition at line 119 of file TileCellMonitorAlgorithm.h.

◆ m_name

std::string AthMonitorAlgorithm::m_name
privateinherited

Definition at line 371 of file AthMonitorAlgorithm.h.

◆ m_nCellsGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_nCellsGroups
private

Definition at line 122 of file TileCellMonitorAlgorithm.h.

◆ m_nCellsOverThrGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_nCellsOverThrGroups
private

Definition at line 123 of file TileCellMonitorAlgorithm.h.

◆ m_negativeEnergyThreshold

Gaudi::Property<float> TileCellMonitorAlgorithm::m_negativeEnergyThreshold
private
Initial value:
{this,
"NegativeEnergyThreshold", -2000.0F, "Negative energy threshold in MeV"}

Definition at line 47 of file TileCellMonitorAlgorithm.h.

47 {this,
48 "NegativeEnergyThreshold", -2000.0F, "Negative energy threshold in MeV"};

◆ m_negOccupGroups

std::vector<int> TileCellMonitorAlgorithm::m_negOccupGroups
private

Definition at line 140 of file TileCellMonitorAlgorithm.h.

◆ m_overThr300GeVOccupGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_overThr300GeVOccupGroups
private

Definition at line 127 of file TileCellMonitorAlgorithm.h.

◆ m_overThr30GeVOccupGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_overThr30GeVOccupGroups
private

Definition at line 126 of file TileCellMonitorAlgorithm.h.

◆ m_overThrEtaPhiGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_overThrEtaPhiGroups
private

Definition at line 138 of file TileCellMonitorAlgorithm.h.

◆ m_overThrOccupGainGroups

std::vector<std::vector<std::vector<int> > > TileCellMonitorAlgorithm::m_overThrOccupGainGroups
private

Definition at line 129 of file TileCellMonitorAlgorithm.h.

◆ m_overThrOccupGroups

std::vector<std::vector<int> > TileCellMonitorAlgorithm::m_overThrOccupGroups
private

Definition at line 125 of file TileCellMonitorAlgorithm.h.

◆ m_tileHWID

const TileHWID* TileCellMonitorAlgorithm::m_tileHWID {nullptr}
private

Definition at line 105 of file TileCellMonitorAlgorithm.h.

105{nullptr};

◆ m_tileID

const TileID* TileCellMonitorAlgorithm::m_tileID {nullptr}
private

Definition at line 104 of file TileCellMonitorAlgorithm.h.

104{nullptr};

◆ m_timeBalanceThreshold

Gaudi::Property<float> TileCellMonitorAlgorithm::m_timeBalanceThreshold
private
Initial value:
{this,
"TimeBalanceThreshold", 25.0F, "Time threshold in ns"}

Definition at line 59 of file TileCellMonitorAlgorithm.h.

59 {this,
60 "TimeBalanceThreshold", 25.0F, "Time threshold in ns"};

◆ m_timeBalGroups

std::vector<int> TileCellMonitorAlgorithm::m_timeBalGroups
private

Definition at line 141 of file TileCellMonitorAlgorithm.h.

◆ m_timeBalModPartGroups

std::vector<int> TileCellMonitorAlgorithm::m_timeBalModPartGroups
private

Definition at line 109 of file TileCellMonitorAlgorithm.h.

◆ m_timeDiffSampGroups

std::vector<std::vector<std::vector<int> > > TileCellMonitorAlgorithm::m_timeDiffSampGroups
private

Definition at line 135 of file TileCellMonitorAlgorithm.h.

◆ m_timeRangeForMuon

Gaudi::Property<std::vector<float> > TileCellMonitorAlgorithm::m_timeRangeForMuon
private
Initial value:
{this,
"TimeRangeForMuon", {-60.0F, 60.F}, "Cell time range for muon in ns"}

Definition at line 80 of file TileCellMonitorAlgorithm.h.

80 {this,
81 "TimeRangeForMuon", {-60.0F, 60.F}, "Cell time range for muon in ns"};

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

◆ MaxEvents

TileCellMonitorAlgorithm.MaxEvents

Definition at line 356 of file TileCellMonitorAlgorithm.py.

◆ sc

TileCellMonitorAlgorithm.sc = cfg.run()

Definition at line 378 of file TileCellMonitorAlgorithm.py.

◆ summariseProps

TileCellMonitorAlgorithm.summariseProps

Definition at line 373 of file TileCellMonitorAlgorithm.py.

◆ True

TileCellMonitorAlgorithm.True

Definition at line 373 of file TileCellMonitorAlgorithm.py.

◆ useTrigger

TileCellMonitorAlgorithm.useTrigger

Definition at line 354 of file TileCellMonitorAlgorithm.py.

◆ withDetails

TileCellMonitorAlgorithm.withDetails

Definition at line 373 of file TileCellMonitorAlgorithm.py.


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