From 247801eaa1ba331a038a16a8b64a928c65ef5e96 Mon Sep 17 00:00:00 2001
From: Peter Onyisi <ponyisi@utexas.edu>
Date: Fri, 30 Oct 2020 13:28:27 +0000
Subject: [PATCH] Speed up DQ algorithms in high nthread limit

---
 .../python/AthMonitorCfgHelper.py             |   2 +-
 .../GenericMonitoringTool.h                   |   9 +-
 .../AthenaMonitoringKernel/HistogramFiller.h  |   5 +
 .../src/GenericMonitoringTool.cxx             |  99 ++--
 .../TRTMonitoringRun3/CMakeLists.txt          |  19 +-
 .../TRTMonitoringRun3RAW_Alg.h                |   2 +
 .../python/TRTMonitoringRun3RAW_Alg.py        |  50 +-
 .../src/TRTMonitoringRun3RAW_Alg.cxx          | 461 ++++++++----------
 .../src/MdtRawDataMonAlg.cxx                  | 277 ++++++-----
 9 files changed, 473 insertions(+), 451 deletions(-)

diff --git a/Control/AthenaMonitoring/python/AthMonitorCfgHelper.py b/Control/AthenaMonitoring/python/AthMonitorCfgHelper.py
index 227b9d99cb2d..955aeb00492a 100644
--- a/Control/AthenaMonitoring/python/AthMonitorCfgHelper.py
+++ b/Control/AthenaMonitoring/python/AthMonitorCfgHelper.py
@@ -146,7 +146,7 @@ class AthMonitorCfgHelper(object):
         Finalize the creation of the set of monitoring algorithms.
 
         Returns:
