5#ifndef ManagedMonitorToolBase_CXX
6#define ManagedMonitorToolBase_CXX
20#include "TEfficiency.h"
24#include "Gaudi/Interfaces/IOptionsSvc.h"
25#include "GaudiKernel/EventContext.h"
26#include "GaudiKernel/IHistogramSvc.h"
27#include "GaudiKernel/IMessageSvc.h"
28#include "GaudiKernel/ISvcLocator.h"
29#include "GaudiKernel/MsgStream.h"
33#include "GaudiKernel/ITHistSvc.h"
180 std::string strToLower(
const std::string&
str );
196 std::string hName(
h->GetName() );
197 m_map.emplace( hName,
h );
198 return m_tool->regHist(
h, *
this );
201 return StatusCode::FAILURE;
206getHist( TH1*&
h,
const std::string& hName )
209 return m_tool->getHist(
h, hName, *
this );
212 return StatusCode::FAILURE;
218getHist( TH2*&
h,
const std::string& hName )
221 return m_tool->getHist(
h, hName, *
this );
224 return StatusCode::FAILURE;
230 return m_tool->regEfficiency( e, *
this );
232 return StatusCode::FAILURE;
241 return m_tool->regGraph( g, *
this );
244 return StatusCode::FAILURE;
253 return m_tool->regTree( t, *
this );
256 return StatusCode::FAILURE;
265 std::string hName(
h->GetName() );
266 m_map.erase( hName );
267 return m_tool->writeAndDelete(
h, *
this );
270 return StatusCode::FAILURE;
279 std::string hName(
h->GetName() );
280 m_map.erase( hName );
284 return StatusCode::FAILURE;
293 return m_tool->deregGraph( g );
296 return StatusCode::FAILURE;
305 return m_tool->deregObject( objName, *
this );
308 return StatusCode::FAILURE;
317 bool isSuccess(
true);
320 typedef HistMap_t::const_iterator MapIter_t;
321 MapIter_t mapEnd =
m_map.end();
322 for( MapIter_t i =
m_map.begin(); i != mapEnd; ++i ) {
323 sc =
m_tool->deregHist( i->second );
324 if( !
sc.isSuccess() )
331 return StatusCode::SUCCESS;
334 return StatusCode::FAILURE;
340 const IInterface* parent )
373 declareInterface<IMonitorToolBase>(
this);
409 newLowStatInterval =
false;
410 newMedStatInterval =
false;
411 newHigStatInterval =
false;
413 newLumiBlock =
false;
415 newEventsBlock =
false;
416 endOfEventsBlock =
false;
417 endOfLowStat =
false;
418 endOfLumiBlock =
false;
441 std::map<std::string,OutputMetadata*>::iterator mdend =
m_metadataMap.end();
442 for( std::map<std::string,OutputMetadata*>::iterator i =
m_metadataMap.begin();
455 msg(MSG::ERROR) <<
"!! streamNameFunction() has not been initialized !!" <<
endmsg;
456 msg(MSG::ERROR) <<
" --> neither ManagedMonitorToolBase::initialize() nor" <<
endmsg;
457 msg(MSG::ERROR) <<
" --> ManagedMonitorToolBase::setMonManager() has been called." <<
endmsg;
458 msg(MSG::ERROR) <<
" --> Correct configuration cannot be guaranteed from this point." <<
endmsg;
539 std::string
str(
"file");
581 std::string lcstr( strToLower(
str) );
585 else if( lcstr ==
"fill" )
587 else if( lcstr ==
"run" )
589 else if( lcstr ==
"lowStat" )
591 else if( lcstr ==
"medStat" )
593 else if( lcstr ==
"higStat" )
595 else if( lcstr ==
"lumiBlock" )
597 else if( lcstr ==
"eventsBlock" )
599 else if( lcstr ==
"file" )
605 MsgStream log( ms,
"ManagedMonitorToolBase::intervalStringToEnum()" );
606 log << MSG::WARNING <<
"Unknown ManagedMonitorToolBase::Interval_t \""
607 <<
str <<
"\", returning \"file\"" <<
endmsg;
619 m_d->m_warnAboutMissingInitialize =
false;
621 StatusCode
sc = AthAlgTool::initialize();
622 if( !
sc.isSuccess() )
623 return StatusCode::FAILURE;
630 if( !
sc.isSuccess() ) {
631 msg(MSG::ERROR) <<
"!! Unable to locate the THistSvc service !!" <<
endmsg;
638 if( !
sc.isSuccess() ) {
639 msg(MSG::ERROR) <<
"!! Unable to retrieve the TrigDecisionTool !!" <<
endmsg;
646 if ( !
sc.isSuccess() ) {
655 if(!
sc.isSuccess()) {
656 msg(MSG::WARNING) <<
"Error parsing the trigger chain list, using empty list" <<
endmsg;
669 if(!
sc.isSuccess()) {
670 msg(MSG::WARNING) <<
"Error parsing the trigger group names list, using empty list" <<
endmsg;
686 if( !
sc.isSuccess() ) {
698 auto getProp = [
this,&joSvc](std::string& var,
const std::string& name) {
699 if (joSvc->has(name))
700 var = joSvc->get(name);
704 getProp(
m_fileKey, client +
".FileKey");
708 ATH_MSG_DEBUG(
" * Properties set from " << client <<
" to the values:\n"
725 return StatusCode::SUCCESS;
735 return StatusCode::SUCCESS;
744 if (
m_d->m_warnAboutMissingInitialize) {
745 m_d->m_warnAboutMissingInitialize =
false;
746 msg(MSG::WARNING) <<
"ManagedMonitorToolBase::initialize() never called from reimplementation!" <<
endmsg;
757 newLumiBlock =
false;
763 newLowStatInterval =
false;
764 newMedStatInterval =
false;
765 newHigStatInterval =
false;
778 isNewEventsBlock =
true;
788 int currentLB =
m_manager->lumiBlockNumber();
789 int LBsLowStat =
m_manager->getLBsLowStat();
790 int LBsMedStat =
m_manager->getLBsMedStat();
791 int LBsHigStat =
m_manager->getLBsHigStat();
793 if( LBsLowStat*LBsMedStat*LBsHigStat == 0) {
794 msg(MSG::WARNING) <<
"zero LBs requested for interval" <<
endmsg;
811 StatusCode sc0( StatusCode::SUCCESS );
812 StatusCode sc1( StatusCode::SUCCESS );
813 StatusCode sc2( StatusCode::SUCCESS );
814 StatusCode sc3( StatusCode::SUCCESS );
835 m_d->benchPreProcHistograms();
837 m_d->benchPostProcHistograms();
840 m_d->benchPreBookHistograms();
846 std::vector<Interval_t> intervals_to_process;
851 for (
const auto interval: intervals_to_process) {
863 it.m_templateHist->LabelsInflate(
"X");
870 TH1* passedHist = it.m_templateHist->GetCopyPassedHisto();
871 TH1* totalHist = it.m_templateHist->GetCopyTotalHisto();
874 passedHist->LabelsInflate(
"X");
875 totalHist->LabelsInflate(
"X");
880 it.m_templateHist->SetPassedHistogram(*passedHist,
"f");
881 it.m_templateHist->SetTotalHistogram(*totalHist,
" ");
889 streamname->updateRunLB();
894 m_d->benchPostBookHistograms();
899 bool filterresult(
true);
902 for (; filterresult && (ifilter != filterend);
904 filterresult = (filterresult && (*ifilter)->accept(ctx));
915 m_d->benchPreFillHistograms();
918 m_d->benchPostFillHistograms();
931 int LBsLowStat =
m_manager->getLBsLowStat();
932 int LBsMedStat =
m_manager->getLBsMedStat();
933 int LBsHigStat =
m_manager->getLBsHigStat();
934 if( LBsLowStat*LBsMedStat*LBsHigStat > 0) {
942 return StatusCode::SUCCESS;
951 std::string mdStreamName( streamName );
952 size_t found=mdStreamName.rfind(
'/');
954 if ( found != std::string::npos )
955 mdStreamName.replace( found, mdStreamName.length(),
"/metadata" );
959 metadata =
new TTree(
"metadata",
"Monitoring Metadata" );
960 if (! metadata)
return StatusCode::FAILURE;
961 StatusCode scmd =
m_THistSvc->regTree( mdStreamName, metadata );
962 if (scmd == StatusCode::FAILURE)
return StatusCode::FAILURE;
966 i->second->fill( hName, group.interval(), group.chain(), group.merge() );
968 return StatusCode::SUCCESS;
993 TH1* theHist = (*it).m_templateHist;
996 TH1*
h =
static_cast<TH1*
>(theHist->Clone());
1000 std::string hName =
h->GetName();
1006 StatusCode sc1 =
m_THistSvc->deReg( theHist );
1007 if (sc1 == StatusCode::FAILURE) allIsOk =
false;
1010 StatusCode sc2 =
m_THistSvc->regHist( streamName,
h );
1011 if (sc2 == StatusCode::FAILURE) allIsOk =
false;
1016 m_manager->writeAndDelete( genericName );
1023 if (smd != StatusCode::SUCCESS) allIsOk =
false;
1026 StatusCode sc3 =
m_THistSvc->regHist( streamName, theHist );
1027 if (sc3 == StatusCode::FAILURE) allIsOk =
false;
1031 if (!allIsOk)
return StatusCode::FAILURE;
1033 return StatusCode::SUCCESS;
1050 bool graphRemoved =
false;
1053 TDirectory* dir =
file->GetDirectory(directoryName.c_str());
1056 TObject* obj = dir->Remove(theGraph);
1058 graphRemoved =
true;
1061 if (!graphRemoved) {
1062 return StatusCode::FAILURE;
1065 return StatusCode::SUCCESS;
1073 bool allIsOk =
true;
1079 TGraph* theGraph = (*it).m_templateHist;
1082 TGraph* g =
static_cast<TGraph*
>(theGraph->Clone());
1086 std::string gName = g->GetName();
1092 StatusCode sc1 =
m_THistSvc->deReg( theGraph );
1093 if (sc1 == StatusCode::FAILURE)
1098 bool doneCleaning =
false;
1100 TSeqCollection *filelist=gROOT->GetListOfFiles();
1101 for (
int i=0; i<filelist->GetEntries(); i++) {
1102 ATH_MSG_DEBUG(
"List of files: " << filelist->At(i)->GetName());
1103 TFile*
file =
static_cast<TFile*
>(filelist->At(i));
1105 if (sc2 == StatusCode::SUCCESS)
1106 doneCleaning =
true;
1110 if (!doneCleaning) {
1111 ATH_MSG_ERROR(
"THistSvc_deReg_fixTGraph: failed to apply TGraph fix for the THist Svc!");
1117 StatusCode sc3 =
m_THistSvc->regGraph( streamName, g );
1118 if (sc3 == StatusCode::FAILURE)
1125 if (smd != StatusCode::SUCCESS)
1129 StatusCode sc4 =
m_THistSvc->regGraph( streamName, theGraph );
1130 if (sc4 == StatusCode::FAILURE)
1135 if (!allIsOk)
return StatusCode::FAILURE;
1137 return StatusCode::SUCCESS;
1141 bool allIsOk =
true;
1142 for(
auto& it : templateEfficiencies ) {
1145 TEfficiency* theEfficiency = it.m_templateHist;
1146 TEfficiency* e =
static_cast<TEfficiency*
>(theEfficiency->Clone());
1147 int nbins = theEfficiency->GetTotalHistogram()->GetNbinsX();
1148 int xlow = theEfficiency->GetTotalHistogram()->GetXaxis()->GetXmin();
1149 int xhigh = theEfficiency->GetTotalHistogram()->GetXaxis()->GetXmax();
1150 e->SetBins(nbins,xlow,xhigh);
1151 std::string name = e->GetName();
1154 TGraph* theGraph =
reinterpret_cast<TGraph*
>(theEfficiency);
1155 TGraph* g =
reinterpret_cast<TGraph*
>(e);
1162 StatusCode sc1 =
m_THistSvc->deReg( theGraph );
1163 if (sc1 == StatusCode::FAILURE) allIsOk =
false;
1165 bool doneCleaning =
false;
1167 TSeqCollection *filelist=gROOT->GetListOfFiles();
1168 for (
int i=0; i<filelist->GetEntries(); i++) {
1169 ATH_MSG_DEBUG(
"List of files: " << filelist->At(i)->GetName());
1170 TFile*
file =
static_cast<TFile*
>(filelist->At(i));
1172 if (sc2 == StatusCode::SUCCESS) doneCleaning =
true;
1175 if (!doneCleaning) {
1176 ATH_MSG_ERROR(
"THistSvc_deReg_fixTGraph: failed to apply TGraph fix for the THist Svc!");
1180 StatusCode sc3 =
m_THistSvc->regGraph( streamName, g );
1181 if (sc3 == StatusCode::FAILURE)
1188 if (smd != StatusCode::SUCCESS) allIsOk =
false;
1190 StatusCode sc4 =
m_THistSvc->regGraph( streamName, theGraph );
1191 if (sc4 == StatusCode::FAILURE) allIsOk =
false;
1194 if (!allIsOk)
return StatusCode::FAILURE;
1195 return StatusCode::SUCCESS;
1204 bool allIsOk =
true;
1210 TTree* theTree = (*it).m_templateHist;
1213 TTree* t =
static_cast<TTree*
>(theTree->Clone());
1217 std::string name = t->GetName();
1223 StatusCode sc1 =
m_THistSvc->deReg( theTree );
1224 if (sc1 == StatusCode::FAILURE) allIsOk =
false;
1227 StatusCode sc2 =
m_THistSvc->regTree( streamName, t );
1228 if (sc2 == StatusCode::FAILURE) allIsOk =
false;
1232 m_manager->passOwnership( t, genericName );
1233 m_manager->writeAndDelete( genericName );
1240 if (smd != StatusCode::SUCCESS) allIsOk =
false;
1243 StatusCode sc3 =
m_THistSvc->regTree( streamName, theTree );
1244 if (sc3 == StatusCode::FAILURE) allIsOk =
false;
1248 if (!allIsOk)
return StatusCode::FAILURE;
1250 return StatusCode::SUCCESS;
1262 m_d->benchPreProcHistograms();
1270 endOfEventsBlock =
true;
1271 endOfLowStat =
true;
1272 endOfLumiBlock =
true;
1277 m_d->benchPostProcHistograms();
1280 return StatusCode::SUCCESS;
1292 return StatusCode::SUCCESS;
1301 return StatusCode::SUCCESS;
1308 return StatusCode::SUCCESS;
1321 return StatusCode::SUCCESS;
1345regHist( TH1*
h,
const std::string& system,
1348 MonGroup group(
this, system, interval, histo_mgmt, chain,
merge );
1359 return StatusCode::FAILURE;
1371 if (group.histo_mgmt() ==
ATTRIB_X_VS_LB && group.merge().empty()) {
1372 ATH_MSG_WARNING(
"HEY! You're attempting to register " <<
h->GetName() <<
" as a per-LB histogram, but you're not setting the merge algorithm! This is a SUPER-BAD idea! Use \"merge\", at least.");
1379 return StatusCode::FAILURE;
1382 std::string hName =
h->GetName();
1390 std::string hName =
h->GetName();
1394 m_manager->writeAndDelete( genericName );
1401 if (smd != StatusCode::SUCCESS)
return StatusCode::FAILURE;
1409getHist( TH1*&
h,
const std::string& hName,
const std::string& system,
1412 MonGroup group(
this, system, interval );
1428getHist( TH2*&
h,
const std::string& hName,
const std::string& system,
1431 MonGroup group(
this, system, interval );
1447 return StatusCode::FAILURE;
1449 TGraph* g =
reinterpret_cast<TGraph*
>(e);
1450 std::string name = e->GetName();
1455 if (group.histo_mgmt() ==
ATTRIB_X_VS_LB && group.merge().empty()) {
1456 ATH_MSG_WARNING(
"HEY! Attempting to register "<<name<<
" as a per-LB histogram, but not setting the merge algorithm! Use \"merge\", at least.");
1463 return StatusCode::FAILURE;
1469 return m_THistSvc->regGraph( streamName, g );
1474 m_manager->writeAndDelete( genericName );
1475 m_manager->passOwnership( e, genericName );
1480 if (smd != StatusCode::SUCCESS)
1481 return StatusCode::FAILURE;
1483 return m_THistSvc->regGraph( streamName, g );
1490regGraph( TGraph* g,
const std::string& system,
1493 MonGroup group(
this, system, interval, histo_mgmt, chain,
merge );
1503 return StatusCode::FAILURE;
1516 return StatusCode::FAILURE;
1519 std::string name = g->GetName();
1522 return m_THistSvc->regGraph( streamName, g );
1527 std::string gName = g->GetName();
1531 m_manager->writeAndDelete( genericName );
1532 m_manager->passOwnership( g, genericName );
1538 if (smd != StatusCode::SUCCESS)
return StatusCode::FAILURE;
1540 return m_THistSvc->regGraph( streamName, g );
1546regTree( TTree* t,
const std::string& system,
1549 MonGroup group(
this, system, interval, histo_mgmt, chain,
merge );
1570 return StatusCode::FAILURE;
1573 std::string name = t->GetName();
1582 std::string tName = t->GetName();
1586 m_manager->writeAndDelete( genericName );
1587 m_manager->passOwnership( t, genericName );
1593 if (smd != StatusCode::SUCCESS)
return StatusCode::FAILURE;
1603 return StatusCode::FAILURE;
1605 std::string hName =
h->GetName();
1609 m_manager->writeAndDelete( genericName );
1611 return StatusCode::SUCCESS;
1633deregObject(
const std::string& objName,
const std::string& system,
1636 MonGroup group(
this, system, interval );
1657 return StatusCode::SUCCESS;
1665 return StatusCode::SUCCESS;
1675 return StatusCode::SUCCESS;
1697 return lumi->lbAverageInteractionsPerCrossing();
1700 ATH_MSG_DEBUG(
"Warning: lbAverageInteractionsPerCrossing() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1713 float muToLumi = lumi->muToLumi();
1715 return lumi->lbLuminosityPerBCIDVector().at (ctx.eventID().bunch_crossing_id()) / muToLumi;
1720 ATH_MSG_DEBUG(
"Warning: lbInteractionsPerCrossing() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1733 return lumi->lbAverageLuminosity();
1736 ATH_MSG_DEBUG(
"Warning: lbAverageLuminosity() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1749 return lumi->lbLuminosityPerBCIDVector().at (ctx.eventID().bunch_crossing_id());
1752 ATH_MSG_DEBUG(
"Warning: lbLuminosityPerBCID() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1769 return live->lbAverageLiveFraction();
1772 ATH_MSG_DEBUG(
"Warning: lbAverageLivefraction() - luminosity not availble (i.e. EnableLumi = False)");
1788 return live->l1LiveFractionVector().at (ctx.eventID().bunch_crossing_id());
1791 ATH_MSG_DEBUG(
"Warning: livefractionPerBCID() - luminosity retrieved available (i.e. EnableLumi = False)");
1806 ATH_MSG_DEBUG(
"Warning: lbLumiWeight() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1823 return dur->lbDuration();
1826 ATH_MSG_DEBUG(
"Warning: lbDuration() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1873fill(
const std::string& name,
1876 std::string trigger,
1883 if( trigger.empty() )
1886 merge =
"<default>";
1899copyString(
char* to,
const std::string& from )
1902 const char* f = from.c_str();
1914 std::ostringstream streamName;
1918 streamName << group.system() <<
"/" << objName;
1919 return streamName.str();
1926 std::string streamName =
getStreamName(tool, group, objName, usePreviousInterval);
1927 std::string root, rem;
1931 rem.erase(rem.rfind(
'/'), rem.length());
1940 std::ostringstream streamName;
1941 streamName << group.system() <<
"/" << objName;
1942 return streamName.str();
1950 return getStreamName(tool, group, objName, usePreviousInterval);
1957 std::ostringstream streamName;
1964 streamName << group.system() <<
"/" << objName;
1965 return streamName.str();
1972 return getStreamName(tool, group, objName, usePreviousInterval);
1980 *end = *start +
length - 1;
1988 std::ostringstream streamName;
1991 bool isTemp =
false;
1993 bool useRunFolders = group.interval() !=
all;
1995 bool useLBFolders = ( useRunFolders )
1998 bool useLowStatInterval = ( useRunFolders )
2001 bool useMedStatInterval = ( useRunFolders )
2004 bool useHigStatInterval = ( useRunFolders )
2013 if( useRunFolders ) {
2021 if( useLBFolders ) {
2025 streamName <<
"lb_" << currentLB <<
"/";
2027 else if( useLowStatInterval ) {
2033 streamName <<
"lowStat_LB" << start <<
"-" << end <<
"/";
2035 else if( useMedStatInterval ) {
2038 streamName <<
"medStat_LB" << start <<
"-" << end <<
"/";
2040 else if( useHigStatInterval ) {
2043 streamName <<
"higStat_LB" << start <<
"-" << end <<
"/";
2045 else if( useEBFolders ) {
2050 long eventsBlockNumber = 1;
2051 long procNEventsProp = tool->get_procNEventsProp();
2052 unsigned int nEvents = tool->get_nEvents();
2053 if (procNEventsProp > 0) {
2054 eventsBlockNumber = (long)
nEvents / procNEventsProp;
2055 if ((
nEvents % procNEventsProp) != 0)
2056 eventsBlockNumber++;
2060 if (usePreviousInterval) {
2061 eventsBlockNumber--;
2064 streamName <<
"eb_" << eventsBlockNumber <<
"/";
2067 streamName << group.system() <<
"/" << objName;
2069 return streamName.str();
2076 std::string streamName =
getStreamName(tool, group, objName, usePreviousInterval);
2077 std::string root, rem;
2081 rem.erase(rem.rfind(
'/'), rem.length());
2096 ATH_MSG_DEBUG(
"ManagedMonitorToolBase::trigChainsArePassed:");
2098 for(
unsigned int i=0; i<vTrigNames.size(); i++) {
2100 ATH_MSG_DEBUG(
" + \"" << vTrigNames[i] <<
"\" passed, returning \'true\'");
2104 ATH_MSG_DEBUG(
" - \"" << vTrigNames[i] <<
"\" did not pass");
2113parseList(
const std::string& line, std::vector<std::string>& result) {
2115 std::stringstream
ss(line);
2117 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"ManagedMonitorToolBase::parseList:";
2119 while ( std::getline(
ss, item,
',') ) {
2120 std::stringstream iss(item);
2122 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" " << item;
2123 result.push_back(item);
2127 return StatusCode::SUCCESS;
2133 for (
size_t i = 0; i < vTrigChainNames.size(); ++i) {
2134 std::string& thisName = vTrigChainNames[i];
2135 if (thisName.compare(0, 9,
"CATEGORY_") ==0) {
2136 ATH_MSG_DEBUG(
"Found a trigger category: " << thisName <<
". We will unpack it.");
2137 std::vector<std::string> triggers =
m_trigTranslator->translate(thisName.substr(9,std::string::npos));
2138 std::ostringstream oss;
2140 for (
size_t itrig = 0; itrig < triggers.size(); ++itrig) {
2144 oss << triggers[itrig];
2148 std::string newval = oss.str();
2150 vTrigChainNames[i] = std::move(newval);
2185parseString(
const std::string& streamName, std::string& root, std::string& rem) {
2186 std::string::size_type pos = streamName.find(
'/');
2188 if (pos == std::string::npos) {
2195 parseString(streamName.substr(1,streamName.length()),root,rem);
2197 root = streamName.substr(0,pos);
2198 rem = streamName.substr(pos+1,streamName.length());
2225 std::string strToLower(
const std::string&
str )
2227 std::string lstr(
str);
2228 std::string::const_iterator from =
str.begin();
2229 std::string::const_iterator strend =
str.end();
2230 std::string::iterator to = lstr.begin();
2231 while( from != strend ) {
2239 std::string strToUpper(
const std::string& str )
2241 std::string ustr(str);
2242 std::string::const_iterator from =
str.begin();
2243 std::string::const_iterator strend =
str.end();
2244 std::string::iterator
to = ustr.begin();
2245 while( from != strend ) {
2246 *
to++ = toupper(*from++);
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
void tolower(std::string &s)
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
bool msgLvl(const MSG::Level lvl) const
Header file for AthHistogramAlgorithm.
static const MSG::Level s_resourceMonThreshold
An Algorithm that manages a set of modules, each inheriting from ManagedMonitorToolBase,...
static unsigned int getLBsLowStat()
static Environment_t envStringToEnum(const std::string &str)
Converts a string to an Environment_t of the same name.
static DataType_t dataTypeStringToEnum(const std::string &str)
Converts a string to a DataType_t of the same name.
static unsigned int getLBsHigStat()
static unsigned int getLBsMedStat()
static unsigned int lumiBlockNumber()
static unsigned int runNumber()