diff --git a/Control/AthenaMonitoring/AthenaMonitoring/AthenaMonManager.h b/Control/AthenaMonitoring/AthenaMonitoring/AthenaMonManager.h index 006522c53a626c8a6ac9bebc88af657d94e86e42..5241118f4732a11eaf4ee4d3f3297dc65eeef986 100755 --- a/Control/AthenaMonitoring/AthenaMonitoring/AthenaMonManager.h +++ b/Control/AthenaMonitoring/AthenaMonitoring/AthenaMonManager.h @@ -93,6 +93,7 @@ class AthenaMonManager : public AthAlgorithm { virtual StatusCode initialize(); virtual StatusCode execute(); + virtual StatusCode stop(); virtual StatusCode finalize(); virtual StatusCode beginRun(); @@ -127,7 +128,7 @@ class AthenaMonManager : public AthAlgorithm { private: // Use private implementation idiom for more flexible development. class Imp; - Imp *d; + Imp *m_d; }; #endif diff --git a/Control/AthenaMonitoring/AthenaMonitoring/ManagedMonitorToolBase.h b/Control/AthenaMonitoring/AthenaMonitoring/ManagedMonitorToolBase.h index 5da30d77d85d73bfad344bb1e4e98e9baf4f75b3..d97d44c16a3e937579f475be325f7243bf662ae9 100755 --- a/Control/AthenaMonitoring/AthenaMonitoring/ManagedMonitorToolBase.h +++ b/Control/AthenaMonitoring/AthenaMonitoring/ManagedMonitorToolBase.h @@ -703,19 +703,19 @@ class ManagedMonitorToolBase : public AthAlgTool, virtual public IMonitorToolBas protected: std::map< Interval_t, std::vector< MgmtParams<TH1> > > m_templateHistograms; // Runs over the vector of managed histograms, register clonned histogram and saves it to a file. - StatusCode regManagedHistograms(std::vector< MgmtParams<TH1> >& m_templateHistograms); + StatusCode regManagedHistograms(std::vector< MgmtParams<TH1> >& templateHistograms); std::map< Interval_t, std::vector< MgmtParams<TGraph> > > m_templateGraphs; // Runs over the vector of managed graphs, register clonned graph and saves it to a file. - StatusCode regManagedGraphs(std::vector< MgmtParams<TGraph> >& m_templateGraphs); + StatusCode regManagedGraphs(std::vector< MgmtParams<TGraph> >& templateGraphs); std::map< Interval_t, std::vector< MgmtParams<TTree> > > m_templateTrees; // Runs over the vector of managed trees, register clonned tree and saves it to a file. - StatusCode regManagedTrees(std::vector< MgmtParams<TTree> >& m_templateTrees); + StatusCode regManagedTrees(std::vector< MgmtParams<TTree> >& templateTrees); std::map< Interval_t, std::vector< MgmtParams<LWHist> > > m_templateLWHistograms; // Runs over the vector of managed histograms and register them (just a helper method). - StatusCode regManagedLWHistograms(std::vector< MgmtParams<LWHist> >& m_templateLWHistograms); + StatusCode regManagedLWHistograms(std::vector< MgmtParams<LWHist> >& templateLWHistograms); std::vector<std::string> m_vTrigChainNames, m_vTrigGroupNames; StatusCode parseList(const std::string&, std::vector<std::string>&); @@ -750,7 +750,7 @@ class ManagedMonitorToolBase : public AthAlgTool, virtual public IMonitorToolBas protected: void copyString( char* to, const std::string& from ); - const int charArrSize; + const int m_charArrSize; TTree* m_metadata; char* m_nameData; //char* m_levelData; @@ -824,6 +824,18 @@ class ManagedMonitorToolBase : public AthAlgTool, virtual public IMonitorToolBas bool endOfEventsBlock, endOfLowStat, endOfLumiBlock, endOfRun; + bool newLowStatIntervalFlag() const { return newLowStatInterval; } + bool newMedStatIntervalFlag() const { return newMedStatInterval; } + bool newHigStatIntervalFlag() const { return newHigStatInterval; } + bool newLowStatFlag() const { return newLowStat; } + bool newLumiBlockFlag() const { return newLumiBlock; } + bool newRunFlag() const { return newRun; } + bool newEventsBlockFlag() const { return newEventsBlock; } + bool endOfEventsBlockFlag() const { return endOfEventsBlock; } + bool endOfLowStatFlag() const { return endOfLowStat; } + bool endOfLumiBlockFlag() const { return endOfLumiBlock; } + bool endOfRunFlag() const { return endOfRun; } + typedef std::map<std::string,OutputMetadata*> MDMap_t; MDMap_t m_metadataMap; @@ -887,12 +899,12 @@ class ManagedMonitorToolBase : public AthAlgTool, virtual public IMonitorToolBas bool m_hasRetrievedLumiTool; bool m_bookHistogramsInitial; bool m_useLumi; - int m_cycleNum; + //int m_cycleNum; std::set<Interval_t> m_supportedIntervalsForRebooking; // Use private implementation idiom for more flexible development. class Imp; - Imp * d; + Imp * m_d; }; diff --git a/Control/AthenaMonitoring/AthenaMonitoring/MonitorToolBase.h b/Control/AthenaMonitoring/AthenaMonitoring/MonitorToolBase.h index 76668d2cf468a54ec15e2aece7cf7c419ea8a6c4..9a4346c4763a191cd1f018a95d19747d333c937b 100755 --- a/Control/AthenaMonitoring/AthenaMonitoring/MonitorToolBase.h +++ b/Control/AthenaMonitoring/AthenaMonitoring/MonitorToolBase.h @@ -82,7 +82,7 @@ class MonitorToolBase : public AthAlgTool, // multiple StreamNames std::vector<std::string> m_THistSvc_streamnameMapping; std::map<std::string,std::string> m_map_THistSvc_streamnames; - bool setupStreamMap; + bool m_setupStreamMap; std::string m_THistSvc_refStream; diff --git a/Control/AthenaMonitoring/cmt/requirements b/Control/AthenaMonitoring/cmt/requirements index 4918e1c935a1f58ea96a266e05e9bd717aecd64e..e095466620efe7b07b2ee5a213efaa77c37d4191 100755 --- a/Control/AthenaMonitoring/cmt/requirements +++ b/Control/AthenaMonitoring/cmt/requirements @@ -32,8 +32,8 @@ apply_pattern cmake_add_command command="find_package(ROOT COMPONENTS MathCore)" #macro_remove AtlasCxxPolicy_pp_cppflags "-DNDEBUG" #For testing that we don't have any alignment problems: #macro_append AtlasCxxPolicy_pp_cppflags "-Wpadded" -macro_append cppflags "-std=c++0x" -macro_append cpplinkflags "-std=c++0x" +#macro_append cppflags "-std=c++0x" +#macro_append cpplinkflags "-std=c++0x" end_private apply_pattern declare_joboptions files="*.py" diff --git a/Control/AthenaMonitoring/python/DQMonFlags.py b/Control/AthenaMonitoring/python/DQMonFlags.py index 161a246c517d2427daea24a24ed689b1ea28ecd9..e518d8de82af5a79bb6167af7edd3e924914db5d 100644 --- a/Control/AthenaMonitoring/python/DQMonFlags.py +++ b/Control/AthenaMonitoring/python/DQMonFlags.py @@ -234,7 +234,7 @@ class doStreamAwareMon(JobProperty): """ Switch for stream-aware monitoring """ statusOn=True allowedTypes=['bool'] - StoredValue=False + StoredValue=True list+=[doStreamAwareMon] class monType(JobProperty): diff --git a/Control/AthenaMonitoring/share/AtlasReadyFilterTool_jobOptions.py b/Control/AthenaMonitoring/share/AtlasReadyFilterTool_jobOptions.py index c05eacabd4ec01c77602a6003f5dd25c647f6556..8ec92fcebbef9b1be5d0ef926eafffefa6e23d63 100644 --- a/Control/AthenaMonitoring/share/AtlasReadyFilterTool_jobOptions.py +++ b/Control/AthenaMonitoring/share/AtlasReadyFilterTool_jobOptions.py @@ -1,3 +1,5 @@ +include.block('AthenaMonitoring/AtlasReadyFilterTool_jobOptions.py') + # Set up the ATLAS Ready filter tool from AthenaCommon.Logging import logging diff --git a/Control/AthenaMonitoring/share/DQMonFlagsConfig_jobOptions.py b/Control/AthenaMonitoring/share/DQMonFlagsConfig_jobOptions.py index 6e0258c0d3c1faab993a95a769883ca6fb904e29..7b803200f17d16c500e79149cd7283a82a20d5e4 100644 --- a/Control/AthenaMonitoring/share/DQMonFlagsConfig_jobOptions.py +++ b/Control/AthenaMonitoring/share/DQMonFlagsConfig_jobOptions.py @@ -259,17 +259,53 @@ if DQMonFlags.doStreamAwareMon: # So set them as false by default. Turn them on as needed LArMonFlags.doLArRODMonTool=False # savannah bug report #83390 LArMonFlags.doLArRawMonitorSignal=False + LArMonFlags.doLArRawChannelMon=False + LArMonFlags.doLArCollisionTimeMon=False + LArMonFlags.doLArAffectedRegions=False + LArMonFlags.doLArHVCorrectionMonTool=False + LArMonFlags.doLArCoverage=False + doCaloCellVecMon=False + + # The following are ON except for certain streams + LArMonFlags.doLArDigitMon=True + LArMonFlags.doLArNoisyROMon=True # All monitoring turned on for express stream (except LArRawChannelMon) # HIP runs will use the express settings for MinBias, MinBiasOverlay, HardProbes, bulk, and UPC - if (rec.triggerStream()=='express' or + if (rec.triggerStream()=='express' or rec.triggerStream()=='Main' or (rec.doHIP() and rec.triggerStream() in ['MinBias', 'MinBiasOverlay', 'HardProbes', 'bulk', 'UPC'])): - LArMonFlags.doLArRawChannelMon=False + LArMonFlags.doLArCollisionTimeMon=True + LArMonFlags.doLArAffectedRegions=True + LArMonFlags.doLArHVCorrectionMonTool=True + LArMonFlags.doLArCoverage=True LArMonFlags.doLArRODMonTool=True # savannah bug report #83390 + if (rec.triggerStream()=='express'): + doCaloCellVecMon=True elif (rec.triggerStream()=='CosmicCalo'): + LArMonFlags.doLArRawChannelMon=True LArMonFlags.doLArRawMonitorSignal=True + LArMonFlags.doLArAffectedRegions=True + LArMonFlags.doLArHVCorrectionMonTool=True + LArMonFlags.doLArCoverage=True + LArMonFlags.doLArDigitMon=False + doCaloCellVecMon=True HLTMonFlags.doBjet=False + HLTMonFlags.doEgamma=False + HLTMonFlags.doTau=False + HLTMonFlags.doJet=False + HLTMonFlags.doCalo=False + HLTMonFlags.doMuon=False + DQMonFlags.doTauMon=False + DQMonFlags.doPixelMon=False + DQMonFlags.doMuonRawMon=False + DQMonFlags.doMuonTrackMon=False + DQMonFlags.doMuonAlignMon=False + DQMonFlags.doMuonCombinedMon=False + DQMonFlags.doMuonSegmentMon=False + DQMonFlags.doMuonPhysicsMon=False + DQMonFlags.doMuonTrkPhysMon=False + DQMonFlags.doTRTMon=False DQMonFlags.doJetTagMon=False elif (rec.triggerStream()=='JetTauEtmiss'): DQMonFlags.doEgammaMon=False @@ -334,16 +370,10 @@ if DQMonFlags.doStreamAwareMon: DQMonFlags.doMuonPhysicsMon=False DQMonFlags.doCaloMon=False DQMonFlags.doJetTagMon=False - LArMonFlags.doLArRawChannelMon=False - LArMonFlags.doLArCollisionTimeMon=False - LArMonFlags.doLArAffectedRegions=False #LArMonFlags.doLArFEBMon=False - LArMonFlags.doLArHVCorrectionMonTool=False - LArMonFlags.doLArCoverage=False - LArMonFlags.doLArDigitMon=False - LArMonFlags.doLArNoisyROMon=False + #LArMonFlags.doLArDigitMon=False + #LArMonFlags.doLArNoisyROMon=False elif (rec.triggerStream()=='ZeroBias'): - DQMonFlags.doEgammaMon=False DQMonFlags.doTauMon=False HLTMonFlags.doBjet=False HLTMonFlags.doEgamma=False @@ -361,19 +391,34 @@ if DQMonFlags.doStreamAwareMon: DQMonFlags.doMuonTrkPhysMon=False DQMonFlags.doTRTMon=False DQMonFlags.doJetTagMon=False - LArMonFlags.doLArRawChannelMon=False - LArMonFlags.doLArCollisionTimeMon=False - LArMonFlags.doLArAffectedRegions=False + #LArMonFlags.doLArRawChannelMon=False + #LArMonFlags.doLArCollisionTimeMon=False + #LArMonFlags.doLArAffectedRegions=False #LArMonFlags.doLArFEBMon=False - LArMonFlags.doLArHVCorrectionMonTool=False - LArMonFlags.doLArCoverage=False - LArMonFlags.doLArDigitMon=False - LArMonFlags.doLArNoisyROMon=False - LArMonFlags.doLArRODMonTool=True # savannah bug report #83390 + #LArMonFlags.doLArHVCorrectionMonTool=False + #LArMonFlags.doLArCoverage=False + #LArMonFlags.doLArDigitMon=False + #LArMonFlags.doLArNoisyROMon=False + #LArMonFlags.doLArRODMonTool=True # savannah bug report #83390 + + elif (rec.triggerStream()=='L1Calo'): + HLTMonFlags.doBjet=False + HLTMonFlags.doMuon=False + DQMonFlags.doPixelMon=False + DQMonFlags.doMuonRawMon=False + DQMonFlags.doMuonTrackMon=False + DQMonFlags.doMuonAlignMon=False + DQMonFlags.doMuonCombinedMon=False + DQMonFlags.doMuonSegmentMon=False + DQMonFlags.doMuonPhysicsMon=False + DQMonFlags.doMuonTrkPhysMon=False + DQMonFlags.doTRTMon=False + DQMonFlags.doJetTagMon=False # Default stream-aware settings for unspecified streams # Only run a select few set of tools else: + #LArMonFlags.doLArRawChannelMon=False DQMonFlags.doEgammaMon=False DQMonFlags.doJetMon=False DQMonFlags.doMissingEtMon=False @@ -392,8 +437,12 @@ if DQMonFlags.doStreamAwareMon: else: local_logger.info("Stream-Aware monitoring is turned OFF") -# disabled until further notice 20140401 - PUEO -# DQMonFlags.doMuonRawMon=False +# If data type is '*comm' disable ATLAS Ready filter by default +if (rec.projectName.get_Value().endswith('_comm') and + not DQMonFlags.disableAtlasReadyFilter() + ): + local_logger.info("This is a commissioning project tag, will attempt to disable ATLAS Ready filter for monitoring tools. To really enable it, use DQMonFlags.disableAtlasReadyFilter.set_Value_and_Lock(False).") + DQMonFlags.disableAtlasReadyFilter=True DQMonFlags.lock_JobProperties() DQMonFlags.print_JobProperties() diff --git a/Control/AthenaMonitoring/share/DataQualitySteering_jobOptions.py b/Control/AthenaMonitoring/share/DataQualitySteering_jobOptions.py index 1f80b7d5685491fbde24b15045f8326d2c0dbea4..5547f1bfcb0c6d2b6fa197b362eacaf63baa0e2d 100644 --- a/Control/AthenaMonitoring/share/DataQualitySteering_jobOptions.py +++ b/Control/AthenaMonitoring/share/DataQualitySteering_jobOptions.py @@ -4,7 +4,7 @@ # $Id: DataQualitySteering_jobOptions.py,v 1.15 2009-05-05 08:20:08 sschaetz Exp $ # ******************************************************************************** -# disable InDetPerformanceMonitoring, JetMonitoring until further notice +# disable TRTEleMon until further notice # - PUEO 20140401 TRTELEMON=False @@ -255,9 +255,9 @@ if DQMonFlags.doMonitoring(): # monitoring tool if hasattr(tool, 'FilterTools'): # if express: use ATLAS Ready filter - local_logger.warning('Processing for tool %s', tool) + local_logger.debug('Setting up filters for tool %s', tool) if rec.triggerStream()=='express': - local_logger.warning('Stream is express and we will add ready tool') + local_logger.info('Stream is express and we will add ready tool for %s', tool) tool.FilterTools += [monAtlasReadyFilterTool] # give all the tools the trigger translator if DQMonFlags.useTrigger(): diff --git a/Control/AthenaMonitoring/src/AthenaMonManager.cxx b/Control/AthenaMonitoring/src/AthenaMonManager.cxx index 4f40bd905e7de4355508f5040cdbc6aaca2f5d1d..06a9b5fb042b09ba62b949f382cb36af135b822a 100755 --- a/Control/AthenaMonitoring/src/AthenaMonManager.cxx +++ b/Control/AthenaMonitoring/src/AthenaMonManager.cxx @@ -40,142 +40,147 @@ #include <vector> class AthenaMonManager::Imp { - public: - Imp(AthenaMonManager*man,const std::string& name) : m_theManager(man), - m_sgAudSvc(0), - m_isPrimaryManager(false), - m_everyNevents(-1), - m_eventCounter(-1), - m_fileKeyProp(name), - m_manualDataTypeSetupProp(false), - m_dataTypeProp("userDefined"), - m_environmentProp("user"), - m_LBsLowStatProp(10), - m_LBsMedStatProp(30), - m_LBsHigStatProp(90), - m_manualRunLBProp(false), - m_runProp(0), - m_lumiBlockProp(0), - m_nMonGroupCopies(0), - m_nActiveLWHists(0), - m_doResourceMon(false) {} - ~Imp() - { - std::map<IMonitorToolBase*,ToolBench*>::iterator it, itE; - - for (it=m_toolbenchmarks.begin(),itE=m_toolbenchmarks.end();it!=itE;++it) { - delete it->second; - } - - m_toolbenchmarks.clear(); - } - - //These were protected before we moved to a private implementation: - typedef std::map<std::string,TObject*> ObjMap_t; - ObjMap_t m_objMap; - - typedef std::map<std::string,LWHist*> ObjMapLW_t; - ObjMapLW_t m_objMapLW; - - AthenaMonManager * m_theManager; - ISGAudSvc * m_sgAudSvc; - - bool m_isPrimaryManager; - - long m_everyNevents; - long m_eventCounter; - - std::string m_fileKeyProp; - - bool m_manualDataTypeSetupProp; - std::string m_dataTypeProp; - std::string m_environmentProp; - unsigned int m_LBsLowStatProp, m_LBsMedStatProp, m_LBsHigStatProp; - - bool m_manualRunLBProp; - - unsigned int m_runProp; - unsigned int m_lumiBlockProp; - - unsigned m_nMonGroupCopies; - long m_nActiveLWHists; - - //NB: The LW hist leak checker is now also looking for - //inappropriate usage of MonGroup copy constructors (temporary - //until we outlaw copy/assignment of MonGroups): - class LWHistLeakChecker { - Imp * m_d; +public: + Imp(AthenaMonManager*man,const std::string& name) : m_theManager(man), + m_sgAudSvc(0), + m_isPrimaryManager(false), + m_everyNevents(-1), + m_eventCounter(-1), + m_fileKeyProp(name), + m_manualDataTypeSetupProp(false), + m_dataTypeProp("userDefined"), + m_environmentProp("user"), + m_LBsLowStatProp(10), + m_LBsMedStatProp(30), + m_LBsHigStatProp(90), + m_manualRunLBProp(false), + m_runProp(0), + m_lumiBlockProp(0), + m_nMonGroupCopies(0), + m_nActiveLWHists(0), + m_doResourceMon(false) {} + ~Imp() + { + std::map<IMonitorToolBase*,ToolBench*>::iterator it, itE; + + for (it=m_toolbenchmarks.begin(),itE=m_toolbenchmarks.end(); it!=itE; ++it) { + delete it->second; + } + + m_toolbenchmarks.clear(); + } + + //These were protected before we moved to a private implementation: + typedef std::map<std::string,TObject*> ObjMap_t; + ObjMap_t m_objMap; + + typedef std::map<std::string,LWHist*> ObjMapLW_t; + ObjMapLW_t m_objMapLW; + + AthenaMonManager * m_theManager; + ISGAudSvc * m_sgAudSvc; + + bool m_isPrimaryManager; + + long m_everyNevents; + long m_eventCounter; + + std::string m_fileKeyProp; + + bool m_manualDataTypeSetupProp; + std::string m_dataTypeProp; + std::string m_environmentProp; + unsigned int m_LBsLowStatProp, m_LBsMedStatProp, m_LBsHigStatProp; + + bool m_manualRunLBProp; + + unsigned int m_runProp; + unsigned int m_lumiBlockProp; + + unsigned m_nMonGroupCopies; + long m_nActiveLWHists; + + //NB: The LW hist leak checker is now also looking for + //inappropriate usage of MonGroup copy constructors (temporary + //until we outlaw copy/assignment of MonGroups): + class LWHistLeakChecker { + Imp * m_d; long m_initVal; - unsigned m_mgcopies_initval; - public: + unsigned m_mgcopies_initval; + public: LWHistLeakChecker(Imp*d) : m_d(d), m_initVal(LWHistStats::nActiveLWHists()), - m_mgcopies_initval(ManagedMonitorToolBase::MonGroup::ncopies()) {} + m_mgcopies_initval(ManagedMonitorToolBase::MonGroup::ncopies()) {} ~LWHistLeakChecker() - { m_d->m_nActiveLWHists += LWHistStats::nActiveLWHists()-m_initVal; - m_d->m_nMonGroupCopies += ManagedMonitorToolBase::MonGroup::ncopies()-m_mgcopies_initval; } - }; - - template<class T> void toolAudStart(const T&tool) { if (m_sgAudSvc) m_sgAudSvc->setFakeCurrentAlg(m_theManager->name()+"_MT_"+tool->name()); } - void toolAudEnd() { if (m_sgAudSvc) m_sgAudSvc->clearFakeCurrentAlg(); } - - bool m_doResourceMon; - class ToolBench{ - public: - ToolBench(IMonitorToolBase * t) : m_theTool(t) {} - const IMonitorToolBase * m_theTool; - AthMonBench m_bench_alginit_retrieve; - AthMonBench m_bench_algexec_fillHists;//NB: includes call to preselector - AthMonBench m_bench_algexec_checkHists; - AthMonBench m_bench_algexec_bookHists; - //NB: So far we don't check the call to runStat() - AthMonBench m_bench_algfin_finalHists; - AthMonBench m_bench_algfin_checkHists; - AthMonBench m_bench_algfin_convertLWHists; - void report(AthenaMonManager*a) { - MSG::Level l(AthMonBench::s_resourceMonThreshold); - a->msg(l)<<"Init ResourceSummary ["<<m_theTool->name()<<"] --> load/create/initialize : "<<m_bench_alginit_retrieve<<endreq; - m_bench_algexec_checkHists.setUnitCount(); - m_bench_algexec_bookHists.setUnitCount(); - a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> book : "<<m_bench_algexec_bookHists<<endreq; - a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> check : "<<m_bench_algexec_checkHists<<endreq; - a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> fill : "<<m_bench_algexec_fillHists<<endreq; - a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> finalHists : "<<m_bench_algfin_finalHists<<endreq; - a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> checkHists(fromFinalize==true) : "<<m_bench_algfin_checkHists<<endreq; - a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> final LWHist conversion+writeout : "<<m_bench_algfin_convertLWHists<<endreq; + { m_d->m_nActiveLWHists += LWHistStats::nActiveLWHists()-m_initVal; + m_d->m_nMonGroupCopies += ManagedMonitorToolBase::MonGroup::ncopies()-m_mgcopies_initval; + } + }; + + template<class T> void toolAudStart(const T&tool) { + if (m_sgAudSvc) m_sgAudSvc->setFakeCurrentAlg(m_theManager->name()+"_MT_"+tool->name()); } + void toolAudEnd() { + if (m_sgAudSvc) m_sgAudSvc->clearFakeCurrentAlg(); + } + + bool m_doResourceMon; + class ToolBench { + public: + ToolBench(IMonitorToolBase * t) : m_theTool(t) {} + const IMonitorToolBase * m_theTool; + AthMonBench m_bench_alginit_retrieve; + AthMonBench m_bench_algexec_fillHists;//NB: includes call to preselector + AthMonBench m_bench_algexec_checkHists; + AthMonBench m_bench_algexec_bookHists; + //NB: So far we don't check the call to runStat() + AthMonBench m_bench_algfin_finalHists; + AthMonBench m_bench_algfin_checkHists; + AthMonBench m_bench_algfin_convertLWHists; + void report(AthenaMonManager*a) { + MSG::Level l(AthMonBench::s_resourceMonThreshold); + a->msg(l)<<"Init ResourceSummary ["<<m_theTool->name()<<"] --> load/create/initialize : "<<m_bench_alginit_retrieve<<endreq; + m_bench_algexec_checkHists.setUnitCount(); + m_bench_algexec_bookHists.setUnitCount(); + a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> book : "<<m_bench_algexec_bookHists<<endreq; + a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> check : "<<m_bench_algexec_checkHists<<endreq; + a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> fill : "<<m_bench_algexec_fillHists<<endreq; + a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> finalHists : "<<m_bench_algfin_finalHists<<endreq; + a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> checkHists(fromFinalize==true) : "<<m_bench_algfin_checkHists<<endreq; + a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> final LWHist conversion+writeout : "<<m_bench_algfin_convertLWHists<<endreq; + } - }; - std::map<IMonitorToolBase*,ToolBench*> m_toolbenchmarks; - ToolBench* getToolBench(IMonitorToolBase* t) { - std::map<IMonitorToolBase*,ToolBench*>::iterator it = m_toolbenchmarks.find(t); - if (it==m_toolbenchmarks.end()) { - ToolBench*tb =new ToolBench(t); - m_toolbenchmarks[t] = tb; - return tb; + }; + std::map<IMonitorToolBase*,ToolBench*> m_toolbenchmarks; + ToolBench* getToolBench(IMonitorToolBase* t) { + std::map<IMonitorToolBase*,ToolBench*>::iterator it = m_toolbenchmarks.find(t); + if (it==m_toolbenchmarks.end()) { + ToolBench*tb =new ToolBench(t); + m_toolbenchmarks[t] = tb; + return tb; + } + return it->second; } - return it->second; - } - // The data below should be truly global for a job, and inheriting classes should - // not have the option of modifying them. - // The data are set from the corresponding m_* properties of the first AthenaMonManager - // in the Athena algorithm chain (this manager sets s_staticDataAreInit to true). + // The data below should be truly global for a job, and inheriting classes should + // not have the option of modifying them. + // The data are set from the corresponding m_* properties of the first AthenaMonManager + // in the Athena algorithm chain (this manager sets s_staticDataAreInit to true). - static ISvcLocator* s_svcLocator; + static ISvcLocator* s_svcLocator; - static bool s_staticDataAreInit; + static bool s_staticDataAreInit; - static std::string s_dataTypeStr; - static std::string s_environmentStr; - static DataType_t s_dataType; - static Environment_t s_environment; + static std::string s_dataTypeStr; + static std::string s_environmentStr; + static DataType_t s_dataType; + static Environment_t s_environment; - static unsigned int s_lumiBlock; - static unsigned int s_run; - static unsigned int s_fill; - static unsigned int s_LBsLowStat; - static unsigned int s_LBsMedStat; - static unsigned int s_LBsHigStat; + static unsigned int s_lumiBlock; + static unsigned int s_run; + static unsigned int s_fill; + static unsigned int s_LBsLowStat; + static unsigned int s_LBsMedStat; + static unsigned int s_LBsHigStat; }; ISvcLocator* AthenaMonManager::Imp::s_svcLocator(0); @@ -195,7 +200,7 @@ unsigned int AthenaMonManager::Imp::s_LBsMedStat(0); unsigned int AthenaMonManager::Imp::s_LBsHigStat(0); namespace { - std::string strToLower( const std::string& str ); +std::string strToLower( const std::string& str ); } // unnamed namespace @@ -204,42 +209,42 @@ namespace { // ********************************************************************* AthenaMonManager:: - AthenaMonManager( const std::string& name, ISvcLocator* pSvcLocator ) - : AthAlgorithm( name, pSvcLocator ), m_THistSvc(0), d(new Imp(this, name)) +AthenaMonManager( const std::string& name, ISvcLocator* pSvcLocator ) + : AthAlgorithm( name, pSvcLocator ), m_THistSvc(0), m_d(new Imp(this, name)) { - declareProperty( "AthenaMonTools", m_monTools ); - declareProperty( "CheckEveryNoEvents", d->m_everyNevents ); - declareProperty( "FileKey", d->m_fileKeyProp ); - declareProperty( "ManualDataTypeSetup", d->m_manualDataTypeSetupProp ); - declareProperty( "DataType", d->m_dataTypeProp ); - declareProperty( "Environment", d->m_environmentProp ); - declareProperty( "LBsInLowStatInterval", d->m_LBsLowStatProp ); - declareProperty( "LBsInMediumStatInterval", d->m_LBsMedStatProp ); - declareProperty( "LBsInHighStatInterval", d->m_LBsHigStatProp ); - declareProperty( "ManualRunLBSetup", d->m_manualRunLBProp ); - declareProperty( "Run", d->m_runProp ); - declareProperty( "LumiBlock", d->m_lumiBlockProp ); - - if( Imp::s_svcLocator==0 ) - Imp::s_svcLocator = pSvcLocator; + declareProperty( "AthenaMonTools", m_monTools ); + declareProperty( "CheckEveryNoEvents", m_d->m_everyNevents ); + declareProperty( "FileKey", m_d->m_fileKeyProp ); + declareProperty( "ManualDataTypeSetup", m_d->m_manualDataTypeSetupProp ); + declareProperty( "DataType", m_d->m_dataTypeProp ); + declareProperty( "Environment", m_d->m_environmentProp ); + declareProperty( "LBsInLowStatInterval", m_d->m_LBsLowStatProp ); + declareProperty( "LBsInMediumStatInterval", m_d->m_LBsMedStatProp ); + declareProperty( "LBsInHighStatInterval", m_d->m_LBsHigStatProp ); + declareProperty( "ManualRunLBSetup", m_d->m_manualRunLBProp ); + declareProperty( "Run", m_d->m_runProp ); + declareProperty( "LumiBlock", m_d->m_lumiBlockProp ); + + if( Imp::s_svcLocator==0 ) + Imp::s_svcLocator = pSvcLocator; } AthenaMonManager:: ~AthenaMonManager() { - if (d->m_nActiveLWHists) - msg(MSG::WARNING) << d->m_nActiveLWHists<< " LW histograms were created but never deleted" << endreq; - /* - if (d->m_nMonGroupCopies) - msg(MSG::WARNING) << "Usage of MonGroup copy constructor or assignment operator detected in associated tools " - << d->m_nMonGroupCopies<<" time(s). This usually happens when tools pass MonGroup's around by" - <<" value. This behaviour will be forbidden at the compilation stage soon, so please fix your packages!" << endreq; - */ - delete d; - - // If it is known that ManagedMonitorToolBase objects are deleted _after_ this object, - // then one should call setMonManager(0) on each of them. + if (m_d->m_nActiveLWHists) + msg(MSG::WARNING) << m_d->m_nActiveLWHists<< " LW histograms were created but never deleted" << endreq; + /* + if (m_d->m_nMonGroupCopies) + msg(MSG::WARNING) << "Usage of MonGroup copy constructor or assignment operator detected in associated tools " + << m_d->m_nMonGroupCopies<<" time(s). This usually happens when tools pass MonGroup's around by" + <<" value. This behaviour will be forbidden at the compilation stage soon, so please fix your packages!" << endreq; + */ + delete m_d; + + // If it is known that ManagedMonitorToolBase objects are deleted _after_ this object, + // then one should call setMonManager(0) on each of them. } @@ -247,36 +252,36 @@ AthenaMonManager::Environment_t AthenaMonManager:: envStringToEnum( const std::string& str ) { - std::string lcstr( strToLower(str) ); - - if( lcstr == "user" ) - return user; - else if( lcstr == "nooutput" ) - return noOutput; - else if( lcstr == "online" ) - return online; - else if( lcstr == "tier0" ) - return tier0; - else if( lcstr == "tier0raw" ) - return tier0Raw; - else if( lcstr == "tier0esd" ) - return tier0ESD; - else if( lcstr == "aod" ) - return AOD; - else if( lcstr == "altprod" ) - return altprod; - - if( Imp::s_svcLocator!=0 ) { - IMessageSvc* ms(0); - StatusCode sc = Imp::s_svcLocator->service( "MessageSvc", ms, true ); - if( sc.isSuccess() ) { - MsgStream log( ms, "AthenaMonManager::envStringToEnum()" ); - log << MSG::WARNING << "Unknown AthenaMonManager::Environment_t \"" - << str << "\", returning \"user\"" << endreq; - } - } - - return user; + std::string lcstr( strToLower(str) ); + + if( lcstr == "user" ) + return user; + else if( lcstr == "nooutput" ) + return noOutput; + else if( lcstr == "online" ) + return online; + else if( lcstr == "tier0" ) + return tier0; + else if( lcstr == "tier0raw" ) + return tier0Raw; + else if( lcstr == "tier0esd" ) + return tier0ESD; + else if( lcstr == "aod" ) + return AOD; + else if( lcstr == "altprod" ) + return altprod; + + if( Imp::s_svcLocator!=0 ) { + IMessageSvc* ms(0); + StatusCode sc = Imp::s_svcLocator->service( "MessageSvc", ms, true ); + if( sc.isSuccess() ) { + MsgStream log( ms, "AthenaMonManager::envStringToEnum()" ); + log << MSG::WARNING << "Unknown AthenaMonManager::Environment_t \"" + << str << "\", returning \"user\"" << endreq; + } + } + + return user; } @@ -284,30 +289,30 @@ AthenaMonManager::DataType_t AthenaMonManager:: dataTypeStringToEnum( const std::string& str ) { - std::string lcstr( strToLower(str) ); - - if( lcstr == "userdefined" ) - return userDefined; - else if( lcstr == "montecarlo" ) - return monteCarlo; - else if( lcstr == "collisions" ) - return collisions; - else if( lcstr == "cosmics" ) - return cosmics; - else if( lcstr == "heavyioncollisions" ) - return heavyIonCollisions; - - if( Imp::s_svcLocator!=0 ) { - IMessageSvc* ms(0); - StatusCode sc = Imp::s_svcLocator->service( "MessageSvc", ms, true ); - if( sc.isSuccess() ) { - MsgStream log( ms, "AthenaMonManager::dataTypeStringToEnum()" ); - log << MSG::WARNING << "Unknown AthenaMonManager::DataType_t \"" - << str << "\", returning \"userDefined\"" << endreq; - } - } - - return userDefined; + std::string lcstr( strToLower(str) ); + + if( lcstr == "userdefined" ) + return userDefined; + else if( lcstr == "montecarlo" ) + return monteCarlo; + else if( lcstr == "collisions" ) + return collisions; + else if( lcstr == "cosmics" ) + return cosmics; + else if( lcstr == "heavyioncollisions" ) + return heavyIonCollisions; + + if( Imp::s_svcLocator!=0 ) { + IMessageSvc* ms(0); + StatusCode sc = Imp::s_svcLocator->service( "MessageSvc", ms, true ); + if( sc.isSuccess() ) { + MsgStream log( ms, "AthenaMonManager::dataTypeStringToEnum()" ); + log << MSG::WARNING << "Unknown AthenaMonManager::DataType_t \"" + << str << "\", returning \"userDefined\"" << endreq; + } + } + + return userDefined; } @@ -315,18 +320,24 @@ AthenaMonManager::Environment_t AthenaMonManager:: environment() { - return Imp::s_environment; + return Imp::s_environment; } -unsigned int AthenaMonManager::getLBsLowStat() { return Imp::s_LBsLowStat; } -unsigned int AthenaMonManager::getLBsMedStat() { return Imp::s_LBsMedStat; } -unsigned int AthenaMonManager::getLBsHigStat() { return Imp::s_LBsHigStat; } +unsigned int AthenaMonManager::getLBsLowStat() { + return Imp::s_LBsLowStat; +} +unsigned int AthenaMonManager::getLBsMedStat() { + return Imp::s_LBsMedStat; +} +unsigned int AthenaMonManager::getLBsHigStat() { + return Imp::s_LBsHigStat; +} AthenaMonManager::DataType_t AthenaMonManager:: dataType() { - return Imp::s_dataType; + return Imp::s_dataType; } @@ -334,7 +345,7 @@ unsigned int AthenaMonManager:: lumiBlockNumber() { - return Imp::s_lumiBlock; + return Imp::s_lumiBlock; } @@ -342,7 +353,7 @@ unsigned int AthenaMonManager:: runNumber() { - return Imp::s_run; + return Imp::s_run; } @@ -350,7 +361,7 @@ unsigned int AthenaMonManager:: fillNumber() { - return Imp::s_fill; + return Imp::s_fill; } @@ -358,107 +369,107 @@ StatusCode AthenaMonManager:: initialize() { - Imp::LWHistLeakChecker lc(d); - - //typedef std::vector<IMonitorToolBase*> MonList_t; - //typedef MonList_t::iterator MonIter_t; - - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::initialize():" << endreq; - - if (Imp::s_svcLocator->service("SGAudSvc", d->m_sgAudSvc, false/*do not create*/).isFailure()) - d->m_sgAudSvc=0; - - - d->m_doResourceMon = msgLvl(AthMonBench::s_resourceMonThreshold); - - StatusCode sc; - sc.setChecked(); - - sc = service( "THistSvc", m_THistSvc, true ); - if( !sc.isSuccess() ) { - msg(MSG::ERROR) << "!! Unable to locate the THistSvc service !!" << endreq; - return sc; - } - - if( !Imp::s_staticDataAreInit ) { - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Initializing static data" << endreq; - - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << " * \"ManualDataTypeSetup\" = " << d->m_manualDataTypeSetupProp << endreq; - } - - if( d->m_manualDataTypeSetupProp ) { - Imp::s_dataTypeStr = d->m_dataTypeProp; - Imp::s_dataType = dataTypeStringToEnum( d->m_dataTypeProp ); - } - else { - Imp::s_dataTypeStr = d->m_dataTypeProp; - Imp::s_dataType = dataTypeStringToEnum( d->m_dataTypeProp ); - } - - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"DataType\" = " << Imp::s_dataType << endreq; - - Imp::s_environmentStr = d->m_environmentProp; - Imp::s_environment = envStringToEnum( d->m_environmentProp ); - - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"Environment\" = " << Imp::s_environment << endreq; - - Imp::s_LBsLowStat = d->m_LBsLowStatProp; - Imp::s_LBsMedStat = d->m_LBsMedStatProp; - Imp::s_LBsHigStat = d->m_LBsHigStatProp; - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << " * \"LBsInLowStatInterval\" = " << Imp::s_LBsLowStat << endreq; - msg(MSG::DEBUG) << " * \"LBsInMediumStatInterval\" = " << Imp::s_LBsMedStat << endreq; - msg(MSG::DEBUG) << " * \"LBsInHighStatInterval\" = " << Imp::s_LBsHigStat << endreq; - } - - d->m_isPrimaryManager = true; - Imp::s_staticDataAreInit = true; - - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"ManualRunLBSetup\" = " << d->m_manualRunLBProp << endreq; - - if( d->m_manualRunLBProp ) { - Imp::s_run = d->m_runProp; - Imp::s_lumiBlock = d->m_lumiBlockProp; - if (msgLvl(MSG::DEBUG)) - msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endreq; - } else { - if (msgLvl(MSG::DEBUG)) - msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endreq; - } - } - - // Ensure consistency among all managers - d->m_dataTypeProp = Imp::s_dataTypeStr; - d->m_environmentProp = Imp::s_environmentStr; - - // Provide a virtual Algorithm with a subset of the properties - IJobOptionsSvc* joSvc = 0; - sc = service( "JobOptionsSvc", joSvc ); - if( !sc.isSuccess() ) { - msg(MSG::ERROR) << "!! Unable to locate the JobOptionsSvc service !!" << endreq; - return sc; - } - ATH_MSG_DEBUG(" --> Found service \"JobOptionsSvc\""); - - std::string client = name() + std::string("Properties"); - ATH_MSG_DEBUG(" --> Adding properties under name \"" << client << "\""); - StatusCode sc1 = joSvc->addPropertyToCatalogue( client, StringProperty("FileKey",d->m_fileKeyProp) ); - StatusCode sc2 = joSvc->addPropertyToCatalogue( client, StringProperty("DataType",d->m_dataTypeProp) ); - StatusCode sc3 = joSvc->addPropertyToCatalogue( client, StringProperty("Environment",d->m_environmentProp) ); - joSvc->release(); - if( !(sc1.isSuccess() && sc2.isSuccess() && sc3.isSuccess()) ) { - msg(MSG::ERROR) << "!! Unable to add properties to JobOptionsSvc service !!" << endreq; - return StatusCode::FAILURE; - } - ATH_MSG_DEBUG(" --> Added Properties"); - - //Determine (globally for now), whether or not LW histograms use a - //ROOT backend (necessary for online monitoring, and perhaps for - //debugging): - bool root_backend_for_lwhists = (environment()==AthenaMonManager::online); - if( root_backend_for_lwhists != LWHistControls::hasROOTBackend() ) - LWHistControls::setROOTBackend(root_backend_for_lwhists); + Imp::LWHistLeakChecker lc(m_d); + + //typedef std::vector<IMonitorToolBase*> MonList_t; + //typedef MonList_t::iterator MonIter_t; + + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::initialize():" << endreq; + + if (Imp::s_svcLocator->service("SGAudSvc", m_d->m_sgAudSvc, false/*do not create*/).isFailure()) + m_d->m_sgAudSvc=0; + + + m_d->m_doResourceMon = msgLvl(AthMonBench::s_resourceMonThreshold); + + StatusCode sc; + sc.setChecked(); + + sc = service( "THistSvc", m_THistSvc, true ); + if( !sc.isSuccess() ) { + msg(MSG::ERROR) << "!! Unable to locate the THistSvc service !!" << endreq; + return sc; + } + + if( !Imp::s_staticDataAreInit ) { + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Initializing static data" << endreq; + + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " * \"ManualDataTypeSetup\" = " << m_d->m_manualDataTypeSetupProp << endreq; + } + + if( m_d->m_manualDataTypeSetupProp ) { + Imp::s_dataTypeStr = m_d->m_dataTypeProp; + Imp::s_dataType = dataTypeStringToEnum( m_d->m_dataTypeProp ); + } + else { + Imp::s_dataTypeStr = m_d->m_dataTypeProp; + Imp::s_dataType = dataTypeStringToEnum( m_d->m_dataTypeProp ); + } + + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"DataType\" = " << Imp::s_dataType << endreq; + + Imp::s_environmentStr = m_d->m_environmentProp; + Imp::s_environment = envStringToEnum( m_d->m_environmentProp ); + + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"Environment\" = " << Imp::s_environment << endreq; + + Imp::s_LBsLowStat = m_d->m_LBsLowStatProp; + Imp::s_LBsMedStat = m_d->m_LBsMedStatProp; + Imp::s_LBsHigStat = m_d->m_LBsHigStatProp; + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " * \"LBsInLowStatInterval\" = " << Imp::s_LBsLowStat << endreq; + msg(MSG::DEBUG) << " * \"LBsInMediumStatInterval\" = " << Imp::s_LBsMedStat << endreq; + msg(MSG::DEBUG) << " * \"LBsInHighStatInterval\" = " << Imp::s_LBsHigStat << endreq; + } + + m_d->m_isPrimaryManager = true; + Imp::s_staticDataAreInit = true; + + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"ManualRunLBSetup\" = " << m_d->m_manualRunLBProp << endreq; + + if( m_d->m_manualRunLBProp ) { + Imp::s_run = m_d->m_runProp; + Imp::s_lumiBlock = m_d->m_lumiBlockProp; + if (msgLvl(MSG::DEBUG)) + msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endreq; + } else { + if (msgLvl(MSG::DEBUG)) + msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endreq; + } + } + + // Ensure consistency among all managers + m_d->m_dataTypeProp = Imp::s_dataTypeStr; + m_d->m_environmentProp = Imp::s_environmentStr; + + // Provide a virtual Algorithm with a subset of the properties + IJobOptionsSvc* joSvc = 0; + sc = service( "JobOptionsSvc", joSvc ); + if( !sc.isSuccess() ) { + msg(MSG::ERROR) << "!! Unable to locate the JobOptionsSvc service !!" << endreq; + return sc; + } + ATH_MSG_DEBUG(" --> Found service \"JobOptionsSvc\""); + + std::string client = name() + std::string("Properties"); + ATH_MSG_DEBUG(" --> Adding properties under name \"" << client << "\""); + StatusCode sc1 = joSvc->addPropertyToCatalogue( client, StringProperty("FileKey",m_d->m_fileKeyProp) ); + StatusCode sc2 = joSvc->addPropertyToCatalogue( client, StringProperty("DataType",m_d->m_dataTypeProp) ); + StatusCode sc3 = joSvc->addPropertyToCatalogue( client, StringProperty("Environment",m_d->m_environmentProp) ); + joSvc->release(); + if( !(sc1.isSuccess() && sc2.isSuccess() && sc3.isSuccess()) ) { + msg(MSG::ERROR) << "!! Unable to add properties to JobOptionsSvc service !!" << endreq; + return StatusCode::FAILURE; + } + ATH_MSG_DEBUG(" --> Added Properties"); + + //Determine (globally for now), whether or not LW histograms use a + //ROOT backend (necessary for online monitoring, and perhaps for + //debugging): + bool root_backend_for_lwhists = (environment()==AthenaMonManager::online); + if( root_backend_for_lwhists != LWHistControls::hasROOTBackend() ) + LWHistControls::setROOTBackend(root_backend_for_lwhists); // if( m_monTools.size() > 0 ) { // sc = m_monTools.retrieve(); @@ -469,40 +480,40 @@ initialize() // if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Retrieved AthenaMonTools" << endreq; // } - d->m_eventCounter = d->m_everyNevents; - - ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); - for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { - ToolHandle<IMonitorToolBase>& tool = *i; - d->toolAudStart(tool); - AthMonBench bench_tmp; - if (d->m_doResourceMon) - bench_tmp.startMeasurement(); - StatusCode sc_toolret = tool.retrieve(); - if (d->m_doResourceMon) - bench_tmp.finishMeasurement(); - d->toolAudEnd(); - if( sc_toolret.isFailure() ) { - msg(MSG::ERROR) << "Failed to retrieve monitoring tool " << tool << endreq; - return StatusCode::FAILURE; - } - else { - msg(MSG::INFO) << "Retrieved tool " << tool << endreq; - } - IMonitorToolBase* mon = tool.operator->(); - ManagedMonitorToolBase* managed = dynamic_cast<ManagedMonitorToolBase*>( mon ); - if( managed != 0 ) { - managed->setMonManager( this ); - } - if (d->m_doResourceMon) { - Imp::ToolBench* tb = d->getToolBench(mon); - tb->m_bench_alginit_retrieve = bench_tmp; - } - - } - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; - - return StatusCode::SUCCESS; + m_d->m_eventCounter = m_d->m_everyNevents; + + ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); + for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { + ToolHandle<IMonitorToolBase>& tool = *i; + m_d->toolAudStart(tool); + AthMonBench bench_tmp; + if (m_d->m_doResourceMon) + bench_tmp.startMeasurement(); + StatusCode sc_toolret = tool.retrieve(); + if (m_d->m_doResourceMon) + bench_tmp.finishMeasurement(); + m_d->toolAudEnd(); + if( sc_toolret.isFailure() ) { + msg(MSG::ERROR) << "Failed to retrieve monitoring tool " << tool << endreq; + return StatusCode::FAILURE; + } + else { + msg(MSG::INFO) << "Retrieved tool " << tool << endreq; + } + IMonitorToolBase* mon = tool.operator->(); + ManagedMonitorToolBase* managed = dynamic_cast<ManagedMonitorToolBase*>( mon ); + if( managed != 0 ) { + managed->setMonManager( this ); + } + if (m_d->m_doResourceMon) { + Imp::ToolBench* tb = m_d->getToolBench(mon); + tb->m_bench_alginit_retrieve = bench_tmp; + } + + } + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; + + return StatusCode::SUCCESS; } @@ -510,107 +521,107 @@ StatusCode AthenaMonManager:: execute() { - Imp::LWHistLeakChecker lc(d); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::execute():" << endreq; - - StatusCode sc; - sc.setChecked(); - - if( !d->m_manualRunLBProp ) { - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Calling setEventInfo()" << endreq; - setEventInfo(); - } - - ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); - for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { - ToolHandle<IMonitorToolBase>& tool = *i; - d->toolAudStart(tool); - AthMonBench bench_tmp; - if (d->m_doResourceMon) - bench_tmp.startMeasurement(); - if( tool->preSelector() ) { - //if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> The tool is preSelector" << endreq; - - // Uncomment to test luminosity tools - // I don't know where exactly it must be placed exactly - // Yuriy - start - /* - IMonitorToolBase* mon = tool.operator->(); - ManagedMonitorToolBase* managed = dynamic_cast<ManagedMonitorToolBase*>( mon ); - - float avgmu = managed->lbAverageInteractionsPerCrossing(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Average mu: " << avgmu << endreq; - - float instmu = managed->lbInteractionsPerCrossing(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Instantaneous mu: " << instmu << endreq; - - float avglumi = managed->lbAverageLuminosity(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Average lumi: " << avglumi << endreq; - - float instlumi = managed->lbLuminosityPerBCID(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Instantaneous lumi: " << instlumi << endreq; - - double duration = managed->lbDuration(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Lumiblock duration: " << duration << endreq; - - double live = managed->livefractionPerBCID(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, lumiinst livefraction: " << live << endreq; - - float lumilive = managed->lbAverageLivefraction(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, lumiavg livefraction: " << lumilive << endreq; - - double lumiweight = managed->lbLumiWeight(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Lumiblock weight: " << lumiweight << endreq; - */ - // Yuriy - end - - sc = tool->fillHists(); - - if( !sc.isSuccess() ) { - if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::fillHists() unsuccessful" << endreq; - } - } - - - if (d->m_doResourceMon) { - bench_tmp.finishMeasurement(); - Imp::ToolBench* tb = d->getToolBench(tool.operator->()); - tb->m_bench_algexec_fillHists += bench_tmp;//fixme: count events and subdivide - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> m_doResourceMon is True" << endreq; - } - d->toolAudEnd(); - } - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::fillHists()" << endreq; - - if( d->m_eventCounter > 0 ) { - d->m_eventCounter--; - } - else if( d->m_eventCounter == 0 ) { - for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { - ToolHandle<IMonitorToolBase>& tool = *i; - d->toolAudStart(tool); - AthMonBench bench_tmp; - - if (d->m_doResourceMon) - bench_tmp.startMeasurement(); - sc = tool->checkHists(false); - if (d->m_doResourceMon) { - bench_tmp.finishMeasurement(); - Imp::ToolBench* tb = d->getToolBench(tool.operator->()); - tb->m_bench_algexec_checkHists += bench_tmp;//fixme: count events and subdivide - } - if( !sc.isSuccess() ) { - if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endreq; - } - d->toolAudEnd(); - } - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::checkHists()" << endreq; + Imp::LWHistLeakChecker lc(m_d); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::execute():" << endreq; + + StatusCode sc; + sc.setChecked(); + + if( !m_d->m_manualRunLBProp ) { + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Calling setEventInfo()" << endreq; + setEventInfo(); + } + + ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); + for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { + ToolHandle<IMonitorToolBase>& tool = *i; + m_d->toolAudStart(tool); + AthMonBench bench_tmp; + if (m_d->m_doResourceMon) + bench_tmp.startMeasurement(); + if( tool->preSelector() ) { + //if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> The tool is preSelector" << endreq; + + // Uncomment to test luminosity tools + // I don't know where exactly it must be placed exactly + // Yuriy - start + /* + IMonitorToolBase* mon = tool.operator->(); + ManagedMonitorToolBase* managed = dynamic_cast<ManagedMonitorToolBase*>( mon ); + + float avgmu = managed->lbAverageInteractionsPerCrossing(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Average mu: " << avgmu << endreq; + + float instmu = managed->lbInteractionsPerCrossing(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Instantaneous mu: " << instmu << endreq; + + float avglumi = managed->lbAverageLuminosity(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Average lumi: " << avglumi << endreq; + + float instlumi = managed->lbLuminosityPerBCID(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Instantaneous lumi: " << instlumi << endreq; + + double duration = managed->lbDuration(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Lumiblock duration: " << duration << endreq; - d->m_eventCounter = d->m_everyNevents; - } - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; + double live = managed->livefractionPerBCID(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, lumiinst livefraction: " << live << endreq; + + float lumilive = managed->lbAverageLivefraction(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, lumiavg livefraction: " << lumilive << endreq; + + double lumiweight = managed->lbLumiWeight(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Test, Lumiblock weight: " << lumiweight << endreq; + */ + // Yuriy - end + + sc = tool->fillHists(); + + if( !sc.isSuccess() ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::fillHists() unsuccessful" << endreq; + } + } + + + if (m_d->m_doResourceMon) { + bench_tmp.finishMeasurement(); + Imp::ToolBench* tb = m_d->getToolBench(tool.operator->()); + tb->m_bench_algexec_fillHists += bench_tmp;//fixme: count events and subdivide + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> m_doResourceMon is True" << endreq; + } + m_d->toolAudEnd(); + } + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::fillHists()" << endreq; + + if( m_d->m_eventCounter > 0 ) { + m_d->m_eventCounter--; + } + else if( m_d->m_eventCounter == 0 ) { + for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { + ToolHandle<IMonitorToolBase>& tool = *i; + m_d->toolAudStart(tool); + AthMonBench bench_tmp; + + if (m_d->m_doResourceMon) + bench_tmp.startMeasurement(); + sc = tool->checkHists(false); + if (m_d->m_doResourceMon) { + bench_tmp.finishMeasurement(); + Imp::ToolBench* tb = m_d->getToolBench(tool.operator->()); + tb->m_bench_algexec_checkHists += bench_tmp;//fixme: count events and subdivide + } + if( !sc.isSuccess() ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endreq; + } + m_d->toolAudEnd(); + } + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::checkHists()" << endreq; - return StatusCode::SUCCESS; + m_d->m_eventCounter = m_d->m_everyNevents; + } + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; + + return StatusCode::SUCCESS; } @@ -618,50 +629,57 @@ StatusCode AthenaMonManager:: finalize() { - Imp::LWHistLeakChecker lc(d); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::finalize():" << endreq; - - StatusCode sc; - sc.setChecked(); - - ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); - for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { - ToolHandle<IMonitorToolBase>& tool = *i; - d->toolAudStart(tool); - Imp::ToolBench* tb = d->m_doResourceMon ? d->getToolBench(tool.operator->()) : 0; - if (tb) - tb->m_bench_algfin_finalHists.startMeasurement(); - sc = tool->finalHists(); - if (tb) - tb->m_bench_algfin_finalHists.finishMeasurement(); - if( !sc.isSuccess() ) { - if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::finalHists() unsuccessful" << endreq; - } - if (tb) - tb->m_bench_algfin_checkHists.startMeasurement(); - sc = tool->checkHists(true); - if (tb) - tb->m_bench_algfin_checkHists.finishMeasurement(); - if( !sc.isSuccess() ) { - if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endreq; - } - if (tb) - tb->m_bench_algfin_convertLWHists.startMeasurement(); - sc = tool->convertLWHists(); - if (tb) - tb->m_bench_algfin_convertLWHists.finishMeasurement(); - if( !sc.isSuccess() ) { - if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::convertLWHists() unsuccessful" << endreq; - } - if (tb) - tb->report(this); - d->toolAudEnd(); - } - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::finalHists() and IMonitorToolBase::checkHists()" << endreq; - msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; - } - return StatusCode::SUCCESS; + return StatusCode::SUCCESS; +} + +StatusCode +AthenaMonManager:: +stop() +{ + Imp::LWHistLeakChecker lc(m_d); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::finalize():" << endreq; + + StatusCode sc; + sc.setChecked(); + + ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); + for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { + ToolHandle<IMonitorToolBase>& tool = *i; + m_d->toolAudStart(tool); + Imp::ToolBench* tb = m_d->m_doResourceMon ? m_d->getToolBench(tool.operator->()) : 0; + if (tb) + tb->m_bench_algfin_finalHists.startMeasurement(); + sc = tool->finalHists(); + if (tb) + tb->m_bench_algfin_finalHists.finishMeasurement(); + if( !sc.isSuccess() ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::finalHists() unsuccessful" << endreq; + } + if (tb) + tb->m_bench_algfin_checkHists.startMeasurement(); + sc = tool->checkHists(true); + if (tb) + tb->m_bench_algfin_checkHists.finishMeasurement(); + if( !sc.isSuccess() ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endreq; + } + if (tb) + tb->m_bench_algfin_convertLWHists.startMeasurement(); + sc = tool->convertLWHists(); + if (tb) + tb->m_bench_algfin_convertLWHists.finishMeasurement(); + if( !sc.isSuccess() ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::convertLWHists() unsuccessful" << endreq; + } + if (tb) + tb->report(this); + m_d->toolAudEnd(); + } + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::finalHists() and IMonitorToolBase::checkHists()" << endreq; + msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; + } + return StatusCode::SUCCESS; } @@ -669,36 +687,36 @@ StatusCode AthenaMonManager:: beginRun() { - Imp::LWHistLeakChecker lc(d); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::beginRun():" << endreq; - - StatusCode sc; - sc.setChecked(); - - ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); - for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { - ToolHandle<IMonitorToolBase>& tool = *i; - d->toolAudStart(tool); - AthMonBench bench_tmp; - if (d->m_doResourceMon) - bench_tmp.startMeasurement(); - sc = tool->bookHists(); - if (d->m_doResourceMon) { - bench_tmp.finishMeasurement(); - Imp::ToolBench* tb = d->getToolBench(tool.operator->()); - tb->m_bench_algexec_bookHists += bench_tmp; - } - if( !sc.isSuccess() ) { - if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::bookHists() unsuccessful" << endreq; - } - d->toolAudEnd(); - } - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::bookHists()" << endreq; - msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; - } - - return StatusCode::SUCCESS; + Imp::LWHistLeakChecker lc(m_d); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::beginRun():" << endreq; + + StatusCode sc; + sc.setChecked(); + + ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); + for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { + ToolHandle<IMonitorToolBase>& tool = *i; + m_d->toolAudStart(tool); + AthMonBench bench_tmp; + if (m_d->m_doResourceMon) + bench_tmp.startMeasurement(); + sc = tool->bookHists(); + if (m_d->m_doResourceMon) { + bench_tmp.finishMeasurement(); + Imp::ToolBench* tb = m_d->getToolBench(tool.operator->()); + tb->m_bench_algexec_bookHists += bench_tmp; + } + if( !sc.isSuccess() ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::bookHists() unsuccessful" << endreq; + } + m_d->toolAudEnd(); + } + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::bookHists()" << endreq; + msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; + } + + return StatusCode::SUCCESS; } @@ -706,27 +724,27 @@ StatusCode AthenaMonManager:: endRun() { - Imp::LWHistLeakChecker lc(d); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::endRun():" << endreq; - - StatusCode sc; - sc.setChecked(); - - ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); - for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { - ToolHandle<IMonitorToolBase>& tool = *i; - d->toolAudStart(tool); - sc = tool->runStat(); - if( !sc.isSuccess() ) { - if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::runStat() unsuccessful" << endreq; - } - d->toolAudEnd(); - } - if (msgLvl(MSG::DEBUG)) { - msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::runStat()" << endreq; - msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; - } - return StatusCode::SUCCESS; + Imp::LWHistLeakChecker lc(m_d); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::endRun():" << endreq; + + StatusCode sc; + sc.setChecked(); + + ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end(); + for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) { + ToolHandle<IMonitorToolBase>& tool = *i; + m_d->toolAudStart(tool); + sc = tool->runStat(); + if( !sc.isSuccess() ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::runStat() unsuccessful" << endreq; + } + m_d->toolAudEnd(); + } + if (msgLvl(MSG::DEBUG)) { + msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::runStat()" << endreq; + msg(MSG::DEBUG) << " --> Exiting successfully" << endreq; + } + return StatusCode::SUCCESS; } @@ -734,7 +752,7 @@ std::string AthenaMonManager:: fileKey() const { - return d->m_fileKeyProp; + return m_d->m_fileKeyProp; } @@ -742,8 +760,8 @@ void AthenaMonManager:: passOwnership( TObject* h, const std::string& key ) { - Imp::ObjMap_t::value_type valToInsert( key, h ); - d->m_objMap.insert( valToInsert ); + Imp::ObjMap_t::value_type valToInsert( key, h ); + m_d->m_objMap.insert( valToInsert ); } @@ -751,8 +769,8 @@ void AthenaMonManager:: passOwnership( LWHist* h, const std::string& key ) { - Imp::ObjMapLW_t::value_type valToInsert( key, h ); - d->m_objMapLW.insert( valToInsert ); + Imp::ObjMapLW_t::value_type valToInsert( key, h ); + m_d->m_objMapLW.insert( valToInsert ); } @@ -761,8 +779,8 @@ LWHist * AthenaMonManager:: ownedLWHistOfKey(const std::string& key) const { - Imp::ObjMapLW_t::iterator iLW = d->m_objMapLW.find( key ); - return iLW == d->m_objMapLW.end() ? 0 : iLW->second; + Imp::ObjMapLW_t::iterator iLW = m_d->m_objMapLW.find( key ); + return iLW == m_d->m_objMapLW.end() ? 0 : iLW->second; } @@ -770,7 +788,7 @@ void AthenaMonManager:: writeAndDeleteLWHist( LWHist*lwh ) { - writeAndDeleteLWHist(LWHistAthMonWrapper::key(lwh),LWHistAthMonWrapper::streamName(lwh)); + writeAndDeleteLWHist(LWHistAthMonWrapper::key(lwh),LWHistAthMonWrapper::streamName(lwh)); } @@ -781,8 +799,8 @@ writeAndDeleteLWHist( const std::string& key, const std::string& streamName ) // std::cout<<"writeAndDeleteLWHist... maybe"<<std::endl; //If is owned LWHist we write it in a root file and deletes it + returns it's (now deallocated) address. - Imp::ObjMapLW_t::iterator iLW = d->m_objMapLW.find( key ); - if( iLW != d->m_objMapLW.end() ) + Imp::ObjMapLW_t::iterator iLW = m_d->m_objMapLW.find( key ); + if( iLW != m_d->m_objMapLW.end() ) { //Fixme: add private helper method actualWriteAndDelete(TH1*), to use by both... LWHist * lwhist =iLW->second; @@ -821,7 +839,7 @@ writeAndDeleteLWHist( const std::string& key, const std::string& streamName ) if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" << endreq; } - d->m_objMapLW.erase( iLW ); + m_d->m_objMapLW.erase( iLW ); lwhist->setOwnsROOTHisto(true);//Since we deregistered LWHistAthMonWrapper::deleteLWHist(lwhist); lwhist=0; @@ -840,8 +858,8 @@ writeAndResetLWHist( const std::string& key, const std::string& streamName ) // std::cout<<"writeAndDeleteLWHist... maybe"<<std::endl; //If is owned LWHist we write it in a root file and deletes it + returns it's (now deallocated) address. - Imp::ObjMapLW_t::iterator iLW = d->m_objMapLW.find( key ); - if( iLW != d->m_objMapLW.end() ) + Imp::ObjMapLW_t::iterator iLW = m_d->m_objMapLW.find( key ); + if( iLW != m_d->m_objMapLW.end() ) { //Fixme: add private helper method actualWriteAndDelete(TH1*), to use by both... LWHist * lwhist =iLW->second; @@ -880,7 +898,7 @@ writeAndResetLWHist( const std::string& key, const std::string& streamName ) if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" << endreq; } - d->m_objMapLW.erase( iLW ); + m_d->m_objMapLW.erase( iLW ); lwhist->setOwnsROOTHisto(true);//Since we deregistered //LWHistAthMonWrapper::deleteLWHist(lwhist); @@ -905,36 +923,36 @@ void AthenaMonManager:: writeAndDelete( const std::string& key ) { - // If is owned TObject, we deregister from THistSvc, write it in a - // root file, and delete it. - - Imp::ObjMap_t::iterator i = d->m_objMap.find( key ); - if( i != d->m_objMap.end() ) { - TObject* o = i->second; - TH1* h = dynamic_cast<TH1*>( o ); - if( h != 0 ) { - // By default, ROOT does its own bookkeeping of references to - // histograms, and this leads to a significant amount of time - // spent in the TObject d'tor when there are >= O(1000) TDirectories. - // So, turn this bookkeeping off when deleting these histograms. - bool doRecursiveReferenceDelete = gROOT->MustClean(); - gROOT->SetMustClean(false); - TDirectory* dir = h->GetDirectory(); - TDirectory* g = gDirectory; - if( dir ) - dir->cd(); - h->Write(); - g->cd(); - - StatusCode sc = m_THistSvc->deReg( h ); - if( !sc.isSuccess() ) { - if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" << endreq; - } - delete o; - gROOT->SetMustClean(doRecursiveReferenceDelete); - d->m_objMap.erase( key ); - } - } + // If is owned TObject, we deregister from THistSvc, write it in a + // root file, and delete it. + + Imp::ObjMap_t::iterator i = m_d->m_objMap.find( key ); + if( i != m_d->m_objMap.end() ) { + TObject* o = i->second; + TH1* h = dynamic_cast<TH1*>( o ); + if( h != 0 ) { + // By default, ROOT does its own bookkeeping of references to + // histograms, and this leads to a significant amount of time + // spent in the TObject d'tor when there are >= O(1000) TDirectories. + // So, turn this bookkeeping off when deleting these histograms. + bool doRecursiveReferenceDelete = gROOT->MustClean(); + gROOT->SetMustClean(false); + TDirectory* dir = h->GetDirectory(); + TDirectory* g = gDirectory; + if( dir ) + dir->cd(); + h->Write(); + g->cd(); + + StatusCode sc = m_THistSvc->deReg( h ); + if( !sc.isSuccess() ) { + if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" << endreq; + } + delete o; + gROOT->SetMustClean(doRecursiveReferenceDelete); + m_d->m_objMap.erase( key ); + } + } } // ********************************************************************* @@ -943,25 +961,25 @@ writeAndDelete( const std::string& key ) void AthenaMonManager:: -setEventInfo() +setEventInfo() { - if( d->m_isPrimaryManager ) { - const DataHandle<EventInfo> evt; - const DataHandle<EventInfo> evtEnd; - StatusCode sc = evtStore()->retrieve( evt, evtEnd ); - - if( !sc.isSuccess() ) { - msg(MSG::ERROR) << "!! Unable to retrieve Event from StoreGate !!" << endreq; - return; - } + if( m_d->m_isPrimaryManager ) { + const DataHandle<EventInfo> evt; + const DataHandle<EventInfo> evtEnd; + StatusCode sc = evtStore()->retrieve( evt, evtEnd ); + + if( !sc.isSuccess() ) { + msg(MSG::ERROR) << "!! Unable to retrieve Event from StoreGate !!" << endreq; + return; + } - Imp::s_run = evt->event_ID()->run_number(); - Imp::s_lumiBlock = evt->event_ID()->lumi_block(); + Imp::s_run = evt->event_ID()->run_number(); + Imp::s_lumiBlock = evt->event_ID()->lumi_block(); - if (msgLvl(MSG::DEBUG)) - msg(MSG::DEBUG) << " --> setEventInfo: run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endreq; + if (msgLvl(MSG::DEBUG)) + msg(MSG::DEBUG) << " --> setEventInfo: run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endreq; - } + } } @@ -970,16 +988,16 @@ setEventInfo() // ********************************************************************* namespace { - std::string strToLower( const std::string& str ) - { - std::string lstr(str); - std::string::const_iterator from = str.begin(); - std::string::const_iterator strend = str.end(); - std::string::iterator to = lstr.begin(); - while( from != strend ) { - *to++ = tolower(*from++); - } - return lstr; - } +std::string strToLower( const std::string& str ) +{ + std::string lstr(str); + std::string::const_iterator from = str.begin(); + std::string::const_iterator strend = str.end(); + std::string::iterator to = lstr.begin(); + while( from != strend ) { + *to++ = tolower(*from++); + } + return lstr; +} } // unnamed namespace diff --git a/Control/AthenaMonitoring/src/ManagedMonitorToolBase.cxx b/Control/AthenaMonitoring/src/ManagedMonitorToolBase.cxx index a45881df8c3a37e547ed035587c2c47da4a20933..f4e4b7226eb3b3a74bdb85330a1c649a37a3a56f 100755 --- a/Control/AthenaMonitoring/src/ManagedMonitorToolBase.cxx +++ b/Control/AthenaMonitoring/src/ManagedMonitorToolBase.cxx @@ -182,7 +182,7 @@ ISvcLocator* ManagedMonitorToolBase::Imp::s_svcLocator(0); namespace { std::string strToLower( const std::string& str ); - std::string strToUpper( const std::string& str ); + //std::string strToUpper( const std::string& str ); } // unnamed namespace @@ -418,8 +418,8 @@ ManagedMonitorToolBase( const std::string & type, const std::string & name, , m_hasRetrievedLumiTool(false) , m_bookHistogramsInitial(false) , m_useLumi(false) - , m_cycleNum(0) - , d(new Imp(this)) + //, m_cycleNum(0) + , m_d(new Imp(this)) { // ManagedMonitorToolBase_resetHistStatistics(this); declareInterface<IMonitorToolBase>(this); @@ -478,7 +478,7 @@ ManagedMonitorToolBase:: i != mdend; ++i ) { delete (i->second); } - delete d; + delete m_d; } @@ -652,7 +652,7 @@ StatusCode ManagedMonitorToolBase:: initialize() { - d->m_warnAboutMissingInitialize = false; + m_d->m_warnAboutMissingInitialize = false; StatusCode sc = AthAlgTool::initialize(); if( !sc.isSuccess() ) @@ -660,7 +660,7 @@ initialize() ATH_MSG_DEBUG("ManagedMonitorToolBase::initialize():"); - d->m_doResourceMon = msgLvl(AthMonBench::s_resourceMonThreshold); + m_d->m_doResourceMon = msgLvl(AthMonBench::s_resourceMonThreshold); sc = m_THistSvc.retrieve(); if( !sc.isSuccess() ) { @@ -793,8 +793,8 @@ ManagedMonitorToolBase:: fillHists() { - if (d->m_warnAboutMissingInitialize) { - d->m_warnAboutMissingInitialize = false; + if (m_d->m_warnAboutMissingInitialize) { + m_d->m_warnAboutMissingInitialize = false; msg(MSG::WARNING) << "ManagedMonitorToolBase::initialize() never called from reimplementation!" << endreq; } @@ -870,13 +870,13 @@ fillHists() // Process histograms from the previous lumiBlock/run if( m_nEvents != 1 ) { - d->benchPreProcHistograms(); + m_d->benchPreProcHistograms(); sc0 = procHistograms(); - d->benchPostProcHistograms(); + m_d->benchPostProcHistograms(); sc0.setChecked(); } // Re-book new histograms - d->benchPreBookHistograms(); + m_d->benchPreBookHistograms(); if (!m_bookHistogramsInitial) { sc1 = bookHistograms(); @@ -897,7 +897,7 @@ fillHists() sc3 = bookHistogramsRecurrent( ); - d->benchPostBookHistograms(); + m_d->benchPostBookHistograms(); sc1.setChecked(); sc3.setChecked(); } @@ -919,10 +919,10 @@ fillHists() || (m_vTrigChainNames.size()>0 && trigChainsArePassed(m_vTrigChainNames)) || (m_vTrigGroupNames.size()>0 && trigChainsArePassed(m_vTrigGroupNames))) ) { ATH_MSG_DEBUG("Passed trigger, presumably"); - d->benchPreFillHistograms(); + m_d->benchPreFillHistograms(); StatusCode sc3 = fillHistograms(); m_haveClearedLastEventBlock = true; - d->benchPostFillHistograms(); + m_d->benchPostFillHistograms(); sc3.setChecked(); ++m_nEvents; } else { ATH_MSG_DEBUG("Failed trigger, presumably"); } @@ -979,7 +979,7 @@ registerMetadata(const std::string& streamName, const std::string& hName, StatusCode ManagedMonitorToolBase:: -regManagedHistograms(std::vector< MgmtParams<TH1> >& m_templateHistograms) +regManagedHistograms(std::vector< MgmtParams<TH1> >& templateHistograms) { // The method registers histograms with the THistSvc and saves them to file. @@ -995,7 +995,7 @@ regManagedHistograms(std::vector< MgmtParams<TH1> >& m_templateHistograms) // m_manager->writeAndDelete( genericName ); bool allIsOk = true; - for( std::vector< MgmtParams<TH1> >::iterator it = m_templateHistograms.begin(); it != m_templateHistograms.end(); ++it ) { + for( std::vector< MgmtParams<TH1> >::iterator it = templateHistograms.begin(); it != templateHistograms.end(); ++it ) { MonGroup group = (*it).m_group; // Get a handle to the histogram @@ -1083,12 +1083,12 @@ THistSvc_deReg_fixTGraph( TFile* file, TGraph* theGraph, std::string& directoryN StatusCode ManagedMonitorToolBase:: -regManagedGraphs(std::vector< MgmtParams<TGraph> >& m_templateGraphs) +regManagedGraphs(std::vector< MgmtParams<TGraph> >& templateGraphs) { // See the description for the regManagedHistograms method bool allIsOk = true; - for( std::vector< MgmtParams<TGraph> >::iterator it = m_templateGraphs.begin(); it != m_templateGraphs.end(); ++it ) { + for( std::vector< MgmtParams<TGraph> >::iterator it = templateGraphs.begin(); it != templateGraphs.end(); ++it ) { MonGroup group = (*it).m_group; // Get a handle to the graph @@ -1155,12 +1155,12 @@ regManagedGraphs(std::vector< MgmtParams<TGraph> >& m_templateGraphs) StatusCode ManagedMonitorToolBase:: -regManagedTrees(std::vector< MgmtParams<TTree> >& m_templateTrees) +regManagedTrees(std::vector< MgmtParams<TTree> >& templateTrees) { // See the description for the regManagedHistograms method bool allIsOk = true; - for( std::vector< MgmtParams<TTree> >::iterator it = m_templateTrees.begin(); it != m_templateTrees.end(); ++it ) { + for( std::vector< MgmtParams<TTree> >::iterator it = templateTrees.begin(); it != templateTrees.end(); ++it ) { MonGroup group = (*it).m_group; // Get a handle to the original tree @@ -1209,12 +1209,12 @@ regManagedTrees(std::vector< MgmtParams<TTree> >& m_templateTrees) StatusCode ManagedMonitorToolBase:: -regManagedLWHistograms(std::vector<MgmtParams<LWHist> >& m_templateLWHistograms) +regManagedLWHistograms(std::vector<MgmtParams<LWHist> >& templateLWHistograms) { StatusCode sc1; sc1.setChecked(); - for( std::vector< MgmtParams<LWHist> >::iterator it = m_templateLWHistograms.begin(); it != m_templateLWHistograms.end(); ++it ) { + for( std::vector< MgmtParams<LWHist> >::iterator it = templateLWHistograms.begin(); it != templateLWHistograms.end(); ++it ) { // Get histogram group MonGroup group = (*it).m_group; @@ -1235,7 +1235,7 @@ finalHists() // This assumes that the end of a file will naturally end a run, which is not always true. // A merging application run afterwards should be able to put parts of a run together. if( m_nEvents != 1 ) { - d->benchPreProcHistograms(); + m_d->benchPreProcHistograms(); // Set end flags for the LowStat, LumiBlock and Run variables. // This is needed to be used in the procHistograms method below. @@ -1245,10 +1245,12 @@ finalHists() endOfRun = true; StatusCode sc = procHistograms(); - + +/* StatusCode sc1( StatusCode::SUCCESS ); sc1.setChecked(); +#if 0 for (const auto interval: m_supportedIntervalsForRebooking) { //sc1 = regManagedHistograms(m_templateHistograms[interval], false); //sc1 = regManagedGraphs(m_templateGraphs[interval], false); @@ -1258,8 +1260,9 @@ finalHists() //sc1 = regManagedLWHistograms(m_templateLWHistograms[interval], false, true); sc1.setChecked(); } +*/ - d->benchPostProcHistograms(); + m_d->benchPostProcHistograms(); return sc; } return StatusCode::SUCCESS; @@ -1370,7 +1373,7 @@ regHist( TH1* h, const MonGroup& group ) MonGroup group_unmanaged( this, group.system(), group.interval(), ATTRIB_UNMANAGED, group.chain(), group.merge()); if (m_supportedIntervalsForRebooking.count(group.interval())) { - m_templateHistograms[group.interval()].push_back( MgmtParams<TH1>(h, group_unmanaged) ); + m_templateHistograms[group.interval()].push_back( MgmtParams<TH1>(h, group_unmanaged) ); } else { ATH_MSG_ERROR("Attempt to book managed histogram " << h->GetName() << " with invalid interval type " << intervalEnumToString(group.interval())); return StatusCode::FAILURE; @@ -1910,7 +1913,7 @@ lbDuration() ManagedMonitorToolBase::OutputMetadata:: OutputMetadata( TTree* metadata ) - : charArrSize(100) + : m_charArrSize(100) , m_metadata(metadata) , m_nameData(0) //, m_levelData(0) @@ -1918,11 +1921,11 @@ ManagedMonitorToolBase::OutputMetadata:: , m_triggerData(0) , m_mergeData(0) { - m_nameData = new char[charArrSize]; - //m_levelData = new char[charArrSize]; - m_intervalData = new char[charArrSize]; - m_triggerData = new char[charArrSize]; - m_mergeData = new char[charArrSize]; + m_nameData = new char[m_charArrSize]; + //m_levelData = new char[m_charArrSize]; + m_intervalData = new char[m_charArrSize]; + m_triggerData = new char[m_charArrSize]; + m_mergeData = new char[m_charArrSize]; m_metadata->Branch( "Name", m_nameData, "Name/C" ); //m_metadata->Branch( "LevelOfDetail", m_levelData, "LevelOfDetail/C" ); m_metadata->Branch( "Interval", m_intervalData, "Interval/C" ); @@ -1974,8 +1977,8 @@ copyString( char* to, const std::string& from ) { int i = 0; const char* f = from.c_str(); - while( (++i < charArrSize) && ((*to++ = *f++) != 0) ) {}; - if( i == charArrSize ) { + while( (++i < m_charArrSize) && ((*to++ = *f++) != 0) ) {}; + if( i == m_charArrSize ) { *to = 0; } } @@ -2302,6 +2305,7 @@ namespace { } +#if 0 std::string strToUpper( const std::string& str ) { std::string ustr(str); @@ -2313,6 +2317,7 @@ namespace { } return ustr; } +#endif } // unnamed namespace diff --git a/Control/AthenaMonitoring/src/MonitorToolBase.cxx b/Control/AthenaMonitoring/src/MonitorToolBase.cxx index 952f1ada4f321a0a30b97de1b533a2f7ac90e5f8..97200e62f479bbce4c3710744ad5fbc06c9fee33 100755 --- a/Control/AthenaMonitoring/src/MonitorToolBase.cxx +++ b/Control/AthenaMonitoring/src/MonitorToolBase.cxx @@ -32,7 +32,7 @@ MonitorToolBase::MonitorToolBase(const std::string & type, , m_rootsvc(0) , m_isBooked(false) , m_path("/stat") - , setupStreamMap(false) + , m_setupStreamMap(false) , m_LogFileName("my.default") , m_FormatString("") , m_preScale(1) @@ -71,7 +71,7 @@ MonitorToolBase::getStreamName(unsigned int number, bool useDefault /* =true */ { std::string str="empty"; // no trailing slash, histogram will be temporary - if( ! setupStreamMap) + if( ! m_setupStreamMap) if( ! this->setupOutputStreams().isSuccess()) { MsgStream log(msgSvc(), name ()); @@ -98,7 +98,7 @@ MonitorToolBase::getStreamName(std::string stream, bool useDefault /* = true */ { std::string str="empty"; // no trailing slash, histogram will be temporary - if( ! setupStreamMap) + if( ! m_setupStreamMap) if( ! this->setupOutputStreams().isSuccess() ) { MsgStream log(msgSvc(), name ()); @@ -184,7 +184,7 @@ MonitorToolBase::setupOutputStreams(std::vector<std::string> Mapping << endreq; } // don't call again - setupStreamMap=true; + m_setupStreamMap=true; return StatusCode::SUCCESS; }