5#ifndef ManagedMonitorToolBase_CXX
6#define ManagedMonitorToolBase_CXX
20#include "TEfficiency.h"
24#include "Gaudi/Interfaces/IOptionsSvc.h"
25#include "GaudiKernel/IHistogramSvc.h"
26#include "GaudiKernel/IMessageSvc.h"
27#include "GaudiKernel/ISvcLocator.h"
28#include "GaudiKernel/MsgStream.h"
32#include "GaudiKernel/ITHistSvc.h"
179 std::string strToLower(
const std::string&
str );
195 std::string hName(
h->GetName() );
196 m_map.emplace( hName,
h );
197 return m_tool->regHist(
h, *
this );
200 return StatusCode::FAILURE;
205getHist( TH1*&
h,
const std::string& hName )
208 return m_tool->getHist(
h, hName, *
this );
211 return StatusCode::FAILURE;
217getHist( TH2*&
h,
const std::string& hName )
220 return m_tool->getHist(
h, hName, *
this );
223 return StatusCode::FAILURE;
229 return m_tool->regEfficiency( e, *
this );
231 return StatusCode::FAILURE;
240 return m_tool->regGraph( g, *
this );
243 return StatusCode::FAILURE;
252 return m_tool->regTree( t, *
this );
255 return StatusCode::FAILURE;
264 std::string hName(
h->GetName() );
265 m_map.erase( hName );
266 return m_tool->writeAndDelete(
h, *
this );
269 return StatusCode::FAILURE;
278 std::string hName(
h->GetName() );
279 m_map.erase( hName );
283 return StatusCode::FAILURE;
292 return m_tool->deregGraph( g );
295 return StatusCode::FAILURE;
304 return m_tool->deregObject( objName, *
this );
307 return StatusCode::FAILURE;
316 bool isSuccess(
true);
319 typedef HistMap_t::const_iterator MapIter_t;
320 MapIter_t mapEnd =
m_map.end();
321 for( MapIter_t i =
m_map.begin(); i != mapEnd; ++i ) {
322 sc =
m_tool->deregHist( i->second );
323 if( !
sc.isSuccess() )
330 return StatusCode::SUCCESS;
333 return StatusCode::FAILURE;
339 const IInterface* parent )
372 declareInterface<IMonitorToolBase>(
this);
408 newLowStatInterval =
false;
409 newMedStatInterval =
false;
410 newHigStatInterval =
false;
412 newLumiBlock =
false;
414 newEventsBlock =
false;
415 endOfEventsBlock =
false;
416 endOfLowStat =
false;
417 endOfLumiBlock =
false;
440 std::map<std::string,OutputMetadata*>::iterator mdend =
m_metadataMap.end();
441 for( std::map<std::string,OutputMetadata*>::iterator i =
m_metadataMap.begin();
454 msg(MSG::ERROR) <<
"!! streamNameFunction() has not been initialized !!" <<
endmsg;
455 msg(MSG::ERROR) <<
" --> neither ManagedMonitorToolBase::initialize() nor" <<
endmsg;
456 msg(MSG::ERROR) <<
" --> ManagedMonitorToolBase::setMonManager() has been called." <<
endmsg;
457 msg(MSG::ERROR) <<
" --> Correct configuration cannot be guaranteed from this point." <<
endmsg;
538 std::string
str(
"file");
580 std::string lcstr( strToLower(
str) );
584 else if( lcstr ==
"fill" )
586 else if( lcstr ==
"run" )
588 else if( lcstr ==
"lowStat" )
590 else if( lcstr ==
"medStat" )
592 else if( lcstr ==
"higStat" )
594 else if( lcstr ==
"lumiBlock" )
596 else if( lcstr ==
"eventsBlock" )
598 else if( lcstr ==
"file" )
604 MsgStream log( ms,
"ManagedMonitorToolBase::intervalStringToEnum()" );
605 log << MSG::WARNING <<
"Unknown ManagedMonitorToolBase::Interval_t \""
606 <<
str <<
"\", returning \"file\"" <<
endmsg;
618 m_d->m_warnAboutMissingInitialize =
false;
620 StatusCode
sc = AthAlgTool::initialize();
621 if( !
sc.isSuccess() )
622 return StatusCode::FAILURE;
629 if( !
sc.isSuccess() ) {
630 msg(MSG::ERROR) <<
"!! Unable to locate the THistSvc service !!" <<
endmsg;
637 if( !
sc.isSuccess() ) {
638 msg(MSG::ERROR) <<
"!! Unable to retrieve the TrigDecisionTool !!" <<
endmsg;
645 if ( !
sc.isSuccess() ) {
654 if(!
sc.isSuccess()) {
655 msg(MSG::WARNING) <<
"Error parsing the trigger chain list, using empty list" <<
endmsg;
668 if(!
sc.isSuccess()) {
669 msg(MSG::WARNING) <<
"Error parsing the trigger group names list, using empty list" <<
endmsg;
685 if( !
sc.isSuccess() ) {
697 auto getProp = [
this,&joSvc](std::string& var,
const std::string& name) {
698 if (joSvc->has(name))
699 var = joSvc->get(name);
703 getProp(
m_fileKey, client +
".FileKey");
707 ATH_MSG_DEBUG(
" * Properties set from " << client <<
" to the values:\n"
724 return StatusCode::SUCCESS;
734 return StatusCode::SUCCESS;
743 if (
m_d->m_warnAboutMissingInitialize) {
744 m_d->m_warnAboutMissingInitialize =
false;
745 msg(MSG::WARNING) <<
"ManagedMonitorToolBase::initialize() never called from reimplementation!" <<
endmsg;
756 newLumiBlock =
false;
762 newLowStatInterval =
false;
763 newMedStatInterval =
false;
764 newHigStatInterval =
false;
777 isNewEventsBlock =
true;
787 int currentLB =
m_manager->lumiBlockNumber();
788 int LBsLowStat =
m_manager->getLBsLowStat();
789 int LBsMedStat =
m_manager->getLBsMedStat();
790 int LBsHigStat =
m_manager->getLBsHigStat();
792 if( LBsLowStat*LBsMedStat*LBsHigStat == 0) {
793 msg(MSG::WARNING) <<
"zero LBs requested for interval" <<
endmsg;
810 StatusCode sc0( StatusCode::SUCCESS );
811 StatusCode sc1( StatusCode::SUCCESS );
812 StatusCode sc2( StatusCode::SUCCESS );
813 StatusCode sc3( StatusCode::SUCCESS );
834 m_d->benchPreProcHistograms();
836 m_d->benchPostProcHistograms();
839 m_d->benchPreBookHistograms();
845 std::vector<Interval_t> intervals_to_process;
850 for (
const auto interval: intervals_to_process) {
862 it.m_templateHist->LabelsInflate(
"X");
869 TH1* passedHist = it.m_templateHist->GetCopyPassedHisto();
870 TH1* totalHist = it.m_templateHist->GetCopyTotalHisto();
873 passedHist->LabelsInflate(
"X");
874 totalHist->LabelsInflate(
"X");
879 it.m_templateHist->SetPassedHistogram(*passedHist,
"f");
880 it.m_templateHist->SetTotalHistogram(*totalHist,
" ");
888 streamname->updateRunLB();
893 m_d->benchPostBookHistograms();
898 bool filterresult(
true);
901 for (; filterresult && (ifilter != filterend);
903 filterresult = (filterresult && (*ifilter)->accept());
914 m_d->benchPreFillHistograms();
917 m_d->benchPostFillHistograms();
930 int LBsLowStat =
m_manager->getLBsLowStat();
931 int LBsMedStat =
m_manager->getLBsMedStat();
932 int LBsHigStat =
m_manager->getLBsHigStat();
933 if( LBsLowStat*LBsMedStat*LBsHigStat > 0) {
941 return StatusCode::SUCCESS;
950 std::string mdStreamName( streamName );
951 size_t found=mdStreamName.rfind(
'/');
953 if ( found != std::string::npos )
954 mdStreamName.replace( found, mdStreamName.length(),
"/metadata" );
958 metadata =
new TTree(
"metadata",
"Monitoring Metadata" );
959 if (! metadata)
return StatusCode::FAILURE;
960 StatusCode scmd =
m_THistSvc->regTree( mdStreamName, metadata );
961 if (scmd == StatusCode::FAILURE)
return StatusCode::FAILURE;
965 i->second->fill( hName, group.interval(), group.chain(), group.merge() );
967 return StatusCode::SUCCESS;
992 TH1* theHist = (*it).m_templateHist;
995 TH1*
h =
static_cast<TH1*
>(theHist->Clone());
999 std::string hName =
h->GetName();
1005 StatusCode sc1 =
m_THistSvc->deReg( theHist );
1006 if (sc1 == StatusCode::FAILURE) allIsOk =
false;
1009 StatusCode sc2 =
m_THistSvc->regHist( streamName,
h );
1010 if (sc2 == StatusCode::FAILURE) allIsOk =
false;
1015 m_manager->writeAndDelete( genericName );
1022 if (smd != StatusCode::SUCCESS) allIsOk =
false;
1025 StatusCode sc3 =
m_THistSvc->regHist( streamName, theHist );
1026 if (sc3 == StatusCode::FAILURE) allIsOk =
false;
1030 if (!allIsOk)
return StatusCode::FAILURE;
1032 return StatusCode::SUCCESS;
1049 bool graphRemoved =
false;
1052 TDirectory* dir =
file->GetDirectory(directoryName.c_str());
1055 TObject* obj = dir->Remove(theGraph);
1057 graphRemoved =
true;
1060 if (!graphRemoved) {
1061 return StatusCode::FAILURE;
1064 return StatusCode::SUCCESS;
1072 bool allIsOk =
true;
1078 TGraph* theGraph = (*it).m_templateHist;
1081 TGraph* g =
static_cast<TGraph*
>(theGraph->Clone());
1085 std::string gName = g->GetName();
1091 StatusCode sc1 =
m_THistSvc->deReg( theGraph );
1092 if (sc1 == StatusCode::FAILURE)
1097 bool doneCleaning =
false;
1099 TSeqCollection *filelist=gROOT->GetListOfFiles();
1100 for (
int i=0; i<filelist->GetEntries(); i++) {
1101 ATH_MSG_DEBUG(
"List of files: " << filelist->At(i)->GetName());
1102 TFile*
file =
static_cast<TFile*
>(filelist->At(i));
1104 if (sc2 == StatusCode::SUCCESS)
1105 doneCleaning =
true;
1109 if (!doneCleaning) {
1110 ATH_MSG_ERROR(
"THistSvc_deReg_fixTGraph: failed to apply TGraph fix for the THist Svc!");
1116 StatusCode sc3 =
m_THistSvc->regGraph( streamName, g );
1117 if (sc3 == StatusCode::FAILURE)
1124 if (smd != StatusCode::SUCCESS)
1128 StatusCode sc4 =
m_THistSvc->regGraph( streamName, theGraph );
1129 if (sc4 == StatusCode::FAILURE)
1134 if (!allIsOk)
return StatusCode::FAILURE;
1136 return StatusCode::SUCCESS;
1140 bool allIsOk =
true;
1141 for(
auto& it : templateEfficiencies ) {
1144 TEfficiency* theEfficiency = it.m_templateHist;
1145 TEfficiency* e =
static_cast<TEfficiency*
>(theEfficiency->Clone());
1146 int nbins = theEfficiency->GetTotalHistogram()->GetNbinsX();
1147 int xlow = theEfficiency->GetTotalHistogram()->GetXaxis()->GetXmin();
1148 int xhigh = theEfficiency->GetTotalHistogram()->GetXaxis()->GetXmax();
1149 e->SetBins(nbins,xlow,xhigh);
1150 std::string name = e->GetName();
1153 TGraph* theGraph =
reinterpret_cast<TGraph*
>(theEfficiency);
1154 TGraph* g =
reinterpret_cast<TGraph*
>(e);
1161 StatusCode sc1 =
m_THistSvc->deReg( theGraph );
1162 if (sc1 == StatusCode::FAILURE) allIsOk =
false;
1164 bool doneCleaning =
false;
1166 TSeqCollection *filelist=gROOT->GetListOfFiles();
1167 for (
int i=0; i<filelist->GetEntries(); i++) {
1168 ATH_MSG_DEBUG(
"List of files: " << filelist->At(i)->GetName());
1169 TFile*
file =
static_cast<TFile*
>(filelist->At(i));
1171 if (sc2 == StatusCode::SUCCESS) doneCleaning =
true;
1174 if (!doneCleaning) {
1175 ATH_MSG_ERROR(
"THistSvc_deReg_fixTGraph: failed to apply TGraph fix for the THist Svc!");
1179 StatusCode sc3 =
m_THistSvc->regGraph( streamName, g );
1180 if (sc3 == StatusCode::FAILURE)
1187 if (smd != StatusCode::SUCCESS) allIsOk =
false;
1189 StatusCode sc4 =
m_THistSvc->regGraph( streamName, theGraph );
1190 if (sc4 == StatusCode::FAILURE) allIsOk =
false;
1193 if (!allIsOk)
return StatusCode::FAILURE;
1194 return StatusCode::SUCCESS;
1203 bool allIsOk =
true;
1209 TTree* theTree = (*it).m_templateHist;
1212 TTree* t =
static_cast<TTree*
>(theTree->Clone());
1216 std::string name = t->GetName();
1222 StatusCode sc1 =
m_THistSvc->deReg( theTree );
1223 if (sc1 == StatusCode::FAILURE) allIsOk =
false;
1226 StatusCode sc2 =
m_THistSvc->regTree( streamName, t );
1227 if (sc2 == StatusCode::FAILURE) allIsOk =
false;
1231 m_manager->passOwnership( t, genericName );
1232 m_manager->writeAndDelete( genericName );
1239 if (smd != StatusCode::SUCCESS) allIsOk =
false;
1242 StatusCode sc3 =
m_THistSvc->regTree( streamName, theTree );
1243 if (sc3 == StatusCode::FAILURE) allIsOk =
false;
1247 if (!allIsOk)
return StatusCode::FAILURE;
1249 return StatusCode::SUCCESS;
1261 m_d->benchPreProcHistograms();
1269 endOfEventsBlock =
true;
1270 endOfLowStat =
true;
1271 endOfLumiBlock =
true;
1276 m_d->benchPostProcHistograms();
1279 return StatusCode::SUCCESS;
1291 return StatusCode::SUCCESS;
1300 return StatusCode::SUCCESS;
1307 return StatusCode::SUCCESS;
1320 return StatusCode::SUCCESS;
1344regHist( TH1*
h,
const std::string& system,
1347 MonGroup group(
this, system, interval, histo_mgmt, chain,
merge );
1358 return StatusCode::FAILURE;
1370 if (group.histo_mgmt() ==
ATTRIB_X_VS_LB && group.merge().empty()) {
1371 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.");
1378 return StatusCode::FAILURE;
1381 std::string hName =
h->GetName();
1389 std::string hName =
h->GetName();
1393 m_manager->writeAndDelete( genericName );
1400 if (smd != StatusCode::SUCCESS)
return StatusCode::FAILURE;
1408getHist( TH1*&
h,
const std::string& hName,
const std::string& system,
1411 MonGroup group(
this, system, interval );
1427getHist( TH2*&
h,
const std::string& hName,
const std::string& system,
1430 MonGroup group(
this, system, interval );
1446 return StatusCode::FAILURE;
1448 TGraph* g =
reinterpret_cast<TGraph*
>(e);
1449 std::string name = e->GetName();
1454 if (group.histo_mgmt() ==
ATTRIB_X_VS_LB && group.merge().empty()) {
1455 ATH_MSG_WARNING(
"HEY! Attempting to register "<<name<<
" as a per-LB histogram, but not setting the merge algorithm! Use \"merge\", at least.");
1462 return StatusCode::FAILURE;
1468 return m_THistSvc->regGraph( streamName, g );
1473 m_manager->writeAndDelete( genericName );
1474 m_manager->passOwnership( e, genericName );
1479 if (smd != StatusCode::SUCCESS)
1480 return StatusCode::FAILURE;
1482 return m_THistSvc->regGraph( streamName, g );
1489regGraph( TGraph* g,
const std::string& system,
1492 MonGroup group(
this, system, interval, histo_mgmt, chain,
merge );
1502 return StatusCode::FAILURE;
1515 return StatusCode::FAILURE;
1518 std::string name = g->GetName();
1521 return m_THistSvc->regGraph( streamName, g );
1526 std::string gName = g->GetName();
1530 m_manager->writeAndDelete( genericName );
1531 m_manager->passOwnership( g, genericName );
1537 if (smd != StatusCode::SUCCESS)
return StatusCode::FAILURE;
1539 return m_THistSvc->regGraph( streamName, g );
1545regTree( TTree* t,
const std::string& system,
1548 MonGroup group(
this, system, interval, histo_mgmt, chain,
merge );
1569 return StatusCode::FAILURE;
1572 std::string name = t->GetName();
1581 std::string tName = t->GetName();
1585 m_manager->writeAndDelete( genericName );
1586 m_manager->passOwnership( t, genericName );
1592 if (smd != StatusCode::SUCCESS)
return StatusCode::FAILURE;
1602 return StatusCode::FAILURE;
1604 std::string hName =
h->GetName();
1608 m_manager->writeAndDelete( genericName );
1610 return StatusCode::SUCCESS;
1632deregObject(
const std::string& objName,
const std::string& system,
1635 MonGroup group(
this, system, interval );
1656 return StatusCode::SUCCESS;
1664 return StatusCode::SUCCESS;
1674 return StatusCode::SUCCESS;
1696 return lumi->lbAverageInteractionsPerCrossing();
1699 ATH_MSG_DEBUG(
"Warning: lbAverageInteractionsPerCrossing() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1712 float muToLumi = lumi->muToLumi();
1714 return lumi->lbLuminosityPerBCIDVector().at (ctx.eventID().bunch_crossing_id()) / muToLumi;
1719 ATH_MSG_DEBUG(
"Warning: lbInteractionsPerCrossing() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1732 return lumi->lbAverageLuminosity();
1735 ATH_MSG_DEBUG(
"Warning: lbAverageLuminosity() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1748 return lumi->lbLuminosityPerBCIDVector().at (ctx.eventID().bunch_crossing_id());
1751 ATH_MSG_DEBUG(
"Warning: lbLuminosityPerBCID() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1768 return live->lbAverageLiveFraction();
1771 ATH_MSG_DEBUG(
"Warning: lbAverageLivefraction() - luminosity not availble (i.e. EnableLumi = False)");
1787 return live->l1LiveFractionVector().at (ctx.eventID().bunch_crossing_id());
1790 ATH_MSG_DEBUG(
"Warning: livefractionPerBCID() - luminosity retrieved available (i.e. EnableLumi = False)");
1805 ATH_MSG_DEBUG(
"Warning: lbLumiWeight() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1822 return dur->lbDuration();
1825 ATH_MSG_DEBUG(
"Warning: lbDuration() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1872fill(
const std::string& name,
1875 std::string trigger,
1882 if( trigger.empty() )
1885 merge =
"<default>";
1898copyString(
char* to,
const std::string& from )
1901 const char* f = from.c_str();
1913 std::ostringstream streamName;
1917 streamName << group.system() <<
"/" << objName;
1918 return streamName.str();
1925 std::string streamName =
getStreamName(tool, group, objName, usePreviousInterval);
1926 std::string root, rem;
1930 rem.erase(rem.rfind(
'/'), rem.length());
1939 std::ostringstream streamName;
1940 streamName << group.system() <<
"/" << objName;
1941 return streamName.str();
1949 return getStreamName(tool, group, objName, usePreviousInterval);
1956 std::ostringstream streamName;
1963 streamName << group.system() <<
"/" << objName;
1964 return streamName.str();
1971 return getStreamName(tool, group, objName, usePreviousInterval);
1979 *end = *start +
length - 1;
1987 std::ostringstream streamName;
1990 bool isTemp =
false;
1992 bool useRunFolders = group.interval() !=
all;
1994 bool useLBFolders = ( useRunFolders )
1997 bool useLowStatInterval = ( useRunFolders )
2000 bool useMedStatInterval = ( useRunFolders )
2003 bool useHigStatInterval = ( useRunFolders )
2012 if( useRunFolders ) {
2020 if( useLBFolders ) {
2024 streamName <<
"lb_" << currentLB <<
"/";
2026 else if( useLowStatInterval ) {
2032 streamName <<
"lowStat_LB" << start <<
"-" << end <<
"/";
2034 else if( useMedStatInterval ) {
2037 streamName <<
"medStat_LB" << start <<
"-" << end <<
"/";
2039 else if( useHigStatInterval ) {
2042 streamName <<
"higStat_LB" << start <<
"-" << end <<
"/";
2044 else if( useEBFolders ) {
2049 long eventsBlockNumber = 1;
2050 long procNEventsProp = tool->get_procNEventsProp();
2051 unsigned int nEvents = tool->get_nEvents();
2052 if (procNEventsProp > 0) {
2053 eventsBlockNumber = (long)
nEvents / procNEventsProp;
2054 if ((
nEvents % procNEventsProp) != 0)
2055 eventsBlockNumber++;
2059 if (usePreviousInterval) {
2060 eventsBlockNumber--;
2063 streamName <<
"eb_" << eventsBlockNumber <<
"/";
2066 streamName << group.system() <<
"/" << objName;
2068 return streamName.str();
2075 std::string streamName =
getStreamName(tool, group, objName, usePreviousInterval);
2076 std::string root, rem;
2080 rem.erase(rem.rfind(
'/'), rem.length());
2095 ATH_MSG_DEBUG(
"ManagedMonitorToolBase::trigChainsArePassed:");
2097 for(
unsigned int i=0; i<vTrigNames.size(); i++) {
2099 ATH_MSG_DEBUG(
" + \"" << vTrigNames[i] <<
"\" passed, returning \'true\'");
2103 ATH_MSG_DEBUG(
" - \"" << vTrigNames[i] <<
"\" did not pass");
2114 std::stringstream
ss(line);
2116 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"ManagedMonitorToolBase::parseList:";
2118 while ( std::getline(
ss, item,
',') ) {
2119 std::stringstream iss(item);
2121 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" " << item;
2126 return StatusCode::SUCCESS;
2132 for (
size_t i = 0; i < vTrigChainNames.size(); ++i) {
2133 std::string& thisName = vTrigChainNames[i];
2134 if (thisName.compare(0, 9,
"CATEGORY_") ==0) {
2135 ATH_MSG_DEBUG(
"Found a trigger category: " << thisName <<
". We will unpack it.");
2136 std::vector<std::string> triggers =
m_trigTranslator->translate(thisName.substr(9,std::string::npos));
2137 std::ostringstream oss;
2139 for (
size_t itrig = 0; itrig < triggers.size(); ++itrig) {
2143 oss << triggers[itrig];
2147 std::string newval = oss.str();
2149 vTrigChainNames[i] = std::move(newval);
2184parseString(
const std::string& streamName, std::string& root, std::string& rem) {
2185 std::string::size_type pos = streamName.find(
'/');
2187 if (pos == std::string::npos) {
2194 parseString(streamName.substr(1,streamName.length()),root,rem);
2196 root = streamName.substr(0,pos);
2197 rem = streamName.substr(pos+1,streamName.length());
2224 std::string strToLower(
const std::string&
str )
2226 std::string lstr(
str);
2227 std::string::const_iterator from =
str.begin();
2228 std::string::const_iterator strend =
str.end();
2229 std::string::iterator to = lstr.begin();
2230 while( from != strend ) {
2238 std::string strToUpper(
const std::string& str )
2240 std::string ustr(str);
2241 std::string::const_iterator from =
str.begin();
2242 std::string::const_iterator strend =
str.end();
2243 std::string::iterator
to = ustr.begin();
2244 while( from != strend ) {
2245 *
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()