From 2ae657dc0811613a9d6924faef39420989ed21ae Mon Sep 17 00:00:00 2001 From: Thijs Cornelissen <Thijs.Cornelissen@cern.ch> Date: Tue, 28 Apr 2015 19:08:13 +0200 Subject: [PATCH] Disable IDPerfMon+IDDiMuMon (AthenaMonitoring-02-01-16) 2015-04-28 Thijs Cornelissen <thijs.cornelissen@ cern.ch> * Disable IDPerfMon+IDDiMuMon * tag AthenaMonitoring-02-01-16 2015-04-27 Peter Onyisi <ponyisi AT cern.ch> * include Trigger Translator Simple tool * tag AthenaMonitoring-02-01-15 2015-04-24 Walter Lampl <walter.lampl@ cern.ch> * BadLBFilterTool.py: Fix Copy-paste error, default DB instance CONDBR2 * tag AthenaMonitoring-02-01-14 --- .../AthenaMonitoring/AthenaMonManager.h | 3 +- .../AthenaMonitoring/ITriggerTranslatorTool.h | 37 ++++ .../AthenaMonitoring/ManagedMonitorToolBase.h | 4 +- .../TriggerTranslatorSimple.h | 57 +++++++ .../python/BadLBFilterTool.py | 6 +- Control/AthenaMonitoring/python/DQMonFlags.py | 2 +- .../share/DQMonFlagsConfig_jobOptions.py | 5 +- .../share/TrigDecTool_jobOptions.py | 5 + .../AthenaMonitoring/src/AthenaMonManager.cxx | 161 +++++++++++++----- .../src/ManagedMonitorToolBase.cxx | 154 ++++++++--------- .../src/TriggerTranslatorSimple.cxx | 30 ++++ .../components/AthenaMonitoring_entries.cxx | 3 + 12 files changed, 336 insertions(+), 131 deletions(-) create mode 100755 Control/AthenaMonitoring/AthenaMonitoring/ITriggerTranslatorTool.h create mode 100755 Control/AthenaMonitoring/AthenaMonitoring/TriggerTranslatorSimple.h create mode 100644 Control/AthenaMonitoring/src/TriggerTranslatorSimple.cxx diff --git a/Control/AthenaMonitoring/AthenaMonitoring/AthenaMonManager.h b/Control/AthenaMonitoring/AthenaMonitoring/AthenaMonManager.h index 7231f976d6b..006522c53a6 100755 --- a/Control/AthenaMonitoring/AthenaMonitoring/AthenaMonManager.h +++ b/Control/AthenaMonitoring/AthenaMonitoring/AthenaMonManager.h @@ -112,7 +112,8 @@ class AthenaMonManager : public AthAlgorithm { virtual void writeAndDelete( const std::string& key ); virtual LWHist *ownedLWHistOfKey(const std::string& key) const; // If you know it is an LWHist use writeAndDeleteLWHist. The just deleted LWHist pointer will be returned (0 if nothing deleted) - virtual LWHist *writeAndDeleteLWHist( const std::string& key, const std::string& streamName, bool doDelete = true ); + virtual LWHist *writeAndDeleteLWHist( const std::string& key, const std::string& streamName ); + virtual LWHist *writeAndResetLWHist( const std::string& key, const std::string& streamName ); virtual void writeAndDeleteLWHist( LWHist*lwh ); diff --git a/Control/AthenaMonitoring/AthenaMonitoring/ITriggerTranslatorTool.h b/Control/AthenaMonitoring/AthenaMonitoring/ITriggerTranslatorTool.h new file mode 100755 index 00000000000..e1dd3ef7b72 --- /dev/null +++ b/Control/AthenaMonitoring/AthenaMonitoring/ITriggerTranslatorTool.h @@ -0,0 +1,37 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ITRIGGERTRANSLATORTOOL_H +#define ITRIGGERTRANSLATORTOOL_H + +#include "GaudiKernel/IAlgTool.h" +#include <vector> + + +// Declaration of the interface ID ( interface id, major version, minor version) +static const InterfaceID IID_ITriggerTranslatorTool("ITriggerTranslatorTool", 1 , 0); + + +// The interface implemented by concrete Monitoring tools. +// Concrete tools, derived from the MonitorToolBase base abstract +// class are controlled via this interface. +// +// @author Manuel Diaz <Manuel.Diaz.Gomez@cern.ch> + + +class ITriggerTranslatorTool : virtual public IAlgTool + +{ + public: + + // Retrieve interface ID + static const InterfaceID& interfaceID() { return IID_ITriggerTranslatorTool; } + + //Virtual destructor + virtual ~ITriggerTranslatorTool() {} + + // book & fill (pure virtual) + virtual const std::vector<std::string> translate(const std::string&) = 0; +}; +#endif diff --git a/Control/AthenaMonitoring/AthenaMonitoring/ManagedMonitorToolBase.h b/Control/AthenaMonitoring/AthenaMonitoring/ManagedMonitorToolBase.h index 59ffbc61b69..e701e66c222 100755 --- a/Control/AthenaMonitoring/AthenaMonitoring/ManagedMonitorToolBase.h +++ b/Control/AthenaMonitoring/AthenaMonitoring/ManagedMonitorToolBase.h @@ -19,6 +19,7 @@ #include "AthenaMonitoring/AthenaMonManager.h" #include "AthenaMonitoring/IMonitorToolBase.h" +#include "AthenaMonitoring/ITriggerTranslatorTool.h" #include "GaudiKernel/ToolHandle.h" #include "LumiBlockComps/ILuminosityTool.h" @@ -714,7 +715,7 @@ class ManagedMonitorToolBase : public AthAlgTool, virtual public IMonitorToolBas 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, bool usePreviousInterval, bool doDelete=false); + StatusCode regManagedLWHistograms(std::vector< MgmtParams<LWHist> >& m_templateLWHistograms); std::vector<std::string> m_vTrigChainNames, m_vTrigGroupNames; StatusCode parseList(const std::string&, std::vector<std::string>&); @@ -842,6 +843,7 @@ class ManagedMonitorToolBase : public AthAlgTool, virtual public IMonitorToolBas ServiceHandle<ITHistSvc> m_THistSvc; ToolHandle<Trig::ITrigDecisionTool> m_trigDecTool; + ToolHandle<ITriggerTranslatorTool> m_trigTranslator; ToolHandleArray<IDQFilterTool> m_DQFilterTools; long m_procNEventsProp; diff --git a/Control/AthenaMonitoring/AthenaMonitoring/TriggerTranslatorSimple.h b/Control/AthenaMonitoring/AthenaMonitoring/TriggerTranslatorSimple.h new file mode 100755 index 00000000000..89b4aab10b4 --- /dev/null +++ b/Control/AthenaMonitoring/AthenaMonitoring/TriggerTranslatorSimple.h @@ -0,0 +1,57 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef TriggerTranslatorToolSimple_H +#define TriggerTranslatorToolSimple_H + +#include <string> +#include <vector> +#include <map> + +#include "AthenaBaseComps/AthAlgTool.h" +#include "GaudiKernel/ServiceHandle.h" +#include "GaudiKernel/ToolHandle.h" +#include "GaudiKernel/StatusCode.h" + +#include "AthenaMonitoring/ITriggerTranslatorTool.h" + +#include "GaudiKernel/ToolHandle.h" + +class IInterface; + + +/** + * Provides functionality for users to implement + * and save histograms, ntuples, and summary data, while allowing a central + * manager to coordinate and configure many TriggerTranslatorToolSimple instances. + * + * $Id: TriggerTranslatorToolSimple.h,v 1.21 2009-05-08 09:52:58 sschaetz Exp $ + * + * @author Michael Wilson, CERN, January 2007 + */ + +class TriggerTranslatorToolSimple : public AthAlgTool, virtual public ITriggerTranslatorTool +{ + public: + + TriggerTranslatorToolSimple( const std::string & type, const std::string & name, + const IInterface* parent ); + + virtual ~TriggerTranslatorToolSimple(); + + virtual StatusCode initialize(); + + virtual const std::vector<std::string> translate(const std::string&); + + + + + private: + std::map<std::string, std::string> m_trigmap_property; + std::map<std::string, std::vector<std::string>> m_trigmap; + + +}; + +#endif diff --git a/Control/AthenaMonitoring/python/BadLBFilterTool.py b/Control/AthenaMonitoring/python/BadLBFilterTool.py index 6c4362a1ced..ddb290c79e6 100644 --- a/Control/AthenaMonitoring/python/BadLBFilterTool.py +++ b/Control/AthenaMonitoring/python/BadLBFilterTool.py @@ -14,13 +14,15 @@ def _resolve_db_tag(origDbTag): #decide database instance based on project tag dataXX_ def _InstanceFromProjectName(): + from AthenaCommon.Logging import logging from RecExConfig.RecFlags import rec projectName=rec.projectName() try: year=int(projectName[4:6]); except: - self.msg.error("Failed to extract year from project tag "+ projectName+". Guessing run1") - return "COMP200" + log = logging.getLogger('BadLBFilterTool') + log.error("Failed to extract year from project tag "+ projectName+". Guessing run2") + return "CONDBR2" if (year>13): return "CONDBR2" diff --git a/Control/AthenaMonitoring/python/DQMonFlags.py b/Control/AthenaMonitoring/python/DQMonFlags.py index 5d49c22b0ba..98d339b7828 100644 --- a/Control/AthenaMonitoring/python/DQMonFlags.py +++ b/Control/AthenaMonitoring/python/DQMonFlags.py @@ -178,7 +178,7 @@ class doMuonTrackMon(JobProperty): """ Switch for muon track monitoring """ statusOn=True allowedTypes=['bool'] - StoredValue=True + StoredValue=False list+=[doMuonTrackMon] class doMuonAlignMon(JobProperty): diff --git a/Control/AthenaMonitoring/share/DQMonFlagsConfig_jobOptions.py b/Control/AthenaMonitoring/share/DQMonFlagsConfig_jobOptions.py index 6eea5fa0abb..11afe7e0e8a 100644 --- a/Control/AthenaMonitoring/share/DQMonFlagsConfig_jobOptions.py +++ b/Control/AthenaMonitoring/share/DQMonFlagsConfig_jobOptions.py @@ -238,9 +238,8 @@ if (not rec.doJetMissingETTag() or (rec.readRDO() and not jobproperties.JetRecFl if (not rec.doTau()): DQMonFlags.doTauMon=False -# covered now by doJetMissingETTag -#if (not recAlgs.doMissingET()): -# DQMonFlags.doMissingEtMon=False +if (not recAlgs.doMissingET()): + DQMonFlags.doMissingEtMon=False # # Stream Aware Monitoring diff --git a/Control/AthenaMonitoring/share/TrigDecTool_jobOptions.py b/Control/AthenaMonitoring/share/TrigDecTool_jobOptions.py index aeb89bc4341..fab955df3c9 100644 --- a/Control/AthenaMonitoring/share/TrigDecTool_jobOptions.py +++ b/Control/AthenaMonitoring/share/TrigDecTool_jobOptions.py @@ -31,4 +31,9 @@ if DQMonFlags.useTrigger(): ) ToolSvc += monTrigDecTool + tdt_local_logger.info('Scheduling the trigger translator') + from AthenaMonitoring.AthenaMonitoringConf import TriggerTranslatorToolSimple + monTrigTransTool = TriggerTranslatorToolSimple() + ToolSvc += monTrigTransTool + del tdt_local_logger diff --git a/Control/AthenaMonitoring/src/AthenaMonManager.cxx b/Control/AthenaMonitoring/src/AthenaMonManager.cxx index 000bf199166..6ff2beb0a2d 100755 --- a/Control/AthenaMonitoring/src/AthenaMonManager.cxx +++ b/Control/AthenaMonitoring/src/AthenaMonManager.cxx @@ -776,58 +776,125 @@ writeAndDeleteLWHist( LWHist*lwh ) LWHist * AthenaMonManager:: -writeAndDeleteLWHist( const std::string& key, const std::string& streamName, bool doDelete ) +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() ) { - //Fixme: add private helper method actualWriteAndDelete(TH1*), to use by both... - LWHist * lwhist =iLW->second; - TH1 * h = lwhist->getROOTHistBase(); - if( h != 0 ) { - //Get correct dir by doing a quick reg/dereg: - bool ok(false); - if (lwhist->usingROOTBackend()) { - //Already registered - ok = true; - } else { - //Delayed registration: - if (m_THistSvc->regHist( streamName, h ).isSuccess()) - // if (m_THistSvc->deReg( h ).isSuccess()) - ok = true; - } - - if (ok) { - 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; - } - - d->m_objMapLW.erase( iLW ); - lwhist->setOwnsROOTHisto(true);//Since we deregistered - if (doDelete) { - LWHistAthMonWrapper::deleteLWHist(lwhist); - lwhist=0; - } - gROOT->SetMustClean(doRecursiveReferenceDelete);//Should be after the deleteLWHist call - } - return lwhist; + //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() ) + { + //Fixme: add private helper method actualWriteAndDelete(TH1*), to use by both... + LWHist * lwhist =iLW->second; + TH1 * h = lwhist->getROOTHistBase(); + if( h != 0 ) + { + //Get correct dir by doing a quick reg/dereg: + bool ok(false); + if (lwhist->usingROOTBackend()) + { + //Already registered + ok = true; + } + else + { + //Delayed registration: + if (m_THistSvc->regHist( streamName, h ).isSuccess()) + // if (m_THistSvc->deReg( h ).isSuccess()) + ok = true; + } + + if (ok) + { + 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; + } + + d->m_objMapLW.erase( iLW ); + lwhist->setOwnsROOTHisto(true);//Since we deregistered + LWHistAthMonWrapper::deleteLWHist(lwhist); + lwhist=0; + gROOT->SetMustClean(doRecursiveReferenceDelete);//Should be after the deleteLWHist call + } + return lwhist; + } } - } - return 0; + return 0; } +LWHist * +AthenaMonManager:: +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() ) + { + //Fixme: add private helper method actualWriteAndDelete(TH1*), to use by both... + LWHist * lwhist =iLW->second; + TH1 * h = lwhist->getROOTHistBase(); + if( h != 0 ) + { + //Get correct dir by doing a quick reg/dereg: + bool ok(false); + if (lwhist->usingROOTBackend()) + { + //Already registered + ok = true; + } + else + { + //Delayed registration: + if (m_THistSvc->regHist( streamName, h ).isSuccess()) + // if (m_THistSvc->deReg( h ).isSuccess()) + ok = true; + } + + if (ok) + { + 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; + } + + d->m_objMapLW.erase( iLW ); + lwhist->setOwnsROOTHisto(true);//Since we deregistered + + //LWHistAthMonWrapper::deleteLWHist(lwhist); + LWHistAthMonWrapper::removeCustomData(lwhist); + lwhist->Reset(); + + lwhist=0; + gROOT->SetMustClean(doRecursiveReferenceDelete);//Should be after the deleteLWHist call + } + return lwhist; + } + } + return 0; +} void diff --git a/Control/AthenaMonitoring/src/ManagedMonitorToolBase.cxx b/Control/AthenaMonitoring/src/ManagedMonitorToolBase.cxx index b5aebaeca7c..2002d02e0c3 100755 --- a/Control/AthenaMonitoring/src/ManagedMonitorToolBase.cxx +++ b/Control/AthenaMonitoring/src/ManagedMonitorToolBase.cxx @@ -21,6 +21,7 @@ #include "TROOT.h" #include "TFile.h" #include "LWHists/LWHist.h" +#include "LWHists/LWHistControls.h" #include "LWHistAthMonWrapper.h" #include "AthMonBench.h" @@ -395,6 +396,7 @@ ManagedMonitorToolBase( const std::string & type, const std::string & name, , m_streamNameFcn(0) , m_THistSvc("THistSvc",name) , m_trigDecTool("") + , m_trigTranslator("") , m_DQFilterTools() , m_procNEventsProp(0) , m_path("") @@ -435,6 +437,9 @@ ManagedMonitorToolBase( const std::string & type, const std::string & name, // The TrigDecisionTool, clients normally should not have to set this declareProperty( "TrigDecisionTool", m_trigDecTool ); + // The TriggerTranslator + declareProperty( "TriggerTranslatorTool", m_trigTranslator ); + // The filter tools, to be specified in jobOptions declareProperty( "FilterTools", m_DQFilterTools ); @@ -672,6 +677,14 @@ initialize() } ATH_MSG_DEBUG(" --> Found AlgTool \"TrigDecisionTool\""); + if( !m_trigTranslator.empty() ) { + sc = m_trigTranslator.retrieve(); + if ( !sc.isSuccess() ) { + ATH_MSG_ERROR(" Unable to retrieve the TrigTranslatorTool!" << endreq); + return sc; + } + } + if(m_triggerChainProp!="") { ATH_MSG_DEBUG(" --> Found nonempty trigger chain list"); sc=parseList(m_triggerChainProp, m_vTrigChainNames); @@ -872,7 +885,7 @@ fillHists() sc1 = regManagedHistograms(m_templateHistograms[interval]); sc1 = regManagedGraphs(m_templateGraphs[interval]); sc1 = regManagedTrees(m_templateTrees[interval]); - sc1 = regManagedLWHistograms(m_templateLWHistograms[interval], true); + sc1 = regManagedLWHistograms(m_templateLWHistograms[interval]); } } @@ -1189,49 +1202,22 @@ regManagedTrees(std::vector< MgmtParams<TTree> >& m_templateTrees) StatusCode ManagedMonitorToolBase:: -regManagedLWHistograms(std::vector<MgmtParams<LWHist> >& m_templateLWHistograms, bool usePreviousInterval, bool doDelete) +regManagedLWHistograms(std::vector<MgmtParams<LWHist> >& m_templateLWHistograms) { - bool allIsOk = true; StatusCode sc1; sc1.setChecked(); for( std::vector< MgmtParams<LWHist> >::iterator it = m_templateLWHistograms.begin(); it != m_templateLWHistograms.end(); ++it ) { + // Get histogram group MonGroup group = (*it).m_group; // Get handle to the histogram LWHist* h = (*it).m_templateHist; - std::string hName = h->GetName(); - - std::string streamName = streamNameFunction()->getStreamName( this, group, hName, usePreviousInterval ); - LWHistAthMonWrapper::setStreamName(h,streamName); - - StatusCode smd = registerMetadata(streamName, hName, group); - if (smd != StatusCode::SUCCESS) allIsOk = false; - - //Only register with THistSvc if root backend, otherwise AthMonManager - //will do it for us - if (h->usingROOTBackend()) { - h->setOwnsROOTHisto(false);//Since might end up with thist svc - return m_THistSvc->regHist( streamName, h->getROOTHistBase() ); - } - - if( m_manager ) { - std::string genericName = NoOutputStream().getStreamName( this, group, hName ); - LWHistAthMonWrapper::setKey(h,genericName); - m_manager->passOwnership( h, genericName ); - ATH_MSG_DEBUG("!! LWHist: hName == " << hName); - ATH_MSG_DEBUG("!! LWHist: genericName == " << genericName); - ATH_MSG_DEBUG("!! LWHist: streamName == " << LWHistAthMonWrapper::streamName(h)); - m_manager->writeAndDeleteLWHist( genericName, LWHistAthMonWrapper::streamName(h), doDelete ); - if (! doDelete) h->Reset(); - // m_lwhists.erase(it); - } + sc1 = regHist(h, group); } - if (!allIsOk) return StatusCode::FAILURE; - - return StatusCode::SUCCESS; + return sc1; } StatusCode @@ -1260,7 +1246,9 @@ finalHists() //sc1 = regManagedHistograms(m_templateHistograms[interval], false); //sc1 = regManagedGraphs(m_templateGraphs[interval], false); //sc1 = regManagedTrees(m_templateTrees[interval], false); - sc1 = regManagedLWHistograms(m_templateLWHistograms[interval], false, true); + + // Yura: commented out when fixing online environment + //sc1 = regManagedLWHistograms(m_templateLWHistograms[interval], false, true); sc1.setChecked(); } @@ -1415,56 +1403,70 @@ StatusCode ManagedMonitorToolBase::regHist( LWHist* h,const std::string& system, StatusCode ManagedMonitorToolBase::regHist( LWHist* h, const MonGroup& group ) { + // You may want to setROOTBackend to true in online environment + //LWHistControls::setROOTBackend(true); + if (!h) return StatusCode::FAILURE; - if ( (group.histo_mgmt() & ATTRIB_UNMANAGED) == 0 ) { - // Create an unmanaged group based on the original MonGroup instance passed - // This is needed because managed histogram is presented as a number of unmanaged - // histograms (one per each interval) - MonGroup group_unmanaged( this, group.system(), group.interval(), ATTRIB_UNMANAGED, group.chain(), group.merge()); - - if (m_supportedIntervalsForRebooking.count(group.interval())) { - m_templateLWHistograms[group.interval()].push_back( MgmtParams<LWHist>(h, group_unmanaged) ); - } else { - ATH_MSG_ERROR("Attempt to book managed histogram " << h->GetName() << " with invalid interval type " << intervalEnumToString(group.interval())); - return StatusCode::FAILURE; - } - return StatusCode::SUCCESS; - } - - //FIXME: Code copied more or less verbatim from above. Collect most code (espc. for streamname) in common helpers!! - std::string hName = h->GetName(); - - if( m_manager ) { - std::string genericName = NoOutputStream().getStreamName( this, group, hName ); - LWHistAthMonWrapper::setKey(h,genericName); - LWHist* prevLWHist = m_manager->ownedLWHistOfKey(genericName); - if (prevLWHist) { - std::set<LWHist*>::iterator it = m_lwhists.find(prevLWHist); - if (it!=m_lwhists.end()) { - m_manager->writeAndDeleteLWHist( genericName, LWHistAthMonWrapper::streamName(prevLWHist) ); - m_lwhists.erase(it); - } - } - m_manager->passOwnership( h, genericName ); + if (!m_bookHistogramsInitial) { + ATH_MSG_INFO("Yura: very first time"); + if ( (group.histo_mgmt() & ATTRIB_UNMANAGED) == 0 ) { + + ATH_MSG_INFO("Yura: we have managed histograms"); + if (m_supportedIntervalsForRebooking.count(group.interval())) { + ATH_MSG_INFO(" Yura: adding histogram" << h->GetName()); + m_templateLWHistograms[group.interval()].push_back( MgmtParams<LWHist>(h, group) ); + } else { + ATH_MSG_ERROR("Attempt to book managed histogram " << h->GetName() << " with invalid interval type " << intervalEnumToString(group.interval())); + return StatusCode::FAILURE; + } + //return StatusCode::SUCCESS; + } } - std::string streamName = streamNameFunction()->getStreamName( this, group, hName ); - LWHistAthMonWrapper::setStreamName(h,streamName); - - StatusCode smd = registerMetadata(streamName, hName, group); - if (smd != StatusCode::SUCCESS) return StatusCode::FAILURE; + if (!h) + return StatusCode::FAILURE; - //Delay registration with THistSvc (unless root backend): - // m_lwhistMap.insert(std::pair<LWHist*,std::string>(h,streamName)); - m_lwhists.insert(h); - if (h->usingROOTBackend()) { - h->setOwnsROOTHisto(false);//Since might end up with thist svc - return m_THistSvc->regHist( streamName, h->getROOTHistBase() ); - } + //FIXME: Code copied more or less verbatim from above. Collect most code (espc. for streamname) in common helpers!! + std::string hName = h->GetName(); + + if( m_manager ) + { + std::string genericName = NoOutputStream().getStreamName(this, group, hName ); + LWHistAthMonWrapper::setKey(h,genericName); + LWHist* prevLWHist = m_manager->ownedLWHistOfKey(genericName); + if (prevLWHist) + { + std::set<LWHist*>::iterator it = m_lwhists.find(prevLWHist); + if (it!=m_lwhists.end()) + { + if ( (group.histo_mgmt() & ATTRIB_UNMANAGED) == 0 ) { + m_manager->writeAndResetLWHist( genericName, LWHistAthMonWrapper::streamName(prevLWHist) ); + } else { + m_manager->writeAndDeleteLWHist( genericName, LWHistAthMonWrapper::streamName(prevLWHist) ); + } + m_lwhists.erase(it); + } + } + m_manager->passOwnership( h, genericName ); + } + m_lwhists.insert(h); + + std::string streamName = streamNameFunction()->getStreamName( this, group, hName ); + LWHistAthMonWrapper::setStreamName(h,streamName); + StatusCode smd = registerMetadata(streamName, hName, group); + smd.setChecked(); + + //Delay registration with THistSvc (unless root backend): + //m_lwhistMap.insert(std::pair<LWHist*,std::string>(h,streamName)); + if (h->usingROOTBackend()) + { + h->setOwnsROOTHisto(false);//Since might end up with thist svc + return m_THistSvc->regHist( streamName, h->getROOTHistBase() ); + } - return StatusCode::SUCCESS; + return StatusCode::SUCCESS; } diff --git a/Control/AthenaMonitoring/src/TriggerTranslatorSimple.cxx b/Control/AthenaMonitoring/src/TriggerTranslatorSimple.cxx new file mode 100644 index 00000000000..475bc92b7c5 --- /dev/null +++ b/Control/AthenaMonitoring/src/TriggerTranslatorSimple.cxx @@ -0,0 +1,30 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#include "AthenaMonitoring/TriggerTranslatorSimple.h" + +TriggerTranslatorToolSimple::TriggerTranslatorToolSimple(const std::string& type, + const std::string& name, + const IInterface* parent) + : AthAlgTool( type, name, parent ) +{ + declareInterface<ITriggerTranslatorTool>(this); + declareProperty("triggerMapping", m_trigmap_property); +} + +TriggerTranslatorToolSimple::~TriggerTranslatorToolSimple() {} + +StatusCode TriggerTranslatorToolSimple::initialize() { + std::vector<std::string> junk; + //m_trigmap[""] = junk; + for(const auto item : m_trigmap_property) { + std::cout << "Key " << item.first << " Value " << item.second << std::endl; + } + return StatusCode::SUCCESS; +} + + +const std::vector<std::string> TriggerTranslatorToolSimple::translate(const std::string& key) { + return m_trigmap[""]; +} diff --git a/Control/AthenaMonitoring/src/components/AthenaMonitoring_entries.cxx b/Control/AthenaMonitoring/src/components/AthenaMonitoring_entries.cxx index 346bd4c9666..848e389ff61 100755 --- a/Control/AthenaMonitoring/src/components/AthenaMonitoring_entries.cxx +++ b/Control/AthenaMonitoring/src/components/AthenaMonitoring_entries.cxx @@ -5,6 +5,7 @@ #include "AthenaMonitoring/DQFilledBunchFilterTool.h" #include "AthenaMonitoring/DQDummyFilterTool.h" #include "AthenaMonitoring/DQBadLBFilterTool.h" +#include "AthenaMonitoring/TriggerTranslatorSimple.h" #include "GaudiKernel/DeclareFactoryEntries.h" @@ -15,6 +16,7 @@ DECLARE_TOOL_FACTORY(DQAtlasReadyFilterTool) DECLARE_TOOL_FACTORY(DQFilledBunchFilterTool) DECLARE_TOOL_FACTORY(DQDummyFilterTool) DECLARE_TOOL_FACTORY(DQBadLBFilterTool) +DECLARE_TOOL_FACTORY(TriggerTranslatorToolSimple) DECLARE_FACTORY_ENTRIES(AthenaMonitoring) { DECLARE_ALGORITHM(AthenaMon) @@ -24,4 +26,5 @@ DECLARE_FACTORY_ENTRIES(AthenaMonitoring) { DECLARE_ALGTOOL(DQFilledBunchFilterTool) DECLARE_ALGTOOL(DQDummyFilterTool) DECLARE_ALGTOOL(DQBadLBFilterTool) + DECLARE_ALGTOOL(TriggerTranslatorToolSimple) } -- GitLab