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