-        (resobj, monSeq) -- a tuple with a ComponentAccumulator and an AthSequencer
+        resobj -- a ComponentAccumulator 
         '''
         self.resobj.addSequence(self.monSeq)
         return self.resobj
diff --git a/Control/AthenaMonitoringKernel/AthenaMonitoringKernel/GenericMonitoringTool.h b/Control/AthenaMonitoringKernel/AthenaMonitoringKernel/GenericMonitoringTool.h
index b152e39e4b5b..f643f8b31e46 100644
--- a/Control/AthenaMonitoringKernel/AthenaMonitoringKernel/GenericMonitoringTool.h
+++ b/Control/AthenaMonitoringKernel/AthenaMonitoringKernel/GenericMonitoringTool.h
@@ -72,7 +72,8 @@ public:
   virtual uint32_t lumiBlock();
 
 private:
-
+  void invokeFillersDebug(const std::shared_ptr<Monitored::HistogramFiller>& filler,
+                          const std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>>& monitoredVariables) const;
   
   /// THistSvc (do NOT fix the service type (only the name) to allow for a different implementation online
   ServiceHandle<ITHistSvc> m_histSvc { this, "THistSvc", "THistSvc", "Histogramming svc" };
@@ -83,9 +84,9 @@ private:
   BooleanProperty m_useCache { this, "UseCache", true, "Cache filler lookups" };
 
   std::vector<std::shared_ptr<Monitored::HistogramFiller>> m_fillers; //!< plain list of fillers
-  mutable std::mutex m_fillMutex;
-  mutable Monitored::HistogramFiller::VariablesPack m_vars ATLAS_THREAD_SAFE;
-  mutable std::map<std::vector<std::string>,std::vector<std::shared_ptr<Monitored::HistogramFiller>>,std::less<>> m_fillerCacheMap ATLAS_THREAD_SAFE; //!< lookup map to speed up filler searches
+  mutable std::map<std::vector<std::string>,std::unique_ptr<std::vector<std::shared_ptr<Monitored::HistogramFiller>>>,std::less<>> m_fillerCacheMap ATLAS_THREAD_SAFE; //!< lookup map to speed up filler searches
+  mutable std::mutex m_cacheMutex;
+
 };
 
 /**
diff --git a/Control/AthenaMonitoringKernel/AthenaMonitoringKernel/HistogramFiller.h b/Control/AthenaMonitoringKernel/AthenaMonitoringKernel/HistogramFiller.h
index 7e9e7e8c8e71..0a074d164ac3 100644
--- a/Control/AthenaMonitoringKernel/AthenaMonitoringKernel/HistogramFiller.h
+++ b/Control/AthenaMonitoringKernel/AthenaMonitoringKernel/HistogramFiller.h
@@ -129,6 +129,10 @@ namespace Monitored {
       return m_histDef->cutMask;
     }
 
+    const std::unique_lock<std::mutex> getLock() const {
+      return std::unique_lock(m_lock);
+    }
+
   protected:
     template <class H>
     H* histogram() const {
@@ -179,6 +183,7 @@ namespace Monitored {
 
     std::shared_ptr<HistogramDef> m_histDef;
     std::shared_ptr<IHistogramProvider> m_histogramProvider;
+    mutable std::mutex m_lock;
 
   private:
     HistogramFiller& operator=(HistogramFiller const&) = delete;
diff --git a/Control/AthenaMonitoringKernel/src/GenericMonitoringTool.cxx b/Control/AthenaMonitoringKernel/src/GenericMonitoringTool.cxx
index ea0575f4a100..cafa55610621 100644
--- a/Control/AthenaMonitoringKernel/src/GenericMonitoringTool.cxx
+++ b/Control/AthenaMonitoringKernel/src/GenericMonitoringTool.cxx
@@ -125,37 +125,48 @@ namespace std {
   }
 }
 
+namespace {
+  // this exists to avoid reallocating memory on every invokeFillers call
+  thread_local Monitored::HistogramFiller::VariablesPack tl_vars ATLAS_THREAD_SAFE;
+}
+
 void GenericMonitoringTool::invokeFillers(const std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>>& monitoredVariables) const {
-  std::scoped_lock guard(m_fillMutex);
   // This is the list of fillers to consider in the invocation.
   // If we are using the cache then this may be a proper subset of m_fillers; otherwise will just be m_fillers
   const std::vector<std::shared_ptr<Monitored::HistogramFiller>>* fillerList{nullptr};
   // do we need to update the cache?
   bool makeCache = false;
-  // list of matched fillers, if we need to update the cache
-  std::vector<std::shared_ptr<Monitored::HistogramFiller>> matchedFillerList;
+  // pointer to list of matched fillers, if we need to update the cache (default doesn't create the vector)
+  std::unique_ptr<std::vector<std::shared_ptr<Monitored::HistogramFiller>>> matchedFillerList;
   if (m_useCache) {
+    // lock the cache during lookup
+    std::scoped_lock cacheguard(m_cacheMutex);
     const auto match = m_fillerCacheMap.find(monitoredVariables);
     if (match != m_fillerCacheMap.end()) {
-      fillerList = &(match->second);
+      fillerList = match->second.get();
     } else {
       fillerList = &m_fillers;
+      matchedFillerList = std::make_unique<std::vector<std::shared_ptr<Monitored::HistogramFiller>>>();
       makeCache = true;
     }
   } else {
     fillerList = &m_fillers;
   }
+
   for ( auto filler: *fillerList ) {
-    m_vars.reset();
+    tl_vars.reset();
     const int fillerCardinality = filler->histogramVariablesNames().size() + (filler->histogramWeightName().empty() ? 0: 1) + (filler->histogramCutMaskName().empty() ? 0 : 1);
 
     if ( fillerCardinality == 1 ) { // simplest case, optimising this to be super fast
       for ( auto& var: monitoredVariables ) {
         if ( var.get().name().compare( filler->histogramVariablesNames()[0] ) == 0 )  {
-          m_vars.var[0] = &var.get();
-          filler->fill( m_vars );
+          tl_vars.var[0] = &var.get();
+          {
+            auto guard{filler->getLock()};
+            filler->fill( tl_vars );
+          }
           if (makeCache) { 
-            matchedFillerList.push_back(filler); 
+            matchedFillerList->push_back(filler); 
           }
           break;
         }
@@ -166,7 +177,7 @@ void GenericMonitoringTool::invokeFillers(const std::vector<std::reference_wrapp
         bool matched = false;
         for ( unsigned fillerVarIndex = 0; fillerVarIndex < filler->histogramVariablesNames().size(); ++fillerVarIndex ) {
           if ( var.get().name().compare( filler->histogramVariablesNames()[fillerVarIndex] ) == 0 ) {
-            m_vars.set(fillerVarIndex, &var.get());
+            tl_vars.set(fillerVarIndex, &var.get());
             matched = true;
             matchesCount++;
             break;
@@ -175,51 +186,65 @@ void GenericMonitoringTool::invokeFillers(const std::vector<std::reference_wrapp
         if ( matchesCount == fillerCardinality ) break;
         if ( not matched ) { // may be a weight or cut variable still
           if ( var.get().name().compare( filler->histogramWeightName() ) == 0 )  {
-            m_vars.weight = &var.get();
+            tl_vars.weight = &var.get();
             matchesCount ++;
           } else if ( var.get().name().compare( filler->histogramCutMaskName() ) == 0 )  {
-            m_vars.cut = &var.get();
+            tl_vars.cut = &var.get();
             matchesCount++;
          }
         }
         if ( matchesCount == fillerCardinality ) break;
       }
       if ( matchesCount == fillerCardinality ) {
-        filler->fill( m_vars );
+        {
+          auto guard{filler->getLock()};
+          filler->fill( tl_vars );
+        }
         if (makeCache) { 
-          matchedFillerList.push_back(filler); 
+          matchedFillerList->push_back(filler); 
         }
       } else if ( ATH_UNLIKELY( matchesCount != 0 ) ) { // something has matched, but not all, worth informing user
-        bool reasonFound = false;
-        if (ATH_UNLIKELY(!filler->histogramWeightName().empty() && !m_vars.weight)) {
-          reasonFound = true;
-          ATH_MSG_DEBUG("Filler weight not found in monitoredVariables:"
-            << "\n  Filler weight               : " << filler->histogramWeightName()
-            << "\n  Asked to fill from mon. vars: " << monitoredVariables);
-        }
-        if (ATH_UNLIKELY(!filler->histogramCutMaskName().empty() && !m_vars.cut)) {
-          reasonFound = true;
-          ATH_MSG_DEBUG("Filler cut mask not found in monitoredVariables:"
-            << "\n  Filler cut mask             : " << filler->histogramCutMaskName()
-            << "\n  Asked to fill from mon. vars: " << monitoredVariables);
-        }
-        if ( not reasonFound ) {
-          ATH_MSG_DEBUG("Filler has different variables than monitoredVariables:"
-            << "\n  Filler variables            : " << filler->histogramVariablesNames()
-            << "\n  Asked to fill from mon. vars: " << monitoredVariables
-            << "\n  Selected monitored variables: " << m_vars.names() );
-        }
+        invokeFillersDebug(filler, monitoredVariables);
       }
     }
   }
 
   if (makeCache) {
-    std::vector<std::string> key;
-    key.reserve(monitoredVariables.size());
-    for (const auto& mv : monitoredVariables) {
-      key.push_back(mv.get().name());
+    // we may hit this multiple times. If another thread has updated the cache in the meanwhile, don't update
+    // (or we might delete the fillerList under another thread)
+    std::scoped_lock cacheguard(m_cacheMutex);
+    const auto match = m_fillerCacheMap.find(monitoredVariables);
+    if (match == m_fillerCacheMap.end()) {
+      std::vector<std::string> key;
+      key.reserve(monitoredVariables.size());
+      for (const auto& mv : monitoredVariables) {
+        key.push_back(mv.get().name());
+      }
+      m_fillerCacheMap[key].swap(matchedFillerList);
     }
-    m_fillerCacheMap[key] = matchedFillerList;
+  }
+}
+
+void GenericMonitoringTool::invokeFillersDebug(const std::shared_ptr<Monitored::HistogramFiller>& filler,
+                                               const std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>>& monitoredVariables) const {
+  bool reasonFound = false;
+  if (ATH_UNLIKELY(!filler->histogramWeightName().empty() && !tl_vars.weight)) {
+    reasonFound = true;
+    ATH_MSG_DEBUG("Filler weight not found in monitoredVariables:"
+      << "\n  Filler weight               : " << filler->histogramWeightName()
+      << "\n  Asked to fill from mon. tl_vars: " << monitoredVariables);
+  }
+  if (ATH_UNLIKELY(!filler->histogramCutMaskName().empty() && !tl_vars.cut)) {
+    reasonFound = true;
+    ATH_MSG_DEBUG("Filler cut mask not found in monitoredVariables:"
+      << "\n  Filler cut mask             : " << filler->histogramCutMaskName()
+      << "\n  Asked to fill from mon. tl_vars: " << monitoredVariables);
+  }
+  if ( not reasonFound ) {
+    ATH_MSG_DEBUG("Filler has different variables than monitoredVariables:"
+      << "\n  Filler variables            : " << filler->histogramVariablesNames()
+      << "\n  Asked to fill from mon. tl_vars: " << monitoredVariables
+      << "\n  Selected monitored variables: " << tl_vars.names() );
   }
 }
 
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt
index 61820cf9cf6f..80f48d09090a 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt
@@ -5,26 +5,13 @@
 
 # Declare the package name:
 atlas_subdir( TRTMonitoringRun3 )
-
-# External dependencies:
-find_package( Eigen )
-find_package( GeoModelCore )
-find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
-find_package( ROOT COMPONENTS Tree Hist RIO pthread MathCore Core Graf Graf3d Gpad Html Postscript Gui GX11TTF GX11)
-
-atlas_add_library( TRTMonitoringRun3Lib
-                   src/*.cxx
-                   PUBLIC_HEADERS TRTMonitoringRun3
-                   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODELCORE_INCLUDE_DIRS}
-                   PRIVATE_INCLUDE_DIRS ${CORAL_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODELCORE_LIBRARIES} AthenaBaseComps xAODEventInfo InDetPrepRawData GaudiKernel TRT_ConditionsServicesLib InDetReadoutGeometry TRT_ReadoutGeometry InDetRawData TrkTrack TrkToolInterfaces AthenaMonitoringLib CommissionEvent TrkSpacePoint MagFieldInterfaces InDetByteStreamErrors
-                   PRIVATE_LINK_LIBRARIES ${CORAL_LIBRARIES} AthenaKernel SGTools SGAudCore AthenaPoolUtilities LumiBlockCompsLib EventInfo LWHists TrkTrackSummary InDetRIO_OnTrack InDetIdentifier TrkRIO_OnTrack TrkParameters TrkMeasurementBase TrkEventUtils TrkSurfaces PathResolver EventPrimitives Identifier AtlasDetDescr AthContainers TRT_DriftFunctionToolLib )
-                   
+                  
 atlas_add_component( TRTMonitoringRun3
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} ${GEOMODELCORE_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODELCORE_LIBRARIES} TRTMonitoringRun3Lib AthenaMonitoringLib SGAudCore SGTools AthenaPoolUtilities GaudiKernel EventInfo InDetRawData InDetPrepRawData LumiBlockCompsLib CommissionEvent AthContainers AtlasDetDescr Identifier xAODEventInfo EventPrimitives TRT_ConditionsServicesLib InDetReadoutGeometry TRT_ReadoutGeometry InDetRIO_OnTrack LWHists TrkTrack TrkTrackSummary TrkToolInterfaces AthenaKernel InDetIdentifier MagFieldInterfaces PathResolver TrkSurfaces TrkEventUtils TrkMeasurementBase TrkParameters TrkRIO_OnTrack TrkSpacePoint TRT_DriftFunctionToolLib )
+                     LINK_LIBRARIES AthenaMonitoringLib TrkToolInterfaces CommissionEvent TRT_DriftFunctionToolLib TRT_ConditionsServicesLib MagFieldInterfaces InDetByteStreamErrors InDetRIO_OnTrack
+                     )
                    
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h
index 5fa1277d7147..c73a34741ef0 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h
@@ -27,6 +27,7 @@
 #include "TrkToolInterfaces/ITrackHoleSearchTool.h"
 #include "TRT_DriftFunctionTool/ITRT_DriftFunctionTool.h"
 #include "TRT_ConditionsServices/ITRT_CalDbTool.h"
+#include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h"
 
 #include "MagFieldInterfaces/IMagFieldSvc.h"
 
@@ -113,6 +114,7 @@ private:
 
     // Services
     ToolHandle<ITRT_StrawStatusSummaryTool> m_sumTool;
+    ServiceHandle<ITRT_StrawNeighbourSvc> m_TRTStrawNeighbourSvc;
 
     // Data handles
     SG::ReadHandleKey<TRT_RDO_Container>   m_rdoContainerKey{this,       "TRTRawDataObjectName",   "TRT_RDOs",      "Name of TRT RDOs container"};
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
index 4ff8ded4e02d..386b2a49ba2d 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
@@ -55,33 +55,33 @@ def TRTMonitoringRun3RAW_AlgConfig(inputFlags):
                 elif i >= numberOfStacks[ibe]:
                     oss = 'TRT/EndcapC/Sector' + str(i + 1 - 32)
 
-            rdoStackGroup.defineHistogram('HitWMapS_passed,HitWMapS;hHitWMapS',type='TEfficiency',title='Leading Edge in Time Window: Straws;Straw Number in Stack;Probability per Event',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoStackGroup.defineHistogram('HitTrWMapS_x,HitTrWMapS_y;hHitTrWMapS',type='TProfile',title='Mean Trailing Edge in Time Window: Straws;Straw Number in Stack;Time (ns)',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoStackGroup.defineHistogram('HitTrMapS_x,HitTrMapS_y;hHitTrMapS',type='TProfile',title='Mean Trailing Edge: Straws;Straw Number in Stack;Time (ns)',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoStackGroup.defineHistogram('HitAWMapS_passed,HitAWMapS;hHitAWMapS',type='TEfficiency',title='LL in Time Window: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoStackGroup.defineHistogram('HitAMapS_passed,HitAMapS;hHitAMapS',type='TEfficiency',title='Any LL Bit: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('HitWMapS_passed,strawNumber;hHitWMapS',type='TEfficiency',title='Leading Edge in Time Window: Straws;Straw Number in Stack;Probability per Event',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('strawNumber,HitTrMapS_y;hHitTrWMapS',cutmask='HitTrWMapS_cut',type='TProfile',title='Mean Trailing Edge in Time Window: Straws;Straw Number in Stack;Time (ns)',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('strawNumber,HitTrMapS_y;hHitTrMapS',type='TProfile',title='Mean Trailing Edge: Straws;Straw Number in Stack;Time (ns)',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('HitAWMapS_passed,strawNumber;hHitAWMapS',type='TEfficiency',title='LL in Time Window: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('HitAMapS_passed,strawNumber;hHitAMapS',type='TEfficiency',title='Any LL Bit: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
             rdoStackGroup.defineHistogram('StrawOcc_passed,StrawOcc;hOccupancyS',type='TEfficiency',title='Straw Occupancy Distribution: Straws;Occupancy;Number of Straws',path=oss,xbins=201,xmin=0,xmax=1.005)
-            rdoStackGroup.defineHistogram('HitToTMapS_x,HitToTMapS_y;hHitToTMapS',type='TProfile',title='Mean ToT: Straws;Straw Number in Stack;Time (ns)',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoStackGroup.defineHistogram('HitToTLongMapS_x,HitToTLongMapS_y;hHitToTLongMapS',type='TProfile',title='Mean ToT for Straws with ToT > LongToTCut: Straws;Straw Number in Stack;Time (ns)',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoStackGroup.defineHistogram('HitToTLongTrMapS_x,HitToTLongTrMapS_y;hHitToTLongTrMapS',type='TProfile',title='Mean Trailing Edge for Straws with ToT > LongToTCut: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoStackGroup.defineHistogram('HitHMapS_passed,HitHMapS;hHitHMapS',type='TEfficiency',title='Any HL Bit: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoStackGroup.defineHistogram('HitHWMapS_passed,HitHWMapS;hHitHWMapS',type='TEfficiency',title='HL in Time Window: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('strawNumber,HitToTMapS_y;hHitToTMapS',type='TProfile',title='Mean ToT: Straws;Straw Number in Stack;Time (ns)',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('strawNumber,HitToTMapS_y;hHitToTLongMapS',cutmask='HitToTLong_cut',type='TProfile',title='Mean ToT for Straws with ToT > LongToTCut: Straws;Straw Number in Stack;Time (ns)',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('strawNumber,HitTrMapS_y;hHitToTLongTrMapS',cutmask='HitToTLong_cut',type='TProfile',title='Mean Trailing Edge for Straws with ToT > LongToTCut: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('HitHMapS_passed,strawNumber;hHitHMapS',type='TEfficiency',title='Any HL Bit: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoStackGroup.defineHistogram('HitHWMapS_passed,strawNumber;hHitHWMapS',type='TEfficiency',title='HL in Time Window: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
             rdoStackGroup.defineHistogram('HtoLMapS_passed,HtoLMapS;hHtoLMapS',type='TEfficiency',title='HL/LL Ratio: Straws;Straw Number in Stack;Probability',path=oss,xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
 
-            rdoStackGroup.defineHistogram('HitWMapC_passed,HitWMapC;hHitWMapC',type='TEfficiency',title='Leading Edge in Time Window: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
-            rdoStackGroup.defineHistogram('HitTrMapC_x,HitTrMapC_y;hHitTrMapC',type='TProfile',title='Mean Trailing Edge: Chips;Chip Number in Stack;Time (ns)',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
-            rdoStackGroup.defineHistogram('HitTrWMapC_x,HitTrWMapC_y;hHitTrWMapC',type='TProfile',title='Mean Trailing Edge in Time Window: Chips;Chip Number in Stack;Time (ns)',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
-            rdoStackGroup.defineHistogram('HitAWMapC_passed,HitAWMapC;hHitAWMapC',type='TEfficiency',title='LL in Time Window: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
-            rdoStackGroup.defineHistogram('HitAMapC_passed,HitAMapC;hHitAMapC',type='TEfficiency',title='Any LL Bit: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('HitWMapC_passed,chipNumber;hHitWMapC',type='TEfficiency',title='Leading Edge in Time Window: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('chipNumber,HitTrMapC_y;hHitTrMapC',type='TProfile',title='Mean Trailing Edge: Chips;Chip Number in Stack;Time (ns)',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('chipNumber,HitTrMapC_y;hHitTrWMapC',cutmask='HitTrWMapC_cut',type='TProfile',title='Mean Trailing Edge in Time Window: Chips;Chip Number in Stack;Time (ns)',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('HitAWMapC_passed,chipNumber;hHitAWMapC',type='TEfficiency',title='LL in Time Window: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('HitAMapC_passed,chipNumber;hHitAMapC',type='TEfficiency',title='Any LL Bit: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
             rdoStackGroup.defineHistogram('OccupancyC_passed,OccupancyC;hChipOcc',type='TEfficiency',title='Chip Occupancy Distribution;Occupancy;Number of Chips',path=oss,xbins=201,xmin=0,xmax=1.005)
-            rdoStackGroup.defineHistogram('HitToTMapC_x,HitToTMapC_y;hHitToTMapC',type='TProfile',title='Mean ToT: Chips;Chip Number in Stack;Time (ns)',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
-            rdoStackGroup.defineHistogram('HitHMapC_passed,HitHMapC;hHitHMapC',type='TEfficiency',title='Any HL Bit: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
-            rdoStackGroup.defineHistogram('HitHWMapC_passed,HitHWMapC;hHitHWMapC',type='TEfficiency',title='HL in Time Window: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('chipNumber,HitToTMapC_y;hHitToTMapC',type='TProfile',title='Mean ToT: Chips;Chip Number in Stack;Time (ns)',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('HitHMapC_passed,chipNumber;hHitHMapC',type='TEfficiency',title='Any HL Bit: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('HitHWMapC_passed,chipNumber;hHitHWMapC',type='TEfficiency',title='HL in Time Window: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
             rdoStackGroup.defineHistogram('HtoLMapC_passed,HtoLMapC;hHtoLMapC',type='TEfficiency',title='HL/LL Ratio: Chips;Chip Number in Stack;Probability',path=oss,xbins=iChipMax[ibe],xmin=0,xmax=iChipMax[ibe])
-            rdoStackGroup.defineHistogram('HtoBCMapC_x,HtoBCMapC_y;hHtoBCMapC',type='TH2F',title='HL in BC: Chips;Bunch Crossing ID;Chip Number in Stack',path=oss,xbins=3,xmin=0,xmax=3,ybins=iChipMax[ibe],ymin=0,ymax=iChipMax[ibe])
+            rdoStackGroup.defineHistogram('HtoBCMapC_x,chipNumber;hHtoBCMapC',cutmask='HtoBCMap_cut',type='TH2F',title='HL in BC: Chips;Bunch Crossing ID;Chip Number in Stack',path=oss,xbins=3,xmin=0,xmax=3,ybins=iChipMax[ibe],ymin=0,ymax=iChipMax[ibe])
 
-            if   ibe == 0: rdoStackGroup.defineHistogram('HtoBCMapB_x,HtoBCMapB_y;hHtoBCMapB',type='TH2F',title='HL in BC: Boards;Bunch Crossing ID;Board Number in Stack',path=oss,xbins=3,xmin=0,xmax=3,ybins=9,ymin=0,ymax=9)
-            elif ibe == 1: rdoStackGroup.defineHistogram('HtoBCMapB_x,HtoBCMapB_y;hHtoBCMapB',type='TH2F',title='HL in BC: Boards;Bunch Crossing ID;Board Number in Stack',path=oss,xbins=3,xmin=0,xmax=3,ybins=20,ymin=-0.5,ymax=19.5)
+            if   ibe == 0: rdoStackGroup.defineHistogram('HtoBCMapB_x,HtoBCMapB_y;hHtoBCMapB',cutmask='HtoBCMap_cut',type='TH2F',title='HL in BC: Boards;Bunch Crossing ID;Board Number in Stack',path=oss,xbins=3,xmin=0,xmax=3,ybins=9,ymin=0,ymax=9)
+            elif ibe == 1: rdoStackGroup.defineHistogram('HtoBCMapB_x,HtoBCMapB_y;hHtoBCMapB',cutmask='HtoBCMap_cut',type='TH2F',title='HL in BC: Boards;Bunch Crossing ID;Board Number in Stack',path=oss,xbins=3,xmin=0,xmax=3,ybins=20,ymin=-0.5,ymax=19.5)
 
     ### Registering Collisions Histograms ###
     rdoShiftSmryGroup = helper.addGroup(algTRTMonitoringRun3RAW,'RDOShiftSmryHistograms')
@@ -109,15 +109,15 @@ def TRTMonitoringRun3RAW_AlgConfig(inputFlags):
         rdoGroup = helper.addGroup(algTRTMonitoringRun3RAW,'RDOHistograms{0}'.format(ibe))
         rdoGroup.defineHistogram('BCIDvsOcc_x,BCIDvsOcc_y;hBCIDvsOcc',type='TProfile',title='Avg. Occupancy vs BCID{0};Bunch Crossing ID;Occupancy'.format(regionTag),path='TRT/{0}/Expert'.format(barrelOrEndcap[ibe]),xbins=3564,xmin=0,xmax=3564)
         if ibe == 0:
-            rdoGroup.defineHistogram('HitWMap_passed,HitWMap;hHitWMap',type='TEfficiency',title='Leading Edge in Time Window: Xenon Straws (Barrel);Straw Number in Stack;Probability',path='TRT/Shift/{0}'.format(str(barrelOrEndcap[ibe])),xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-            rdoGroup.defineHistogram('HitWMap_Ar_passed,HitWMap_Ar;hHitWMap_Ar',type='TEfficiency',title='Leading Edge in Time Window: Argon Straws (Barrel);Straw Number in Stack;Probability',path='TRT/Shift/{0}'.format(barrelOrEndcap[ibe]),xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoGroup.defineHistogram('HitWMap_passed,strawNumber;hHitWMap',cutmask='isNotAr',type='TEfficiency',title='Leading Edge in Time Window: Xenon Straws (Barrel);Straw Number in Stack;Probability',path='TRT/Shift/{0}'.format(str(barrelOrEndcap[ibe])),xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+            rdoGroup.defineHistogram('HitWMap_passed,strawNumber;hHitWMap_Ar',cutmask='isAr',type='TEfficiency',title='Leading Edge in Time Window: Argon Straws (Barrel);Straw Number in Stack;Probability',path='TRT/Shift/{0}'.format(barrelOrEndcap[ibe]),xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
             rdoGroup.defineHistogram('OccAll;hOccAll',type='TH1F',title='Occupancy per Event;Occupancy;Events',path='TRT/Shift/{0}'.format(barrelOrEndcap[ibe]),xbins=400,xmin=0.0,xmax=1.0)
         elif ibe == 1:
             for iside in range(2):
                 side = ('A', 'C')
                 rdoEndcapGroup = helper.addGroup(algTRTMonitoringRun3RAW,'RDOHistograms1{0}'.format(iside))
-                rdoEndcapGroup.defineHistogram('HitWMap_passed,HitWMap;hHitWMap_{0}'.format(side[iside]),type='TEfficiency',title='Leading Edge in Time Window: Xenon Straws (E{0});Straw Number in Stack;Probability'.format(side[iside]),path='TRT/Shift/{0}'.format(barrelOrEndcap[ibe]),xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
-                rdoEndcapGroup.defineHistogram('HitWMap_Ar_passed,HitWMap_Ar;hHitWMap_Ar_{0}'.format(side[iside]),type='TEfficiency',title='Leading Edge in Time Window: Argon Straws (E{0});Straw Number in Stack;Probability'.format(side[iside]),path='TRT/Shift/{0}'.format(barrelOrEndcap[ibe]),xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])   
+                rdoEndcapGroup.defineHistogram('HitWMap_passed,strawNumber;hHitWMap_{0}'.format(side[iside]),cutmask='isNotAr',type='TEfficiency',title='Leading Edge in Time Window: Xenon Straws (E{0});Straw Number in Stack;Probability'.format(side[iside]),path='TRT/Shift/{0}'.format(barrelOrEndcap[ibe]),xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])
+                rdoEndcapGroup.defineHistogram('HitWMap_passed,strawNumber;hHitWMap_Ar_{0}'.format(side[iside]),cutmask='isAr',type='TEfficiency',title='Leading Edge in Time Window: Argon Straws (E{0});Straw Number in Stack;Probability'.format(side[iside]),path='TRT/Shift/{0}'.format(barrelOrEndcap[ibe]),xbins=strawMax[ibe],xmin=0,xmax=strawMax[ibe])   
         for iside in range(2):
             regionTag = ' (' + beId[ibe] + sideId[iside] + ')'
             regionMarker = (beId[ibe] + sideId[iside]) if isOnline is True else (sideId[iside])
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx
index 6638d12341b2..ec918c8c4035 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx
@@ -41,6 +41,7 @@ TRTMonitoringRun3RAW_Alg::TRTMonitoringRun3RAW_Alg( const std::string& name, ISv
 ,m_minTRThits(10)
 ,m_minP(0)
 ,m_sumTool("TRT_StrawStatusSummaryTool", this)
+,m_TRTStrawNeighbourSvc("TRT_StrawNeighbourSvc", name)
 ,m_isCosmics(false)
 ,m_EventBurstCut(-1)
 {
@@ -124,6 +125,80 @@ StatusCode TRTMonitoringRun3RAW_Alg::initialize() {
     ATH_CHECK( m_trackCollectionKey.initialize() );
     ATH_CHECK( m_bsErrContKey.initialize(SG::AllowEmpty) );
 
+    // initialize chip lookup maps
+    ATH_CHECK( m_TRTStrawNeighbourSvc.retrieve() );
+
+    //loop over straw hash index to create straw number mapping for TRTViewer
+    unsigned int maxHash = m_pTRTHelper->straw_layer_hash_max();
+
+    for (int ibe = 0; ibe < 2; ibe++) { // ibe=0(barrel), ibe=1(endcap)
+        for (unsigned int index = 0; index < maxHash; index++) {
+            IdentifierHash idHash = index;
+            Identifier id = m_pTRTHelper->layer_id(idHash);
+            int idBarrelEndcap = m_pTRTHelper->barrel_ec(id);
+            int idLayerWheel   = m_pTRTHelper->layer_or_wheel(id);
+            int idPhiModule    = m_pTRTHelper->phi_module(id);
+            int idStrawLayer   = m_pTRTHelper->straw_layer(id);
+            bool isBarrel = m_pTRTHelper->is_barrel(id);
+            int idSide;
+            int sectorflag = 0;
+            const InDetDD::TRT_BaseElement *element = nullptr;
+
+            if (ibe == 0) { // barrel
+                idSide = idBarrelEndcap ? 1 : -1;
+
+                if (isBarrel && (idBarrelEndcap == -1)) {
+                    sectorflag = 1;
+                    element = m_mgr->getBarrelElement(idSide, idLayerWheel, idPhiModule, idStrawLayer);
+                }
+            } else if (ibe == 1) { // endcap
+                idSide = idBarrelEndcap ? 1 : 0;
+
+                if (!isBarrel && ((idBarrelEndcap == -2) || (idBarrelEndcap == 2))) {
+                    sectorflag = 1;
+                    element = m_mgr->getEndcapElement(idSide, idLayerWheel, idStrawLayer, idPhiModule);//, idStrawLayer_ec);
+                }
+            }
+
+            if (sectorflag == 1) {
+                if (!element) continue;
+
+                for (unsigned int istraw = 0; istraw < element->nStraws(); istraw++) {
+                    std::vector<Identifier> neighbourIDs;
+                    Identifier strawID = m_pTRTHelper->straw_id(id, int(istraw));
+                    int i_chip, i_pad;
+                    m_TRTStrawNeighbourSvc->getChip(strawID, i_chip);
+                    m_TRTStrawNeighbourSvc->getPad(id, i_pad);
+
+                    if (ibe == 0) { //barrel
+                        if (idLayerWheel == 1) i_chip += 21;
+
+                        if (idLayerWheel == 2) i_chip += 54;
+
+                        int tempStrawNumber = strawNumber(istraw, idStrawLayer, idLayerWheel);
+
+                        if (tempStrawNumber < 0 || tempStrawNumber > (s_Straw_max[ibe] - 1)) {
+                            ATH_MSG_WARNING("Found tempStrawNumber = " << tempStrawNumber << " out of range.");
+                        } else {
+                            m_mat_chip_B[idPhiModule][tempStrawNumber]    = i_chip;
+                            m_mat_chip_B[idPhiModule + 32][tempStrawNumber] = i_chip;
+                        }
+                    } else if (ibe == 1) { //endcap
+                        ++i_chip -= 104;
+                        int tempStrawNumber = strawNumberEndCap(istraw, idStrawLayer, idLayerWheel, idPhiModule, idSide);
+
+                        if (tempStrawNumber < 0 || tempStrawNumber > (s_Straw_max[ibe] - 1)) {
+                            ATH_MSG_WARNING("Found tempStrawNumber = " << tempStrawNumber << " out of range.");
+                        } else {
+                            m_mat_chip_E[idPhiModule][tempStrawNumber]    = i_chip;
+                            m_mat_chip_E[idPhiModule + 32][tempStrawNumber] = i_chip;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     return StatusCode::SUCCESS;
 }
 
@@ -450,6 +525,40 @@ float TRTMonitoringRun3RAW_Alg::radToDegrees(float radValue) const{
 	return degreeValue;
 }
 
+struct straw_struct {
+    int strawNumber;
+    bool HitWMapS_passed;
+    bool HitAWMapS_passed;
+    bool HitAMapS_passed;
+    bool HitHMapS_passed;
+    bool HitHWMapS_passed;
+    float HitTrMapS_y;
+    float HitToTMapS_y;
+    bool HitToTLong_cut;
+    bool HitTrWMapS_cut;
+};
+
+struct chip_struct {
+    int chipNumber;
+    bool HitWMapC_passed;
+    bool HitAWMapC_passed;
+    bool HitAMapC_passed;
+    bool HitHMapC_passed;
+    bool HitHWMapC_passed;
+    float HitTrMapC_y;
+    bool HitTrWMapC_cut;
+    float HitToTMapC_y;
+    int HtoBCMapC_x;
+    int HtoBCMapB_x;
+    int HtoBCMapB_y;
+    bool HtoBCMap_cut;
+};
+
+struct straw_shifter_struct {
+    int strawNumber;
+    bool isAr;
+    bool HitWMap_passed;
+};
 
 //Fill the TRT RDO Histograms
 //----------------------------------------------------------------------------------//
@@ -460,22 +569,10 @@ StatusCode TRTMonitoringRun3RAW_Alg::fillTRTRDOs(const TRT_RDO_Container& rdoCon
     ATH_MSG_DEBUG("Filling TRT RDO Histograms");
     
     // TProfile
-    auto HitTrWMapS_x         = Monitored::Scalar<float>("HitTrWMapS_x", 0.0);
-    auto HitTrWMapS_y         = Monitored::Scalar<float>("HitTrWMapS_y", 0.0);
-    auto HitTrWMapC_x         = Monitored::Scalar<float>("HitTrWMapC_x", 0.0);
-    auto HitTrWMapC_y         = Monitored::Scalar<float>("HitTrWMapC_y", 0.0);     
-    auto HitTrMapC_x          = Monitored::Scalar<float>("HitTrMapC_x", 0.0);
-    auto HitTrMapC_y          = Monitored::Scalar<float>("HitTrMapC_y", 0.0);
     auto HitToTLongTrMapS_x   = Monitored::Scalar<float>("HitToTLongTrMapS_x", 0.0);
     auto HitToTLongTrMapS_y   = Monitored::Scalar<float>("HitToTLongTrMapS_y", 0.0);
-    auto HitToTMapC_x         = Monitored::Scalar<float>("HitToTMapC_x", 0.0);
-    auto HitToTMapC_y         = Monitored::Scalar<float>("HitToTMapC_y", 0.0);
-    auto HitTrMapS_x          = Monitored::Scalar<float>("HitTrMapS_x", 0.0);
-    auto HitTrMapS_y          = Monitored::Scalar<float>("HitTrMapS_y", 0.0);
     auto HitToTLongMapS_x     = Monitored::Scalar<float>("HitToTLongMapS_x", 0.0);
     auto HitToTLongMapS_y     = Monitored::Scalar<float>("HitToTLongMapS_y", 0.0);
-    auto HitToTMapS_x         = Monitored::Scalar<float>("HitToTMapS_x", 0.0);
-    auto HitToTMapS_y         = Monitored::Scalar<float>("HitToTMapS_y", 0.0);
     auto BCIDvsOcc_x          = Monitored::Scalar<float>("BCIDvsOcc_x", 0.0);
     auto BCIDvsOcc_y          = Monitored::Scalar<float>("BCIDvsOcc_y", 0.0);
     auto AvgHLOcc_side_x      = Monitored::Scalar<float>("AvgHLOcc_side_x", 0.0);
@@ -497,30 +594,10 @@ StatusCode TRTMonitoringRun3RAW_Alg::fillTRTRDOs(const TRT_RDO_Container& rdoCon
     auto SummaryWeight        = Monitored::Scalar<float>("SummaryWeight", 0.0);
     
     // TH2F
-    auto HtoBCMapC_x          = Monitored::Scalar<float>("HtoBCMapC_x", 0.0);
-    auto HtoBCMapC_y          = Monitored::Scalar<float>("HtoBCMapC_y", 0.0);
-    auto HtoBCMapB_x          = Monitored::Scalar<float>("HtoBCMapB_x", 0.0);
-    auto HtoBCMapB_y          = Monitored::Scalar<float>("HtoBCMapB_y", 0.0);
     
     // TEfficiency
-    auto HitWMapS             = Monitored::Scalar<float>("HitWMapS", 0.0);
-    auto HitWMapS_passed      = Monitored::Scalar<bool>("HitWMapS_passed", false);
-    auto HitAWMapS            = Monitored::Scalar<float>("HitAWMapS", 0.0);
-    auto HitAWMapS_passed     = Monitored::Scalar<bool>("HitAWMapS_passed", false);
-    auto HitAMapS             = Monitored::Scalar<float>("HitAMapS", 0.0);
-    auto HitAMapS_passed      = Monitored::Scalar<bool>("HitAMapS_passed", false);
-    auto HitHMapS             = Monitored::Scalar<float>("HitHMapS", 0.0);
-    auto HitHMapS_passed      = Monitored::Scalar<bool>("HitHMapS_passed", false);
-    auto HitHWMapS            = Monitored::Scalar<float>("HitHWMapS", 0.0);
-    auto HitHWMapS_passed     = Monitored::Scalar<bool>("HitHWMapS_passed", false);
     auto HtoLMapS             = Monitored::Scalar<float>("HtoLMapS", 0.0);
     auto HtoLMapS_passed      = Monitored::Scalar<bool>("HtoLMapS_passed", false);
-    auto HitWMapC             = Monitored::Scalar<float>("HitWMapC", 0.0);
-    auto HitWMapC_passed      = Monitored::Scalar<bool>("HitWMapC_passed", false);
-    auto HitAWMapC            = Monitored::Scalar<float>("HitAWMapC", 0.0);
-    auto HitAWMapC_passed     = Monitored::Scalar<bool>("HitAWMapC_passed", false);
-    auto HitAMapC             = Monitored::Scalar<float>("HitAMapC", 0.0);
-    auto HitAMapC_passed      = Monitored::Scalar<bool>("HitAMapC_passed", false);
     auto HitWMap_A            = Monitored::Scalar<float>("HitWMap_A", 0.0);
     auto HitWMap_A_passed     = Monitored::Scalar<bool>("HitWMap_A_passed", false);
     auto HitWMap_C            = Monitored::Scalar<float>("HitWMap_C", 0.0);
@@ -529,16 +606,8 @@ StatusCode TRTMonitoringRun3RAW_Alg::fillTRTRDOs(const TRT_RDO_Container& rdoCon
     auto HitWMap_Ar_A_passed  = Monitored::Scalar<bool>("HitWMap_Ar_A_passed", false);
     auto HitWMap_Ar_C         = Monitored::Scalar<float>("HitWMap_Ar_C", 0.0);
     auto HitWMap_Ar_C_passed  = Monitored::Scalar<bool>("HitWMap_Ar_C_passed", false);
-    auto HitHMapC             = Monitored::Scalar<float>("HitHMapC", 0.0);
-    auto HitHMapC_passed      = Monitored::Scalar<bool>("HitHMapC_passed", false);
-    auto HitHWMapC            = Monitored::Scalar<float>("HitHWMapC", 0.0);
-    auto HitHWMapC_passed     = Monitored::Scalar<bool>("HitHWMapC_passed", false);
     auto HtoLMapC             = Monitored::Scalar<float>("HtoLMapC", 0.0);
     auto HtoLMapC_passed      = Monitored::Scalar<bool>("HtoLMapC_passed", false);
-    auto HitWMap              = Monitored::Scalar<float>("HitWMap", 0.0);
-    auto HitWMap_passed       = Monitored::Scalar<bool>("HitWMap_passed", false);
-    auto HitWMap_Ar           = Monitored::Scalar<float>("HitWMap_Ar", 0.0);
-    auto HitWMap_Ar_passed    = Monitored::Scalar<bool>("HitWMap_Ar_passed", false);
     auto OccupancyC           = Monitored::Scalar<float>("OccupancyC", 0.0);
     auto OccupancyC_passed    = Monitored::Scalar<bool>("OccupancyC_passed", false);
     auto IntLum               = Monitored::Scalar<float>("IntLum", 0.0);
@@ -626,6 +695,10 @@ StatusCode TRTMonitoringRun3RAW_Alg::fillTRTRDOs(const TRT_RDO_Container& rdoCon
 
     int nhitsall = 0;
 
+    std::map<int,std::map<int, std::vector<straw_struct>>> straw_map;
+    std::map<int,std::map<int, std::vector<chip_struct>>> chip_map;
+    std::map<int,std::vector<straw_shifter_struct>> straw_shifter_map;
+
     for (; RDO_CollectionBegin != RDO_CollectionEnd; ++RDO_CollectionBegin) {
         const InDetRawDataCollection<TRT_RDORawData> *TRT_Collection(*RDO_CollectionBegin);
 
@@ -730,18 +803,15 @@ StatusCode TRTMonitoringRun3RAW_Alg::fillTRTRDOs(const TRT_RDO_Container& rdoCon
             } else if (iside == 1) {
                 iphi_module = phi_module + 32;
             }
-            if (ibe == 0) {
-                nTRTHits[ibe]++;
 
-                if (m_doStraws) {
-                    if (isArgonStraw) {
-                        HitWMap_Ar = thisStrawNumber;
-                        fill("RDOHistograms0", HitWMap_Ar_passed, HitWMap_Ar);
-                    } else {
-                        HitWMap = thisStrawNumber;
-                        fill("RDOHistograms0", HitWMap_passed, HitWMap);
-                    }
-                }
+            if (m_doStraws) {
+                    straw_shifter_struct& this_struct = straw_shifter_map[barrel_ec].emplace_back();
+                    this_struct.strawNumber = thisStrawNumber;
+                    this_struct.isAr = isArgonStraw;
+                    this_struct.HitWMap_passed = false;
+            }
+            nTRTHits[ibe]++;
+            if (ibe == 0) {
 
                 if (m_doShift) {
 //                    m_nHitsperLB_B++;
@@ -753,16 +823,6 @@ StatusCode TRTMonitoringRun3RAW_Alg::fillTRTRDOs(const TRT_RDO_Container& rdoCon
             } else if (ibe == 1) {
                 nTRTHits[ibe]++;
 
-                if (m_doStraws) {
-                    if (isArgonStraw) {
-                        HitWMap_Ar = thisStrawNumber;
-                        fill("RDOHistograms1"+std::to_string(iside), HitWMap_Ar_passed, HitWMap_Ar);
-                    } else {
-                        HitWMap = thisStrawNumber;
-                        fill("RDOHistograms1"+std::to_string(iside), HitWMap_passed, HitWMap);
-                    }
-                }
-
                 if (m_doShift) {
 //                    m_nHitsperLB_E[iside]++;
 
@@ -772,196 +832,54 @@ StatusCode TRTMonitoringRun3RAW_Alg::fillTRTRDOs(const TRT_RDO_Container& rdoCon
                 }
             }
 
-            if (m_doExpert) {
-                if (m_doStraws) { // Experimental
-                    HitWMapS = thisStrawNumber;
-                    HitWMapS_passed = 0.0;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitWMapS_passed, HitWMapS);
-                }
-                if (m_doChips) { // Experimental
-                    HitWMapC = chip - 1;
-                    HitWMapC_passed = 0.0;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitWMapC_passed, HitWMapC);
-                }
-                if ( (driftTimeBin > 2) && (driftTimeBin < 17) ) {
-                    if (m_doStraws) {
-                        HitWMapS = thisStrawNumber;
-                        HitWMapS_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitWMapS_passed, HitWMapS);
-                    }
-                    if (m_doChips) {
-                        HitWMapC = chip - 1;
-                        HitWMapC_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitWMapC_passed, HitWMapC);
-                    }
-                }
 
+            if (m_doExpert) {
                 float trailingEdgeScaled = (trailingEdge + 1)*3.125;
 
-                if ((trailingEdge < 23) && !lastBinHigh && !firstBinHigh) {
-                    if (m_doStraws) {
-                        HitTrWMapS_x = thisStrawNumber;
-                        HitTrWMapS_y = trailingEdgeScaled;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitTrWMapS_x, HitTrWMapS_y);
-                    }
-                    if (m_doChips) {
-                        HitTrWMapC_x = chip - 1;
-                        HitTrWMapC_y = trailingEdgeScaled;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitTrWMapC_x, HitTrWMapC_y);
-                    }
-                }
-                if (m_doStraws) {
-                    HitTrMapS_x = thisStrawNumber;
-                    HitTrMapS_y = trailingEdgeScaled;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitTrMapS_x, HitTrMapS_y);
-                }
-                if (m_doChips) {
-                        HitTrMapC_x = chip - 1;
-                        HitTrMapC_y = trailingEdgeScaled;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitTrMapC_x, HitTrMapC_y);
-                    }
-
                 if (m_doStraws) { // Experimental
-                    HitHMapS = thisStrawNumber;
-                    HitHMapS_passed = 0.0;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitHMapS_passed, HitHMapS);
+                    straw_struct& this_struct = straw_map[ibe][iphi_module].emplace_back();
+                    this_struct.strawNumber=thisStrawNumber;
+                    this_struct.HitWMapS_passed=((driftTimeBin > 2) && (driftTimeBin < 17) ? 1 : 0);
+                    this_struct.HitHMapS_passed=highlevel;
+                    this_struct.HitHWMapS_passed=(highlevel && is_middleHTbit_high);
+                    this_struct.HitTrMapS_y=trailingEdgeScaled;
+                    this_struct.HitAMapS_passed=((firstBinHigh || lastBinHigh || driftTimeBin > 0 || trailingEdge < 23) ? 1 : 0);
+                    this_struct.HitAWMapS_passed=(is_anybininVgate_high ? 1 : 0);
+                    this_struct.HitToTMapS_y = timeOverThreshold;
+                    this_struct.HitToTLong_cut = (timeOverThreshold > m_longToTCut);
+                    this_struct.HitTrWMapS_cut = (trailingEdge < 23) && !lastBinHigh && !firstBinHigh;
                 }
                 if (m_doChips) { // Experimental
-                    HitHMapC = chip - 1;
-                    HitHMapC_passed = 0.0;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitHMapC_passed, HitHMapC);
-                }
-                if (highlevel) {
-                    if (m_doStraws) {
-                        HitHMapS = thisStrawNumber;
-                        HitHMapS_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitHMapS_passed, HitHMapS);
-                    }
-                    if (m_doChips) {
-                        HitHMapC = chip - 1;
-                        HitHMapC_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitHMapC_passed, HitHMapC);
-                    }
-
-                    if (m_doStraws) { // Experimental
-                        HitHWMapS = thisStrawNumber;
-                        HitHWMapS_passed = 0.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitHWMapS_passed, HitHWMapS);
-                    }
-                    if (m_doChips) { // Experimental
-                        HitHWMapC = chip - 1;
-                        HitHWMapC_passed = 0.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitHWMapC_passed, HitHWMapC);
-                    }
-                    if (is_middleHTbit_high) {
-                        if (m_doStraws) {
-                            HitHWMapS = thisStrawNumber;
-                            HitHWMapS_passed = 1.0;
-                            fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitHWMapS_passed, HitHWMapS);
-                        }
-                    if (m_doChips) {
-                        HitHWMapC = chip - 1;
-                        HitHWMapC_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitHWMapC_passed, HitHWMapC);
-                    }
-                    }
-                }
-                
-                if (m_doStraws) { // Experimental
-                    HitAMapS = thisStrawNumber;
-                    HitAMapS_passed = 0.0;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitAMapS_passed, HitAMapS);
-                }
-                if (m_doChips) {// Experimental
-                    HitAMapC = chip - 1;
-                    HitAMapC_passed = 0.0;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitAMapC_passed, HitAMapC);
-                }
-
-                if (firstBinHigh || lastBinHigh || driftTimeBin > 0 || trailingEdge < 23) {
-                    if (m_doStraws) {
-                        HitAMapS = thisStrawNumber;
-                        HitAMapS_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitAMapS_passed, HitAMapS);
-                    }
-                    if (m_doChips) {
-                        HitAMapC = chip - 1;
-                        HitAMapC_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitAMapC_passed, HitAMapC);
-                    }
-                }
-
-                if (m_doStraws) {// Experimental
-                    HitAWMapS = thisStrawNumber;
-                    HitAWMapS_passed = 0.0;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitAWMapS_passed, HitAWMapS);
-                }
-                if (m_doChips) {// Experimental
-                    HitAWMapC = chip - 1;
-                    HitAWMapC_passed = 0.0;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitAWMapC_passed, HitAWMapC);
-                }
-
-                if ( is_anybininVgate_high) {
-                    if (m_doStraws) {
-                        HitAWMapS = thisStrawNumber;
-HitAWMapS_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitAWMapS_passed, HitAWMapS);
-                    }
-                    if (m_doChips) {
-                        HitAWMapC = chip - 1;
-HitAWMapC_passed = 1.0;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitAWMapC_passed, HitAWMapC);
-                    }
-                }
-        
-                if (m_doStraws) {
-                    HitToTMapS_x = thisStrawNumber;
-                    HitToTMapS_y = timeOverThreshold;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitToTMapS_x, HitToTMapS_y);
-
-                    if (timeOverThreshold > m_longToTCut) {
-                        HitToTLongMapS_x = thisStrawNumber;
-                        HitToTLongMapS_y = timeOverThreshold;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitToTLongMapS_x, HitToTLongMapS_y);
-                        HitToTLongTrMapS_x = thisStrawNumber;
-                        HitToTLongTrMapS_y = trailingEdgeScaled;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitToTLongTrMapS_x, HitToTLongTrMapS_y);
-                    }
-                }
-
-                if (m_doChips) {
-                    HitToTMapC_x = chip - 1;
-                    HitToTMapC_y = timeOverThreshold;
-                    fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HitToTMapC_x, HitToTMapC_y);
-                }
-
-                if (m_doChips) {
+                    chip_struct& this_struct = chip_map[ibe][iphi_module].emplace_back();
+                    this_struct.chipNumber = chip - 1;
+                    this_struct.HitWMapC_passed = (driftTimeBin > 2) && (driftTimeBin < 17) ? 1 : 0;
+                    this_struct.HitHMapC_passed = highlevel;
+                    this_struct.HitHWMapC_passed = highlevel && is_middleHTbit_high;
+                    this_struct.HitTrMapC_y = trailingEdgeScaled;
+                    this_struct.HitAMapC_passed = ((firstBinHigh || lastBinHigh || driftTimeBin > 0 || trailingEdge < 23) ? 1 : 0);
+                    this_struct.HitAWMapC_passed = is_anybininVgate_high ? 1 : 0;
+                    this_struct.HitToTMapC_y = timeOverThreshold;
+                    this_struct.HitTrWMapC_cut = (trailingEdge < 23) && !lastBinHigh && !firstBinHigh;
+                    this_struct.HtoBCMap_cut=false;
+                    this_struct.HtoBCMapB_y = board - 1;
+                    this_struct.HtoBCMapC_x = -1;
+                    this_struct.HtoBCMapB_x = -1;
                     if (p_lolum->highLevel(1)) {
-                        HtoBCMapC_x = 0.;
-                        HtoBCMapC_y = chip - 1;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HtoBCMapC_x, HtoBCMapC_y);
-                        HtoBCMapB_x = 0.;
-                        HtoBCMapB_y = board - 1;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HtoBCMapB_x, HtoBCMapB_y);
+                        this_struct.HtoBCMapC_x = 0.;
+                        this_struct.HtoBCMapB_x = 0.;
+                        this_struct.HtoBCMap_cut=true;
                     }
 
                     if (p_lolum->highLevel(2)) {
-                        HtoBCMapC_x = 1.;
-                        HtoBCMapC_y = chip - 1;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HtoBCMapC_x, HtoBCMapC_y);
-                        HtoBCMapB_x = 1.;
-                        HtoBCMapB_y = board - 1;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HtoBCMapB_x, HtoBCMapB_y);
+                        this_struct.HtoBCMapC_x = 1.;
+                        this_struct.HtoBCMapB_x = 1.;
+                        this_struct.HtoBCMap_cut=true;
                     }
 
                     if (p_lolum->highLevel(3)) {
-                        HtoBCMapC_x = 2.;
-                        HtoBCMapC_y = chip - 1;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HtoBCMapC_x, HtoBCMapC_y);
-                        HtoBCMapB_x = 2.;
-                        HtoBCMapB_y = board - 1;
-                        fill("RDOStackHistograms"+std::to_string(ibe)+std::to_string(iphi_module), HtoBCMapB_x, HtoBCMapB_y);
+                        this_struct.HtoBCMapC_x = 2.;
+                        this_struct.HtoBCMapB_x = 2.;
+                        this_struct.HtoBCMap_cut=true;
                     }
                 }
             }
@@ -1015,6 +933,63 @@ HitAWMapC_passed = 1.0;
         }
     }
 
+    for (const auto& ibarrel_ecpair : straw_shifter_map) {
+        int ibe = abs(ibarrel_ecpair.first) - 1;
+        int iside = ibarrel_ecpair.first > 0 ? 0 : 1;
+        auto strawNumber          = Monitored::Collection("strawNumber", ibarrel_ecpair.second, [](const auto& s){return s.strawNumber;});
+        auto HitWMap_passed       = Monitored::Collection("HitWMap_passed", ibarrel_ecpair.second, [](const auto& s){return s.HitWMap_passed;});
+        auto isAr    = Monitored::Collection("isAr", ibarrel_ecpair.second, [](const auto& s){return s.isAr;});
+        auto isNotAr    = Monitored::Collection("isNotAr", ibarrel_ecpair.second, [](const auto& s){return not s.isAr;});
+        if (ibe == 0) {
+            fill("RDOHistograms0", strawNumber, HitWMap_passed, isAr, isNotAr);
+        } else if (ibe == 1) {
+            fill("RDOHistograms1"+std::to_string(iside), strawNumber, HitWMap_passed, isAr, isNotAr);
+        }
+    }
+
+    for (const auto& ibepair : straw_map) {
+        for (const auto& iphi_modulepair : ibepair.second ) {
+            auto strawNumber          = Monitored::Collection("strawNumber", iphi_modulepair.second, [](const auto& s){return s.strawNumber;});
+            auto HitWMapS_passed      = Monitored::Collection("HitWMapS_passed", iphi_modulepair.second, [](const auto& s){return s.HitWMapS_passed;});
+            auto HitAWMapS_passed     = Monitored::Collection("HitAWMapS_passed", iphi_modulepair.second, [](const auto& s){return s.HitAWMapS_passed;});
+            auto HitAMapS_passed      = Monitored::Collection("HitAMapS_passed", iphi_modulepair.second, [](const auto& s){return s.HitAMapS_passed;});
+            auto HitHMapS_passed      = Monitored::Collection("HitHMapS_passed", iphi_modulepair.second, [](const auto& s){return s.HitHMapS_passed;});
+            auto HitHWMapS_passed     = Monitored::Collection("HitHWMapS_passed", iphi_modulepair.second, [](const auto& s){return s.HitHWMapS_passed;});
+            auto HitTrMapS_y          = Monitored::Collection("HitTrMapS_y", iphi_modulepair.second, [](const auto& s){return s.HitTrMapS_y;});
+            auto HitToTMapS_y         = Monitored::Collection("HitToTMapS_y", iphi_modulepair.second, [](const auto& s){return s.HitToTMapS_y;});
+            auto HitToTLong_cut       = Monitored::Collection("HitToTLong_cut", iphi_modulepair.second, [](const auto& s){return s.HitToTLong_cut;});
+            auto HitTrWMapS_cut       = Monitored::Collection("HitTrWMapS_cut", iphi_modulepair.second, [](const auto& s){return s.HitTrWMapS_cut;});
+
+            fill("RDOStackHistograms"+std::to_string(ibepair.first)+std::to_string(iphi_modulepair.first), strawNumber,
+                 HitWMapS_passed, HitHWMapS_passed, HitHMapS_passed, HitAMapS_passed, HitAWMapS_passed,
+                 HitTrMapS_y, HitToTMapS_y, HitToTLong_cut, HitTrWMapS_cut);
+        }
+    }
+
+    for (const auto& ibepair : chip_map) {
+        for (const auto& iphi_modulepair : ibepair.second ) {
+            auto chipNumber           = Monitored::Collection("chipNumber", iphi_modulepair.second, [](const auto& s){return s.chipNumber;});
+            auto HitWMapC_passed      = Monitored::Collection("HitWMapC_passed", iphi_modulepair.second, [](const auto& s){return s.HitWMapC_passed;});
+            auto HitAWMapC_passed     = Monitored::Collection("HitAWMapC_passed", iphi_modulepair.second, [](const auto& s){return s.HitAWMapC_passed;});
+            auto HitAMapC_passed      = Monitored::Collection("HitAMapC_passed", iphi_modulepair.second, [](const auto& s){return s.HitAMapC_passed;});
+            auto HitHMapC_passed      = Monitored::Collection("HitHMapC_passed", iphi_modulepair.second, [](const auto& s){return s.HitHMapC_passed;});
+            auto HitHWMapC_passed     = Monitored::Collection("HitHWMapC_passed", iphi_modulepair.second, [](const auto& s){return s.HitHWMapC_passed;});
+            auto HitTrMapC_y          = Monitored::Collection("HitTrMapC_y", iphi_modulepair.second, [](const auto& s){return s.HitTrMapC_y;});
+            auto HitToTMapC_y         = Monitored::Collection("HitToTMapC_y", iphi_modulepair.second, [](const auto& s){return s.HitToTMapC_y;});
+            auto HtoBCMapC_x          = Monitored::Collection("HtoBCMapC_x", iphi_modulepair.second, [](const auto& s){return s.HtoBCMapC_x;});
+            auto HtoBCMapB_x          = Monitored::Collection("HtoBCMapB_x", iphi_modulepair.second, [](const auto& s){return s.HtoBCMapB_x;});
+            auto HtoBCMapB_y          = Monitored::Collection("HtoBCMapB_y", iphi_modulepair.second, [](const auto& s){return s.HtoBCMapB_y;});
+            auto HtoBCMap_cut = Monitored::Collection("HtoBCMap_cut", iphi_modulepair.second, [](const auto& s){return s.HtoBCMap_cut;});
+            auto HitTrWMapC_cut = Monitored::Collection("HitTrWMapC_cut", iphi_modulepair.second, [](const auto& s){return s.HitTrWMapC_cut;});
+
+            fill("RDOStackHistograms"+std::to_string(ibepair.first)+std::to_string(iphi_modulepair.first), 
+                 chipNumber, HitWMapC_passed, HitHWMapC_passed, HitHMapC_passed,
+                 HitAMapC_passed, HitAWMapC_passed, HitTrMapC_y, HitToTMapC_y, 
+                 HtoBCMapC_x, HtoBCMapB_x, HtoBCMapB_y,
+                 HtoBCMap_cut, HitTrWMapC_cut);
+        }
+    }
+
     OccAll = nhitsall/350848.;
     fill("RDOHistograms0", OccAll);
 
@@ -1064,16 +1039,12 @@ HitAWMapC_passed = 1.0;
 //                            m_LLOcc[ibe][LLocc_index] += occLL;
                             AvgLLOcc_side_x = i - (32 * nclass);
                             AvgLLOcc_side_y = occLL;
-                            fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgLLOcc_side_x, AvgLLOcc_side_y);
                             AvgHLOcc_side_x = i - (32 * nclass);
                             AvgHLOcc_side_y = occHL;
-                            fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgHLOcc_side_x, AvgHLOcc_side_y);
                             AvgLLOccMod_side_x = i;
                             AvgLLOccMod_side_y = occLL;
-                            fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgLLOccMod_side_x, AvgLLOccMod_side_y);
                             AvgHLOccMod_side_x = i;
                             AvgHLOccMod_side_y = occHL;
-                            fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgHLOccMod_side_x, AvgHLOccMod_side_y);
                         } else if (ibe == 1) {
                             float occLL = float(moduleHits_E[modulenum_tmp]) / float(numberOfStrawsWheel[nclass]);
                             float occHL = float(HLmoduleHits_E[modulenum_tmp]) / float(numberOfStrawsWheel[nclass]);
@@ -1085,17 +1056,15 @@ HitAWMapC_passed = 1.0;
                             }
                             AvgLLOcc_side_x = i - (32 * nclass);
                             AvgLLOcc_side_y = occLL;
-                            fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgLLOcc_side_x, AvgLLOcc_side_y);
                             AvgHLOcc_side_x = i - (32 * nclass);
                             AvgHLOcc_side_y = occHL;
-                            fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgHLOcc_side_x, AvgHLOcc_side_y);
                             AvgLLOccMod_side_x = i;
                             AvgLLOccMod_side_y = occLL;
-                            fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgLLOccMod_side_x, AvgLLOccMod_side_y);
                             AvgHLOccMod_side_x = i;
                             AvgHLOccMod_side_y = occHL;
-                            fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgHLOccMod_side_x, AvgHLOccMod_side_y);
                         }
+                        fill("RDOLLHLOccHistograms"+std::to_string(ibe)+std::to_string(iside), AvgLLOcc_side_x, AvgLLOcc_side_y, AvgHLOcc_side_x, AvgHLOcc_side_y,
+                                AvgLLOccMod_side_x, AvgLLOccMod_side_y, AvgHLOccMod_side_x, AvgHLOccMod_side_y);
                     }
                 }
             }
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataMonAlg.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataMonAlg.cxx
index 9d0df654342e..8315c9063843 100755
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataMonAlg.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataMonAlg.cxx
@@ -296,35 +296,39 @@ StatusCode MdtRawDataMonAlg::fillHistograms(const EventContext& ctx) const
   int lumiblock = -1;
   SG::ReadHandle<xAOD::EventInfo> evt(m_eventInfo, ctx);
   lumiblock = evt->lumiBlock();
-  
-  ATH_MSG_DEBUG("MdtRawDataMonAlg::MDT RawData Monitoring Histograms being filled" );
+
+  ATH_MSG_DEBUG("MdtRawDataMonAlg::MDT RawData Monitoring Histograms being filled");
 
   // Retrieve the LVL1 Muon RoIs:
   bool trig_BARREL = false;
   bool trig_ENDCAP = false;
-  if (!m_l1RoiKey.empty()) {
+  if (!m_l1RoiKey.empty())
+  {
     SG::ReadHandle<xAOD::MuonRoIContainer> muonRoIs(m_l1RoiKey, ctx);
-    if(!muonRoIs.isValid()){
-      ATH_MSG_ERROR("evtStore() does not contain muon L1 ROI Collection with name "<< m_l1RoiKey);
+    if (!muonRoIs.isValid())
+    {
+      ATH_MSG_ERROR("evtStore() does not contain muon L1 ROI Collection with name " << m_l1RoiKey);
     }
     //DEV still needed ? does not compile
-    if(muonRoIs.isPresent() && muonRoIs.isValid()){
-      ATH_MSG_VERBOSE( "Retrieved LVL1MuonRoIs object with key: " << m_l1RoiKey.key() ); 
-      trig_BARREL = std::any_of(muonRoIs->begin(), muonRoIs->end(), 
-                                [](const auto& i){return i->getSource() == xAOD::MuonRoI::RoISource::Barrel;});
-      trig_ENDCAP = std::any_of(muonRoIs->begin(), muonRoIs->end(), 
-                                [](const auto& i){return i->getSource() == xAOD::MuonRoI::RoISource::Endcap;});
+    if (muonRoIs.isPresent() && muonRoIs.isValid())
+    {
+      ATH_MSG_VERBOSE("Retrieved LVL1MuonRoIs object with key: " << m_l1RoiKey.key());
+      trig_BARREL = std::any_of(muonRoIs->begin(), muonRoIs->end(),
+                                [](const auto &i) { return i->getSource() == xAOD::MuonRoI::RoISource::Barrel; });
+      trig_ENDCAP = std::any_of(muonRoIs->begin(), muonRoIs->end(),
+                                [](const auto &i) { return i->getSource() == xAOD::MuonRoI::RoISource::Endcap; });
     }
   }
 
-  //declare MDT stuff 
+  //declare MDT stuff
   SG::ReadHandle<Muon::MdtPrepDataContainer> mdt_container(m_key_mdt, ctx);
-  if(!mdt_container.isValid()){
-    ATH_MSG_ERROR("evtStore() does not contain mdt prd Collection with name "<< m_key_mdt);
+  if (!mdt_container.isValid())
+  {
+    ATH_MSG_ERROR("evtStore() does not contain mdt prd Collection with name " << m_key_mdt);
     return StatusCode::FAILURE;
   }
 
-  ATH_MSG_DEBUG("****** mdtContainer->size() : " << mdt_container->size());  
+  ATH_MSG_DEBUG("****** mdtContainer->size() : " << mdt_container->size());
 
   int nColl = 0;        // Number of MDT chambers with hits
   int nColl_ADCCut = 0; // Number of MDT chambers with hits above ADC cut
@@ -333,8 +337,9 @@ StatusCode MdtRawDataMonAlg::fillHistograms(const EventContext& ctx) const
 
   //declare RPC stuff
   SG::ReadHandle<Muon::RpcPrepDataContainer> rpc_container(m_key_rpc, ctx);
-  if(!rpc_container.isValid()){
-    ATH_MSG_ERROR("evtStore() does not contain rpc prd Collection with name "<< m_key_rpc);
+  if (!rpc_container.isValid())
+  {
+    ATH_MSG_ERROR("evtStore() does not contain rpc prd Collection with name " << m_key_rpc);
     return StatusCode::FAILURE;
   }
 
@@ -343,160 +348,193 @@ StatusCode MdtRawDataMonAlg::fillHistograms(const EventContext& ctx) const
   Muon::RpcPrepDataContainer::const_iterator containerIt;
 
   /////////////////////////////this is the important plot!
-  float Nhitsrpc = 0 ;
-  for (containerIt = rpc_container->begin() ; containerIt != rpc_container->end() ; ++containerIt)
+  float Nhitsrpc = 0;
+  for (containerIt = rpc_container->begin(); containerIt != rpc_container->end(); ++containerIt)
   {
-    for (Muon::RpcPrepDataCollection::const_iterator rpcPrd = (*containerIt)->begin(); rpcPrd!=(*containerIt)->end(); ++rpcPrd)
+    for (Muon::RpcPrepDataCollection::const_iterator rpcPrd = (*containerIt)->begin(); rpcPrd != (*containerIt)->end(); ++rpcPrd)
     {
-      ++Nhitsrpc ;
-    }}
-  float Nhitsmdt = 0 ;
+      ++Nhitsrpc;
+    }
+  }
+  float Nhitsmdt = 0;
   bool isNoiseBurstCandidate = false;
-  Muon::MdtPrepDataContainer::const_iterator MdtcontainerIt ;
-  for (MdtcontainerIt = mdt_container->begin() ; MdtcontainerIt != mdt_container->end() ; ++MdtcontainerIt)
+  Muon::MdtPrepDataContainer::const_iterator MdtcontainerIt;
+  for (MdtcontainerIt = mdt_container->begin(); MdtcontainerIt != mdt_container->end(); ++MdtcontainerIt)
   {
-    for (Muon::MdtPrepDataCollection::const_iterator mdtCollection=(*MdtcontainerIt)->begin(); mdtCollection!=(*MdtcontainerIt)->end(); ++mdtCollection )
+    for (Muon::MdtPrepDataCollection::const_iterator mdtCollection = (*MdtcontainerIt)->begin(); mdtCollection != (*MdtcontainerIt)->end(); ++mdtCollection)
     {
-      ++Nhitsmdt ;
+      ++Nhitsmdt;
     }
   }
 
-  if(Nhitsmdt > m_HighOccThreshold) isNoiseBurstCandidate = true;
-  std::string type="MDT";
+  if (Nhitsmdt > m_HighOccThreshold)
+    isNoiseBurstCandidate = true;
+  std::string type = "MDT";
   std::string hardware_name;
 
-  std::map<std::string,int> evnt_hitsperchamber_map;
-  std::set<std::string>  chambers_from_tracks;
+  std::map<std::string, int> evnt_hitsperchamber_map;
+  std::set<std::string> chambers_from_tracks;
 
-  if (m_doMdtESD==true) { 
+  if (m_doMdtESD == true)
+  {
     //DEV this shouls be done in some other way, in AthenaMonManager there is
     // Gaudi::Property<std::string> m_environmentStr {this,"Environment","user"}; ///< Environment string pulled from the job option and converted to enum
     //per il momento commento...
     //    if(m_environment == AthenaMonManager::tier0 || m_environment == AthenaMonManager::tier0ESD || m_environment == AthenaMonManager::online) {
-    if(true) { //DEV to be updated
+    if (true)
+    { //DEV to be updated
 
       SG::ReadHandle<xAOD::MuonContainer> muons(m_muonKey, ctx);
-      if(!muons.isValid()){
-	ATH_MSG_ERROR("evtStore() does not contain muon Collection with name "<< m_muonKey);
-	return StatusCode::FAILURE;
+      if (!muons.isValid())
+      {
+        ATH_MSG_ERROR("evtStore() does not contain muon Collection with name " << m_muonKey);
+        return StatusCode::FAILURE;
       }
-      for(const auto mu : *muons){
-
-	if(! (mu->muonType() == xAOD::Muon::Combined)) continue;
-	xAOD::Muon::Quality quality = m_muonSelectionTool->getQuality(*mu);
-	if (!(quality <= xAOD::Muon::Medium)) continue;
-	const   xAOD::TrackParticle* tp = mu->primaryTrackParticle();
-	if(tp){
-	  const Trk::Track * trk= tp->track();
-	  //this work only if tp are available
-	  if(!trk)  continue;	  
-	  //
-	  uint8_t ntri_eta=0;
-	  uint8_t n_phi=0; 
-	  tp->summaryValue(ntri_eta, xAOD::numberOfTriggerEtaLayers); 
-	  tp->summaryValue(n_phi, xAOD::numberOfPhiLayers); 
-	  if(ntri_eta+n_phi==0) continue;
-	}
+      for (const auto mu : *muons)
+      {
+
+        if (!(mu->muonType() == xAOD::Muon::Combined))
+          continue;
+        xAOD::Muon::Quality quality = m_muonSelectionTool->getQuality(*mu);
+        if (!(quality <= xAOD::Muon::Medium))
+          continue;
+        const xAOD::TrackParticle *tp = mu->primaryTrackParticle();
+        if (tp)
+        {
+          const Trk::Track *trk = tp->track();
+          //this work only if tp are available
+          if (!trk)
+            continue;
+          //
+          uint8_t ntri_eta = 0;
+          uint8_t n_phi = 0;
+          tp->summaryValue(ntri_eta, xAOD::numberOfTriggerEtaLayers);
+          tp->summaryValue(n_phi, xAOD::numberOfPhiLayers);
+          if (ntri_eta + n_phi == 0)
+            continue;
+        }
       }
 
       MDTOverviewHistogramStruct overviewPlots;
       MDTSummaryHistogramStruct summaryPlots[4][4][16][4][4]; // [region][layer][phi][crate_region][crate]
       //loop in MdtPrepDataContainer
-      for (Muon::MdtPrepDataContainer::const_iterator containerIt = mdt_container->begin(); containerIt != mdt_container->end(); ++containerIt) {
-        if (containerIt == mdt_container->end() || (*containerIt)->size()==0) continue;  //check if there are counts  
+      std::vector<std::string> v_hit_in_chamber_allphi;
+      std::map<std::string, std::vector<std::string>> v_hit_in_chamber;
+      for (Muon::MdtPrepDataContainer::const_iterator containerIt = mdt_container->begin(); containerIt != mdt_container->end(); ++containerIt)
+      {
+        if (containerIt == mdt_container->end() || (*containerIt)->size() == 0)
+          continue; //check if there are counts
         nColl++;
-        
+
         bool isHit_above_ADCCut = false;
         // loop over hits
-        for (Muon::MdtPrepDataCollection::const_iterator mdtCollection=(*containerIt)->begin(); mdtCollection!=(*containerIt)->end(); ++mdtCollection ) 
+        for (Muon::MdtPrepDataCollection::const_iterator mdtCollection = (*containerIt)->begin(); mdtCollection != (*containerIt)->end(); ++mdtCollection)
         {
           nPrd++;
 
-
           float adc = (*mdtCollection)->adc();
-	  hardware_name = getChamberName(*mdtCollection);
-          if(hardware_name.substr(0,3) == "BMG") adc /= 4.;
-          if( adc > m_ADCCut ) 
+          hardware_name = getChamberName(*mdtCollection);
+          if (hardware_name.substr(0, 3) == "BMG")
+            adc /= 4.;
+          if (adc > m_ADCCut)
           {
             nPrdcut++;
             isHit_above_ADCCut = true;
-	    std::string phi=hardware_name.substr( hardware_name.length() - 2); 
-	    auto hit_in_chamber = Monitored::Scalar<std::string>("hits_phi_"+phi,hardware_name); 
-	    if(m_do_mdtchamberstatphislice)    fill("MdtMonitor",hit_in_chamber);    
-	    auto hit_in_chamber_allphi = Monitored::Scalar<std::string>("hits_allphi",hardware_name); 
-	    fill("MdtMonitor",hit_in_chamber_allphi);                                                                                   
+            if (m_do_mdtchamberstatphislice)
+            {
+              std::string phi = hardware_name.substr(hardware_name.length() - 2);
+              v_hit_in_chamber[phi].push_back(hardware_name);
+            }
+            v_hit_in_chamber_allphi.push_back(hardware_name);
           }
           fillMDTOverviewVects(*mdtCollection, isNoiseBurstCandidate, overviewPlots);
-	  //=======================================================================
-	  //=======================================================================
-	  //=======================================================================
-
-	  ATH_CHECK(fillMDTSummaryVects(*mdtCollection, chambers_from_tracks, isNoiseBurstCandidate, trig_BARREL, trig_ENDCAP, summaryPlots));
-
-	  //=======================================================================
-	  //=======================================================================
-	  //=======================================================================
-	  if(m_doChamberHists){
-	    ATH_CHECK(fillMDTHistograms(*mdtCollection));
-	  }      
-
-          std::map<std::string,int>::iterator iter_hitsperchamber = evnt_hitsperchamber_map.find(hardware_name);
-          if ( iter_hitsperchamber == evnt_hitsperchamber_map.end() ) { 
-            evnt_hitsperchamber_map.insert( make_pair( hardware_name, 1 ) );
-          } 
-          else {
+          //=======================================================================
+          //=======================================================================
+          //=======================================================================
+
+          ATH_CHECK(fillMDTSummaryVects(*mdtCollection, chambers_from_tracks, isNoiseBurstCandidate, trig_BARREL, trig_ENDCAP, summaryPlots));
+
+          //=======================================================================
+          //=======================================================================
+          //=======================================================================
+          if (m_doChamberHists)
+          {
+            ATH_CHECK(fillMDTHistograms(*mdtCollection));
+          }
+
+          std::map<std::string, int>::iterator iter_hitsperchamber = evnt_hitsperchamber_map.find(hardware_name);
+          if (iter_hitsperchamber == evnt_hitsperchamber_map.end())
+          {
+            evnt_hitsperchamber_map.insert(make_pair(hardware_name, 1));
+          }
+          else
+          {
             iter_hitsperchamber->second += 1;
-          }     
+          }
 
         } // for loop over hits mdtcollection
-        if( isHit_above_ADCCut ) 
+        if (isHit_above_ADCCut)
           nColl_ADCCut++;
       } //loop in MdtPrepDataContainer
+      if (m_do_mdtchamberstatphislice)
+      {
+        for (const auto &phiitem : v_hit_in_chamber)
+        {
+          auto hit_in_chamber = Monitored::Collection("hits_phi_" + phiitem.first, phiitem.second);
+          fill("MdtMonitor", hit_in_chamber);
+        }
+      }
+      auto hit_in_chamber_allphi = Monitored::Collection("hits_allphi", v_hit_in_chamber_allphi);
+      fill("MdtMonitor", hit_in_chamber_allphi);
 
       fillMDTOverviewHistograms(overviewPlots);
 
-      ATH_CHECK( fillMDTSummaryHistograms(summaryPlots, lumiblock) );
-      
+      ATH_CHECK(fillMDTSummaryHistograms(summaryPlots, lumiblock));
+
       int nHighOccChambers = 0;
-      for(const auto& iterstat: evnt_hitsperchamber_map) {
-	const auto iter_tubesperchamber = m_tubesperchamber_map.find(iterstat.first);
-	if (ATH_UNLIKELY(iter_tubesperchamber == m_tubesperchamber_map.end())) { // indicates software error
-	  ATH_MSG_ERROR("Unable to find chamber " << iterstat.first);
-	  continue;
-	}
-	float nTubes = iter_tubesperchamber->second;
-	float hits = iterstat.second;
-	float occ = hits/nTubes;
-	if ( occ > 0.1 ) nHighOccChambers++;
+      for (const auto &iterstat : evnt_hitsperchamber_map)
+      {
+        const auto iter_tubesperchamber = m_tubesperchamber_map.find(iterstat.first);
+        if (ATH_UNLIKELY(iter_tubesperchamber == m_tubesperchamber_map.end()))
+        { // indicates software error
+          ATH_MSG_ERROR("Unable to find chamber " << iterstat.first);
+          continue;
+        }
+        float nTubes = iter_tubesperchamber->second;
+        float hits = iterstat.second;
+        float occ = hits / nTubes;
+        if (occ > 0.1)
+          nHighOccChambers++;
       }
-      
+
       auto nHighOccChambers_mon = Monitored::Scalar<float>("nHighOccChambers_mon", nHighOccChambers);
 
       auto nPrd_mon = Monitored::Scalar<int>("nPrd_mon", nPrd);
       auto nPrdcut_mon = Monitored::Scalar<int>("nPrdcut_mon", nPrdcut);
       auto Nhitsrpc_mon = Monitored::Scalar<int>("Nhitsrpc_mon", Nhitsrpc);
-      auto nColl_mon = Monitored::Scalar<int>("nColl_mon", nColl);      
+      auto nColl_mon = Monitored::Scalar<int>("nColl_mon", nColl);
       auto nColl_ADCCut_mon = Monitored::Scalar<int>("nColl_ADCCut_mon", nColl_ADCCut);
-      
-      fill("MdtMonitor",nHighOccChambers_mon,nPrd_mon,Nhitsrpc_mon,nPrdcut_mon, nColl_mon, nColl_ADCCut_mon);
+
+      fill("MdtMonitor", nHighOccChambers_mon, nPrd_mon, Nhitsrpc_mon, nPrdcut_mon, nColl_mon, nColl_ADCCut_mon);
 
       //        if (m_mdtglobalhitstime) m_mdtglobalhitstime->Fill(m_time - m_firstTime);
 
-    }  //m_environment == AthenaMonManager::tier0 || m_environment == AthenaMonManager::tier0ESD   
-  } //m_doMdtESD==true
+    } //m_environment == AthenaMonManager::tier0 || m_environment == AthenaMonManager::tier0ESD
+  }   //m_doMdtESD==true
 
-  SG::ReadHandle<Trk::SegmentCollection> segms(m_segm_type, ctx);                                                                                                   
-  if(!segms.isValid()){                                                                                                                                                                     
-    ATH_MSG_ERROR("evtStore() does not contain mdt segms Collection with name "<< m_segm_type);                                                                                        
-    return StatusCode::FAILURE;                                                                                                                                                                
-  }                                  
+  SG::ReadHandle<Trk::SegmentCollection> segms(m_segm_type, ctx);
+  if (!segms.isValid())
+  {
+    ATH_MSG_ERROR("evtStore() does not contain mdt segms Collection with name " << m_segm_type);
+    return StatusCode::FAILURE;
+  }
 
-  MDTSegmentHistogramStruct   segsPlots[4][4][16]; // [region][layer][phi]
-  ATH_CHECK(handleEvent_effCalc_fillVects( segms.cptr(), segsPlots ));    
+  MDTSegmentHistogramStruct segsPlots[4][4][16]; // [region][layer][phi]
+  ATH_CHECK(handleEvent_effCalc_fillVects(segms.cptr(), segsPlots));
   ATH_CHECK(fillMDTSegmentHistograms(segsPlots));
 
   return StatusCode::SUCCESS;
-} 
+}
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 
 void MdtRawDataMonAlg::fillMDTOverviewVects( const Muon::MdtPrepData* mdtCollection, bool &isNoiseBurstCandidate, MDTOverviewHistogramStruct& vects ) const {
@@ -828,20 +866,15 @@ StatusCode MdtRawDataMonAlg::fillMDTSummaryHistograms( const MDTSummaryHistogram
 	    
 	    auto adc_mon =  Monitored::Collection("adc_mon", thisVects.adc_mon); 
 	    auto tdc_mon =  Monitored::Collection("tdc_mon", thisVects.tdc_mon); 
-	    fill(MDT_regionGroup, adc_mon, tdc_mon);
 	    
 	    auto tdc_mon_nb2 =  Monitored::Collection("tdc_mon_nb2", thisVects.tdc_mon_nb2); 
 	    auto adc_mon_nb2 =  Monitored::Collection("adc_mon_nb2", thisVects.adc_mon_nb2); 
-	    fill(MDT_regionGroup, tdc_mon_nb2, adc_mon_nb2);
 	    
 	    auto tdc_mon_nb1 =  Monitored::Collection("tdc_mon_nb1", thisVects.tdc_mon_nb1); 
 	    auto adc_mon_nb1 =  Monitored::Collection("adc_mon_nb1", thisVects.adc_mon_nb1); 
-	    fill(MDT_regionGroup, tdc_mon_nb1, adc_mon_nb1);
 	    
 	    auto adc_mon_adccut =  Monitored::Collection("adc_mon_adccut", thisVects.adc_mon_adccut);
 	    auto tdc_mon_adccut =  Monitored::Collection("tdc_mon_adccut", thisVects.tdc_mon_adccut);
-	    //	    fill(MDT_regionGroup, stationEta, tdc_mon_adccut, adc_mon_adccut);
-	    fill(MDT_regionGroup, tdc_mon_adccut, adc_mon_adccut);
 	    
 	    std::string varx = iregion < 2 ? "x_mon_barrel" : "x_mon_endcap";
 	    std::string vary = iregion < 2 ? "y_mon_barrel" : "y_mon_endcap";
@@ -850,19 +883,17 @@ StatusCode MdtRawDataMonAlg::fillMDTSummaryHistograms( const MDTSummaryHistogram
 	    
 	    auto x_mon =  Monitored::Collection(varx, thisVects.x_mon);
 	    auto y_mon =  Monitored::Collection(vary, thisVects.y_mon);
-	    fill("MdtMonitor",x_mon,y_mon);
 	    auto x_mon_noise =  Monitored::Collection(varx_noise, thisVects.x_mon_noise);
 	    auto y_mon_noise =  Monitored::Collection(vary_noise, thisVects.y_mon_noise);
-	    fill("MdtMonitor",x_mon_noise,y_mon_noise);
+	    fill("MdtMonitor",x_mon,y_mon,x_mon_noise,y_mon_noise);
 	    auto tdc_mon_nb3 =  Monitored::Collection("tdc_mon_nb3", thisVects.tdc_mon_nb3); 
-	    fill(MDT_regionGroup, tdc_mon_nb3);
+
 	    
 	    varx = "x_mon_"+region[iregion]+"_"+layer[ilayer];
 	    vary = "y_mon_"+region[iregion]+"_"+layer[ilayer];
 	    
 	    auto x_bin_perML =   Monitored::Collection(varx, thisVects.x_bin_perML);//get the right bin!!!! 
 	    auto y_bin_perML =   Monitored::Collection(vary, thisVects.y_bin_perML);
-	    fill(MDT_regionGroup,x_bin_perML,y_bin_perML);
 	    
 	    if(layer[ilayer]!="Extra"){
 	      varx="x_mon_"+layer[ilayer];
@@ -886,7 +917,9 @@ StatusCode MdtRawDataMonAlg::fillMDTSummaryHistograms( const MDTSummaryHistogram
 	    auto biny_name_bycrate_ontrack = "y_mon_bin_bycrate_ontrack_"+region[crate_region]+"_"+crate[icrate]; //y-axis of these histograms not yet defined
 	    auto biny_var_bycrate_ontrack = Monitored::Collection(biny_name_bycrate_ontrack, thisVects.biny_vslb_bycrate_ontrack); 
 
-	    fill(MDT_regionGroup,tdc_mon_rpc,tdc_mon_tgc,biny_var,lb_mon, biny_var, biny_var_bycrate, biny_var_bycrate_ontrack);
+	    fill(MDT_regionGroup, adc_mon, tdc_mon, tdc_mon_nb2, adc_mon_nb2, tdc_mon_adccut, adc_mon_adccut, tdc_mon_adccut, adc_mon_adccut,
+           tdc_mon_nb3, x_bin_perML, y_bin_perML, tdc_mon_rpc,tdc_mon_tgc,biny_var,lb_mon, 
+           biny_var, biny_var_bycrate, biny_var_bycrate_ontrack);
 
 	    
     //DEV to DO
-- 
GitLab