diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringGlobalRun3Test.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringGlobalRun3Test.py
index 6cf303488b70f74f52b061c851f71c1ccd0cd3af..4d1129310290ee10bff8d32ed3810702f2838d03 100644
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringGlobalRun3Test.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringGlobalRun3Test.py
@@ -9,6 +9,8 @@
 
 doInDetGlobalTrackMonAlg           = True
 doInDetGlobalPrimaryVertexMonAlg   = True
+doInDetGlobalBeamSpotMonAlg        = True
+
 
 from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalTrackMonAlg
 from InDetGlobalMonitoringRun3Test.InDetGlobalTrackMonAlgCfg import InDetGlobalTrackMonAlgCfg
@@ -16,12 +18,14 @@ from InDetGlobalMonitoringRun3Test.InDetGlobalTrackMonAlgCfg import InDetGlobalT
 from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalPrimaryVertexMonAlg
 from InDetGlobalMonitoringRun3Test.InDetGlobalPrimaryVertexMonAlgCfg import InDetGlobalPrimaryVertexMonAlgCfg
 
+from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalBeamSpotMonAlg
+from InDetGlobalMonitoringRun3Test.InDetGlobalBeamSpotMonAlgCfg import InDetGlobalBeamSpotMonAlgCfg
 
-from InDetRecExample.InDetKeys import InDetKeys                                                                                     
-
+from InDetRecExample.InDetKeys import InDetKeys
+from AthenaMonitoring.DQMonFlags import DQMonFlags
 
 kwargsInDetGlobalTrackMonAlg = {
-    'DoIBL' : True,           #InDetFlags.doIBL(), #Turn on/off IBL histograms
+    'DoIBL'      : True,                   #InDetFlags.doIBL(), #Turn on/off IBL histograms
     'TrackName'  : 'CombinedInDetTracks',  #InDetKeys.Tracks()
     'TrackName2' : 'CombinedInDetTracks',  #
     'TrackName3' : 'CombinedInDetTracks',  #
@@ -34,7 +38,14 @@ kwargsInDetGlobalPrimaryVertexMonAlg = {
     'doEnhancedMonitoring'                 : False # InDetFlags.doMonitoringPrimaryVertexingEnhanced()
 }
 
-from AthenaMonitoring.DQMonFlags import DQMonFlags
+kwargsInDetGlobalBeamSpotMonAlg = {
+    'BeamSpotKey'                      : 'BeamSpotData', #InDetKeys.BeamSpotData(),
+    'vxContainerName'                  : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(),
+    'trackContainerName'               : 'InDetTrackParticles', #InDetKeys.xAODTrackParticleContainer(),
+    'useBeamspot'                      : True, # InDetFlags.useBeamConstraint()
+    'vxContainerWithBeamConstraint'    : False # InDetFlags.useBeamConstraint()
+}
+
 
 # old magic
 from AthenaMonitoring import AthMonitorCfgHelperOld
@@ -62,9 +73,18 @@ if doInDetGlobalTrackMonAlg:
   InDetGlobalTrackMonAlgCfg(helper, inDetGlobalTrackMonAlg, **kwargsInDetGlobalTrackMonAlg)
 
 if doInDetGlobalPrimaryVertexMonAlg:
-  myInDetGlobalPrimaryVertexMonAlg = helper.addAlgorithm(InDetGlobalPrimaryVertexMonAlg, 'InDetGlobalPrimaryVertexMonAlg')
+  inDetGlobalPrimaryVertexMonAlg = helper.addAlgorithm(InDetGlobalPrimaryVertexMonAlg, 'InDetGlobalPrimaryVertexMonAlg')
   for k, v in kwargsInDetGlobalPrimaryVertexMonAlg.items():
-      setattr(myInDetGlobalPrimaryVertexMonAlg, k, v)
-  InDetGlobalPrimaryVertexMonAlgCfg(helper, myInDetGlobalPrimaryVertexMonAlg, **kwargsInDetGlobalPrimaryVertexMonAlg)
+      setattr(inDetGlobalPrimaryVertexMonAlg, k, v)
+
+  InDetGlobalPrimaryVertexMonAlgCfg(helper, inDetGlobalPrimaryVertexMonAlg, **kwargsInDetGlobalPrimaryVertexMonAlg)
+
+
+if doInDetGlobalBeamSpotMonAlg:
+  inDetGlobalBeamSpotMonAlg = helper.addAlgorithm(InDetGlobalBeamSpotMonAlg, 'InDetGlobalBeamSpotMonAlg')
+  for k, v in kwargsInDetGlobalBeamSpotMonAlg.items():
+      setattr(inDetGlobalBeamSpotMonAlg, k, v)
+
+  InDetGlobalBeamSpotMonAlgCfg(helper, inDetGlobalBeamSpotMonAlg, **kwargsInDetGlobalBeamSpotMonAlg)
 
 topSequence += helper.result()
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalBeamSpotMonAlg.h b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalBeamSpotMonAlg.h
index 3533eb9af3f2f010e55e7ae8f5627e35c24e571b..224e80a663636cc78d81bc47be5d5b677fc0b996 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalBeamSpotMonAlg.h
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalBeamSpotMonAlg.h
@@ -14,7 +14,7 @@
 // InDetAlignmentMonitoring under the name InDetAlignMonBeamSpot.
 //
 // Written in March 2008 by Juerg Beringer (LBNL)
-// Adapted to AthenaMT 2020 by Per Johansson (Sheffield University)
+// Adapted to AthenaMT 2020 by Per Johansson (Sheffield University) and Leonid Serkin (ICTP)
 //
 // ********************************************************************************
 
@@ -22,32 +22,12 @@
 #define InDetGlobalBeamSpotMonAlg_H
 
 #include "AthenaMonitoring/AthMonitorAlgorithm.h"
-#include "AthenaMonitoringKernel/Monitored.h"
 
 #include "StoreGate/ReadHandleKey.h"
-#include <algorithm>
-
-// tracking
-#include "TrkToolInterfaces/ITrackHoleSearchTool.h"
-#include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h"
-#include "TrkTrack/TrackCollection.h"
-#include "TrkTrackSummary/TrackSummary.h"
-#include "TrkMeasurementBase/MeasurementBase.h"
-#include "TrkRIO_OnTrack/RIO_OnTrack.h"
-#include "InDetReadoutGeometry/SiDetectorElement.h"
-#include "InDetRIO_OnTrack/SiClusterOnTrack.h"
-#include "TrkToolInterfaces/ITrackSummaryTool.h"
 
 // xAOD
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODTracking/VertexContainer.h"
-#include "xAODTracking/Vertex.h"
-
-//for Amg::error helper function:
-#include "EventPrimitives/EventPrimitives.h"
-#include "EventPrimitives/EventPrimitivesHelpers.h"
-
-#include "InDetConditionsSummaryService/IInDetConditionsTool.h"
 
 // Beam condition include(s):
 #include "BeamSpotConditionsData/BeamSpotData.h"
@@ -55,32 +35,28 @@
 //#include <vector>
 #include <string>
 
-//namespace Trk {
-// class ITrackHoleSearchTool;/
-//}
-
 
 class InDetGlobalBeamSpotMonAlg : public AthMonitorAlgorithm {
-
+  
  public:
-
+  
   InDetGlobalBeamSpotMonAlg( const std::string & name, ISvcLocator* pSvcLocator); 
   virtual ~InDetGlobalBeamSpotMonAlg();
   virtual StatusCode initialize() override;
   virtual StatusCode fillHistograms(const EventContext& ctx) const override;
   std::string findComponentString(int bec, int ld) const;
-
+  
  private:
-
+  
   SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };
   std::string m_stream;
-
+  
   bool m_useBeamspot;
   SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerName{this,"vxContainerName","PrimaryVertices","Vertex Container for Global Beamspot Monitoring"};
   bool m_vxContainerWithBeamConstraint;
-
+  
   SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trackContainerName{this,"trackContainerName","InDetTrackParticles","TrackParticle container for Global Beamspot Monitoring"};
-
+  
   std::string m_histFolder;
   std::string m_triggerChainName;
   unsigned int m_minTracksPerVtx;
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalPrimaryVertexMonAlg.h b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalPrimaryVertexMonAlg.h
index f1b2221c12fc3f05e605d959d94da868d1bc208c..84337da5068c473a4fb56a62e69191395bbbb334 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalPrimaryVertexMonAlg.h
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalPrimaryVertexMonAlg.h
@@ -17,72 +17,61 @@
 #define InDetGlobalPrimaryVertexMonAlg_H
 
 #include "AthenaMonitoring/AthMonitorAlgorithm.h"
-#include "AthenaMonitoringKernel/Monitored.h"
 
 // tracking vertex
 #include "StoreGate/ReadHandleKey.h"
 #include "xAODTracking/VertexContainer.h"
-#include "xAODTracking/Vertex.h"
-
-#include <string>
-#include <algorithm>
-
-//for Amg::error helper function:
-#include "EventPrimitives/EventPrimitivesHelpers.h"
 
 //Standard c++
 #include <string>
-#include <map>
-#include <vector>
-
-
 
 //------------------------------
 
 namespace Trk {
+  class Vertex;
   class VxCandidate;
 }
 
 
 
 class InDetGlobalPrimaryVertexMonAlg : public AthMonitorAlgorithm {
-
+  
  public:
-
+  
   InDetGlobalPrimaryVertexMonAlg( const std::string & name, ISvcLocator* pSvcLocator );
   virtual ~InDetGlobalPrimaryVertexMonAlg();
   virtual StatusCode initialize() override;
   virtual StatusCode fillHistograms( const EventContext& ctx ) const override;
   std::string findComponentString(int bec, int ld) const;
-
-
+  
+  
   
  private:
-
+  
   SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerName{this,"vxContainerName","PrimaryVertices","Primary Vertices for Global Monitoring"};
   SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerNameWithoutBeamConstraint{this,"vxContainerNameWithOutBeamConstraint","VxPrimaryCandidateWithBeamConstraint","Vertices without beam constraint for Global Monitoring"};
   SG::ReadHandleKey<xAOD::VertexContainer> m_vxContainerNameSplit{this,"vxContainerNameSplit","VxPrimaryCandidateSplitStream","Split Vertices for Global Monitoring"};
-
+  
   int         m_splitVertexTrkInvFraction; ///< store inverse of the fraction of input tracks used for probe vertex (1:N)
   float       m_distanceSplitVxMatch; ///< store maximum distance for matching split vertices to original non-BC vertex
   /** store metric to be used for split vertex matching in selection efficiency
-	 * Values currently implemented:
-	 * 0: dummy metric; returns zero distance
-	 * 1: simple delta-z metric
-	 * 2: 3-D distance divided by the error (dominated by Delta z)
-	 * 3: quadratic sum of distances divided by their errors in the 3 directions. Expected RMS = 1. Default.
- */
-
+   * Values currently implemented:
+   * 0: dummy metric; returns zero distance
+   * 1: simple delta-z metric
+   * 2: 3-D distance divided by the error (dominated by Delta z)
+   * 3: quadratic sum of distances divided by their errors in the 3 directions. Expected RMS = 1. Default.
+   */
+  
   int      m_splitMatchingMetric; 
   bool     m_doEnhancedMonitoring; // trigger the enhanced monitoring (to be activated by InDetFlags.doMonitoringPrimaryVertexingEnhanced because split vertexing and vertexing with no beam constraint need to be run as well)
-
-// Helper functions
+  
+  // Helper functions
   /** Returns matching distance between split and original vertex.
-	 * @param splitVx pointer to split vertex 
-	 * @param originalVx pointer to original non-BC vertex
-	 * @return distance for matching split to original Vertex
-  */
-   double GetSplitMatchDistance(const xAOD::Vertex* splitVx, const xAOD::Vertex* originalVx);
-
+   * @param splitVx pointer to split vertex 
+   * @param originalVx pointer to original non-BC vertex
+   * @return distance for matching split to original Vertex
+   */
+  double getSplitMatchDistance(const xAOD::Vertex* splitVx, const xAOD::Vertex* originalVx);
+  
 };
 #endif
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h
index 9324bd880dd95f093ac1b0fdb2fb9e56d34d5e42..178c499e7afdf1f9058a81f0b5415119cb145ee9 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h
@@ -19,42 +19,30 @@
 #include "AthenaMonitoring/AthMonitorAlgorithm.h"
 #include "AthenaMonitoringKernel/Monitored.h"
 
-#include "PixelGeoModel/IBLParameterSvc.h"
+#include "GaudiKernel/EventContext.h"
 
+#include "PixelGeoModel/IBLParameterSvc.h"
+#include "InDetPrepRawData/PixelClusterContainer.h"
 
 
 //Detector Managers
 #include "AtlasDetDescr/AtlasDetectorID.h"
-#include "InDetIdentifier/PixelID.h"
-#include "InDetIdentifier/SCT_ID.h"
-#include "InDetIdentifier/TRT_ID.h"
-
 #include "InDetConditionsSummaryService/IInDetConditionsTool.h"
 #include "StoreGate/ReadHandleKey.h"
 
-#include "InDetPrepRawData/PixelClusterContainer.h"
 
 //------------TrackMon------------
-#include <algorithm>
 #include "TrkToolInterfaces/ITrackHoleSearchTool.h"
 #include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h"
+#include "TrkTrack/Track.h"
 #include "TrkTrack/TrackCollection.h"
+
 #include "TrkTrackSummary/TrackSummary.h"
-#include "TrkMeasurementBase/MeasurementBase.h"
-#include "TrkRIO_OnTrack/RIO_OnTrack.h"
-#include "InDetReadoutGeometry/SiDetectorElement.h"
-#include "InDetRIO_OnTrack/SiClusterOnTrack.h"
 #include "TrkToolInterfaces/ITrackSummaryTool.h"
 
-
-
-//for Amg::error helper function:
-#include "EventPrimitives/EventPrimitivesHelpers.h"
-
 //Standard c++
 #include <string>
-#include <map>
-#include <vector>
+#include <memory>
 
 
 
@@ -69,8 +57,13 @@ namespace InDet {
 }
 
 
-class InDetGlobalTrackMonAlg : public AthMonitorAlgorithm {
+//namespace Trk {
+//	  class ITrackSummaryTool;
+//}
 
+
+class InDetGlobalTrackMonAlg : public AthMonitorAlgorithm {
+  
  public:
   
   InDetGlobalTrackMonAlg( const std::string& name, ISvcLocator* pSvcLocator );
@@ -78,70 +71,66 @@ class InDetGlobalTrackMonAlg : public AthMonitorAlgorithm {
   virtual StatusCode initialize() override;
   virtual StatusCode fillHistograms( const EventContext& ctx ) const override;
   std::string findComponentString(int bec, int ld) const;
-
-
+  
+  
   // Functions to fill individual sets of histograms
-  void FillForwardTracks( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary );
-  void FillEtaPhi( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary );
-  void FillHits( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary );
-  void FillTIDE();
-  void FillHoles( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary );
-  void FillHitMaps( const Trk::Track *track );
-  void FillHoleMaps( const Trk::Track *track );
-
+  void fillForwardTracks( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary );
+  void fillEtaPhi( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary );
+  void fillHits( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary );
+  void fillTIDE();
+  void fillHoles( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary );
+  void fillHitMaps( const Trk::Track *track );
+  void fillHoleMaps( const Trk::Track *track );
+  
  private:
-
+  
   ToolHandle <Trk::ITrackHoleSearchTool> m_holes_search_tool; // new
-
-  ToolHandle<InDet::IInDetTrackSelectionTool> m_trackSelTool; // baseline
-  ToolHandle< InDet::IInDetTrackSelectionTool > m_tight_trackSelTool; //tightw
-
-
-
-  ToolHandle<IInDetConditionsTool> m_pixelCondSummaryTool{this, "PixelConditionsSummaryTool", "PixelConditionsSummaryTool", "Tool to retrieve Pixel Conditions summary"};
-
-  PublicToolHandle <Trk::ITrackSummaryTool> m_trkSummaryTool
-	           {this,"TrackSummaryTool","Trk::TrackSummaryTool/InDetTrackSummaryTool",""};
-
-
-
-
+  
+  ToolHandle <InDet::IInDetTrackSelectionTool> m_trackSelTool; // baseline
+  ToolHandle <InDet::IInDetTrackSelectionTool > m_tight_trackSelTool; //tightw
+  
+  ToolHandle <IInDetConditionsTool> m_pixelCondSummaryTool{this, "PixelConditionsSummaryTool", "PixelConditionsSummaryTool", "Tool to retrieve Pixel Conditions summary"};
+  
+  ToolHandle <Trk::ITrackSummaryTool> m_trkSummaryTool{this,"TrackSummaryTool","Trk::TrackSummaryTool/InDetTrackSummaryTool",""};
+  
+  
+  
   const AtlasDetectorID* m_atlasid;  //tracks only
-
+  
   // the TRT ID helper
   const TRT_ID *m_trtID;
-    
+  
   // the SCT ID helper 
   const SCT_ID *m_sctID;  
-
+  
   // the Pixel ID helper 
   const PixelID *m_pixelID;
-
-
+  
+  
   SG::ReadHandleKey<InDet::PixelClusterContainer> m_clustersKey{this, "ClusterName", "PixelClusters", "pixel cluster data key" };
   SG::ReadHandleKey<TrackCollection> m_tracksKey         {this,"TrackName", "CombinedInDetTracks", "track data key"};
   SG::ReadHandleKey<TrackCollection> m_CombinedTracksName{this,"TrackName2","CombinedInDetTracks", "track data key"};
   SG::ReadHandleKey<TrackCollection> m_ForwardTracksName {this,"TrackName3","CombinedInDetTracks", "track data key"};
-
-
+  
+  
   ServiceHandle <IBLParameterSvc> m_IBLParameterSvc;
-
-
-
+  
+  
+  
   //Switch if LB accounting should be done
   bool m_doLumiblock;
-
+  
   // Switch for hole searching
   bool m_doHolePlots;
   bool m_DoHoles_Search;
   
   // Switch for hitmaps
   bool m_doHitMaps;
-
+  
   bool m_doTide;
   bool m_doTideResiduals;
   bool m_doForwardTracks;
   bool m_doIBL;
-
+  
 };
 #endif
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalBeamSpotMonAlgCfg.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalBeamSpotMonAlgCfg.py
index 140658e67644f517574a3b35368eb2a13deb3374..89b5e2e1f360320a206757d4c35272e1f25f338a 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalBeamSpotMonAlgCfg.py
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalBeamSpotMonAlgCfg.py
@@ -2,16 +2,17 @@
 #  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 #
 
-'''@file InDetGlobalBeamSpotMonAlgCfg.py
-@author PerJohansson
-@date November 2019
+"""
+@file InDetGlobalBeamSpotMonAlgCfg.py
+@author Leonid Serkin and Per Johansson
+@date April 2020
 @brief Configuration for Run 3 based on InDetGlobalBeamSpotMonTool.cxx
-'''
+"""
 
 def InDetGlobalBeamSpotMonAlgCfg(helper, alg, **kwargs):
     '''Function to configures some algorithms in the monitoring system.'''
-
-    #Values
+    
+    # Values set by default here
     m_useBeamspot = True
     expert = True
     m_vxContainerWithBeamConstraint = False
@@ -19,7 +20,7 @@ def InDetGlobalBeamSpotMonAlgCfg(helper, alg, **kwargs):
     # this creates a "trackGroup" called "alg" which will put its histograms into the subdirectory "BeamSpot"
     bsGroup = helper.addGroup(alg, 'BeamSpot')
     pathbs = '/InDetGlobal/BeamSpot'
-
+    
     # Histograms for track-based beam spot monitoring:
     varName = 'm_trkD0,m_trkD0Phi;trkDPhi'
     bsGroup.defineHistogram(varName,type="TH2F",title="DCA vs Phi; #varphi (rad);d_{0} (#mum)", path=pathbs, xbins=100, xmin=-3.5, xmax=3.5, ybins=100, ymin=-1000, ymax=1000)
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
index e501b6ca1d83bd95edd121b7e2438433379acfb4..58807dec5e6aa53aee2fb781192e8396f6f4ae58 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
@@ -13,71 +13,72 @@
 def InDetGlobalMonitoringRun3TestConfig(flags):
     from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
     acc = ComponentAccumulator()
-
+    
     # run on RAW only
     if flags.DQ.Environment in ('online', 'tier0', 'tier0Raw'):
-##        from InDetRecExample.InDetKeys import InDetKeys    ## not sure it works now
-
+        ##        from InDetRecExample.InDetKeys import InDetKeys    ## not sure it works now
+        
         ########### here begins InDetGlobalTrackMonAlg ###########
         kwargsInDetGlobalTrackMonAlg = { 
             'DoIBL' : True,                       #InDetFlags.doIBL(), #Turn on/off IBL histograms 
             'TrackName'  : 'CombinedInDetTracks',  #Until new config ready
-   		    'TrackName2' : 'CombinedInDetTracks',  #Until new config ready
-			'TrackName3' : 'CombinedInDetTracks',  #Until new config ready
+            'TrackName2' : 'CombinedInDetTracks',  #Until new config ready
+            'TrackName3' : 'CombinedInDetTracks',  #Until new config ready
         }
-
+        
         
         from AthenaMonitoring import AthMonitorCfgHelper
         helper = AthMonitorCfgHelper(flags, "InDetGlobalMonitoringRun3Test")
-
+        
         from AthenaConfiguration.ComponentFactory import CompFactory
-#        from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalTrackMonAlg
+        #        from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalTrackMonAlg
         from InDetGlobalMonitoringRun3Test.InDetGlobalTrackMonAlgCfg import InDetGlobalTrackMonAlgCfg 
 
         inDetGlobalTrackMonAlg = helper.addAlgorithm(CompFactory.InDetGlobalTrackMonAlg, 'InDetGlobalTrackMonAlg')
         for k, v in kwargsInDetGlobalTrackMonAlg.items():
             setattr(inDetGlobalTrackMonAlg, k, v)
+
         inDetGlobalTrackMonAlg.TrackSelectionTool.UseTrkTrackTools = True
         inDetGlobalTrackMonAlg.TrackSelectionTool.CutLevel         = "TightPrimary"
         inDetGlobalTrackMonAlg.TrackSelectionTool.maxNPixelHoles   = 1
         inDetGlobalTrackMonAlg.TrackSelectionTool.minPt            = 5000
-#        InDetGlobalTrackMonAlg.Baseline_TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool
-#        InDetGlobalTrackMonAlg.Baseline_TrackSelectionTool.Extrapolator     = InDetExtrapolator
-#
+        #        InDetGlobalTrackMonAlg.Baseline_TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool
+        #        InDetGlobalTrackMonAlg.Baseline_TrackSelectionTool.Extrapolator     = InDetExtrapolator
+        #
         inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.UseTrkTrackTools = True
         inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.CutLevel         = "TightPrimary"
         inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.minPt            = 5000
-#        InDetGlobalTrackMonAlg.Tight_TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool
-#        InDetGlobalTrackMonAlg.Tight_TrackSelectionTool.Extrapolator     = InDetExtrapolator
-
+        #        InDetGlobalTrackMonAlg.Tight_TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool
+        #        InDetGlobalTrackMonAlg.Tight_TrackSelectionTool.Extrapolator     = InDetExtrapolator
+        
 
         # Run 3 configs - stolen from SCT
         from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
         inDetGlobalTrackMonAlg.TrackSelectionTool.TrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags))
         inDetGlobalTrackMonAlg.TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
         inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.TrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags))
-	    inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
-
+        inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
+        
         InDetGlobalTrackMonAlgCfg(helper, inDetGlobalTrackMonAlg, **kwargsInDetGlobalTrackMonAlg)
         ########### here ends InDetGlobalTrackMonAlg ###########
-
-
+        
+        
         ########### here begins InDetGlobalPrimaryVertexMonAlg ###########
         from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalPrimaryVertexMonAlg
         from InDetGlobalMonitoringRun3Test.InDetGlobalPrimaryVertexMonAlgCfg import InDetGlobalPrimaryVertexMonAlgCfg 
-
+        
         myInDetGlobalPrimaryVertexMonAlg = helper.addAlgorithm(InDetGlobalPrimaryVertexMonAlg, 'InDetGlobalPrimaryVertexMonAlg')
-
+        
         kwargsInDetGlobalPrimaryVertexMonAlg = { 
-                'vxContainerName'                      : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(),
-                'vxContainerNameWithOutBeamConstraint' : 'VxPrimaryCandidateWithBeamConstraint', #InDetKeys.PrimaryVerticesWithoutBeamConstraint(),
-                'vxContainerNameSplit'                 : 'VxPrimaryCandidateSplitStream', #InDetKeys.PrimaryVerticesSplitStream(),
-                'doEnhancedMonitoring'                 : True # InDetFlags.doMonitoringPrimaryVertexingEnhanced()
-               }
-
+            'vxContainerName'                      : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(),
+            'vxContainerNameWithOutBeamConstraint' : 'VxPrimaryCandidateWithBeamConstraint', #InDetKeys.PrimaryVerticesWithoutBeamConstraint(),
+            'vxContainerNameSplit'                 : 'VxPrimaryCandidateSplitStream', #InDetKeys.PrimaryVerticesSplitStream(),
+            'doEnhancedMonitoring'                 : True # InDetFlags.doMonitoringPrimaryVertexingEnhanced()
+        }
+        
         for k, v in kwargsInDetGlobalPrimaryVertexMonAlg.items():
             setattr(kwargsInDetGlobalPrimaryVertexMonAlg, k, v)
-
+            
         InDetGlobalPrimaryVertexMonAlgCfg(helper, myInDetGlobalPrimaryVertexMonAlg, **kwargsInDetGlobalPrimaryVertexMonAlg)
 
         ########### here ends InDetGlobalPrimaryVertexMonAlg ###########
@@ -86,17 +87,17 @@ def InDetGlobalMonitoringRun3TestConfig(flags):
         
         from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConf import InDetGlobalBeamSpotMonAlg
         from InDetGlobalMonitoringRun3Test.InDetGlobalBeamSpotMonAlgCfg import InDetGlobalBeamSpotMonAlgCfg 
-
+        
         myInDetGlobalBeamSpotMonAlg = helper.addAlgorithm(InDetGlobalBeamSpotMonAlg, 'InDetGlobalBeamSpotMonAlg')
-
+        
         kwargsInDetGlobalBeamSpotMonAlg = { 
-                'BeamSpotKey'                      : 'BeamSpotData', #InDetKeys.BeamSpotData(),
-                'vxContainerName'                  : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(),
-                'trackContainerName'               : 'InDetTrackParticles', #InDetKeys.xAODTrackParticleContainer(),
-                'useBeamspot'                      : True, # InDetFlags.useBeamConstraint()
-                'vxContainerWithBeamConstraint'    : False # InDetFlags.useBeamConstraint()
-               }
-
+            'BeamSpotKey'                      : 'BeamSpotData', #InDetKeys.BeamSpotData(),
+            'vxContainerName'                  : 'PrimaryVertices', #InDetKeys.xAODVertexContainer(),
+            'trackContainerName'               : 'InDetTrackParticles', #InDetKeys.xAODTrackParticleContainer(),
+            'useBeamspot'                      : True, # InDetFlags.useBeamConstraint()
+            'vxContainerWithBeamConstraint'    : False # InDetFlags.useBeamConstraint()
+        }
+        
         for k, v in kwargsInDetGlobalBeamSpotMonAlg.items():
             setattr(kwargsInDetGlobalBeamSpotMonAlg, k, v)
 
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalPrimaryVertexMonAlgCfg.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalPrimaryVertexMonAlgCfg.py
index ca57742d083b1988db88b2686da806dbbb803a12..c14bda114924f8a64620521eb699eaa7daa0e9c2 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalPrimaryVertexMonAlgCfg.py
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalPrimaryVertexMonAlgCfg.py
@@ -1,15 +1,17 @@
+#
+#  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+#
+
 """
 @file InDetGlobalPrimaryVertexMonAlgCfg.py
-@author Leonid Serkin
-@date March 2020
+@author Leonid Serkin and Per Johansson
+@date April 2020
 @brief Configuration for Run 3 based on InDetGlobalPrimaryVertexMonTool.cxx
 """
-from math import pi
 
-def InDetGlobalPrimaryVertexMonAlgCfg(helper, alg, **kwargs):
+from math import pi as M_PI
 
-    # values	
-    M_PI = math.pi
+def InDetGlobalPrimaryVertexMonAlgCfg(helper, alg, **kwargs):
 
     # this creates a "pvGroup" called "alg" which will put its histograms into the subdirectory "PrimaryVertex"
     pvGroup = helper.addGroup(alg, 'PrimaryVertex')
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalTrackMonAlgCfg.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalTrackMonAlgCfg.py
index 7907acda53683a5f9172bcd2db56a6270632b6e2..6e77516ec5c894e5cb1aee0f78c75f6dd00d46ba 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalTrackMonAlgCfg.py
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalTrackMonAlgCfg.py
@@ -1,10 +1,15 @@
+#
+#  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+#
+
 """
 @file InDetGlobalTrackMonAlgCfg.py
-@author Leonid Serkin
-@date March 2020
+@author Leonid Serkin and Per Johansson
+@date April 2020
 @brief Configuration for Run 3 based on InDetGlobalTrackMonTool.cxx
 """
-from math import pi
+
+from math import pi as M_PI
 
 def InDetGlobalTrackMonAlgCfg(helper, alg, **kwargs):
 
@@ -12,14 +17,14 @@ def InDetGlobalTrackMonAlgCfg(helper, alg, **kwargs):
     m_doIBL = True
     m_nBinsEta = 50
     m_nBinsPhi = 50
-    m_trackBin = 100
+    m_trackBin = 75
     m_c_etaRange = 2.5
     m_c_etaTrackletsMin = 2.4
     m_c_etaTrackletsMax = 2.7
     m_c_etaRangeTRT = 2.0
     m_c_range_LB = 3000
     m_trackMax = 75
-    M_PI = math.pi
+    #M_PI = math.pi
 
     # this creates a "trackGroup" called "alg" which will put its histograms into the subdirectory "Track"
     trackGroup = helper.addGroup(alg, 'Track')
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalBeamSpotMonAlg.cxx b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalBeamSpotMonAlg.cxx
index 01e9669319274fc9cb195d5c693594c96f63d63a..e4764edc45714a05f35b1f9eff19ea98a6788932 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalBeamSpotMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalBeamSpotMonAlg.cxx
@@ -2,12 +2,13 @@
   Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
+
 /** @file InDetGlobalBeamSpotMonAlg.cxx
  * Implementation of inner detector global beamspot monitoring tool
  *
  *@authors
- * Per Johansson <Per.Johansson@cern.ch> @n
  * Leonid Serkin <lserkin@cern.ch> @n
+ * Per Johansson <Per.Johansson@cern.ch> @n
  *
  * based on InDetGlobalBeamSpotMonTool.cxx
  *
@@ -25,6 +26,8 @@
 #include "xAODTracking/TrackParticleAuxContainer.h"
 
 #include <sstream>
+#include <cmath>
+
 
 
 InDetGlobalBeamSpotMonAlg::InDetGlobalBeamSpotMonAlg( const std::string & name, ISvcLocator* pSvcLocator) : 
@@ -71,8 +74,8 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx )
   float beamTiltY = 0.;
   float scaleFactor = 1.;
   if (m_useBeamspot) {
-
-
+    
+    
     auto beamSpotHandle = SG::ReadCondHandle(m_beamSpotKey, ctx);
     
     // check for tracks
@@ -115,76 +118,71 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx )
   // Track monitoring
   int nTracks = 0;
   
-  xAOD::TrackParticleContainer::const_iterator itrack = trackCollection->begin();
-  xAOD::TrackParticleContainer::const_iterator itrack_end = trackCollection->end();
-  
-  for ( ; itrack!= itrack_end; ++itrack)
-    {
-
-      const xAOD::TrackParticle* tpb = (*itrack);
-
-      if ( !tpb )
-	{
-	  ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: NULL track pointer in collection" );
-	  continue;
-	}
-
-      
-      const Trk::Perigee* perigee = &(tpb->perigeeParameters());
-
-      if ( !perigee )  
-	{
-	  ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: NULL track->perigeeParameters pointer " );
-	  continue;
-	}
-      
+  //range based for-loop
+  for (const xAOD::TrackParticle* tpb: *trackCollection) {
+    
+    if ( !tpb )
+      {
+	ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: NULL track pointer in collection" );
+	continue;
+      }
+    
+    
+    const Trk::Perigee* perigee = &(tpb->perigeeParameters());
+    
+    if ( !perigee )  
+      {
+	ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: NULL track->perigeeParameters pointer " );
+	continue;
+      }
+    
+    
+    
+    float theta = perigee->parameters()[Trk::theta];
+    float qOverPt = perigee->parameters()[Trk::qOverP]/sin(theta);
+    float charge = perigee->charge();
+    float z0 = perigee->parameters()[Trk::z0];
+    float phi0 = perigee->parameters()[Trk::phi0];
+    float d0 = perigee->parameters()[Trk::d0];
+    float pT = 0;
+    
+    if ( qOverPt != 0 ){
+      pT = (1/qOverPt)*(charge);
+      // For all tracks
+      auto pT_m = Monitored::Scalar<float>("m_trkPt", pT/1000);  
+      fill(bsGroup, pT_m);
       
+      // Select tracks to use for remaining histograms
+      if (pT<m_minTrackPt) continue;
+    }
+    
+    nTracks++;
+    
+    auto trkDPhi_m = Monitored::Scalar<float>("m_trkD0Phi", phi0);
+    auto trkD_m    = Monitored::Scalar<float>("m_trkD0", d0*1e3);
+    fill(bsGroup, trkD_m, trkDPhi_m);
+    
+    // Currently we do the direct calculation of d0corr. We could
+    // also use an extrapolator to calculate d0 wrt a
+    // Trk::StraightLineSurface constructed along the beam line.
+    if(m_useBeamspot){
       
-      float theta = perigee->parameters()[Trk::theta];
-      float qOverPt = perigee->parameters()[Trk::qOverP]/sin(theta);
-      float charge = perigee->charge();
-      float z0 = perigee->parameters()[Trk::z0];
-      float phi0 = perigee->parameters()[Trk::phi0];
-      float d0 = perigee->parameters()[Trk::d0];
-      float pT = 0;
+      float trkbeamlineTiltX=tpb->beamlineTiltX();
+      float trkbeamlineTiltY=tpb->beamlineTiltY();
+      float trkbeamspotx=tpb->vx();
+      float trkbeamspoty=tpb->vy();
+      float trkbeamspotz=tpb->vz();
       
-      if ( qOverPt != 0 ){
-	pT = (1/qOverPt)*(charge);
-	// For all tracks
-	auto pT_m = Monitored::Scalar<float>("m_trkPt", pT/1000);  
-	fill(bsGroup, pT_m);
-	
-	// Select tracks to use for remaining histograms
-	if (pT<m_minTrackPt) continue;
-      }
+      float beamX = (beamSpotX-trkbeamspotx) + std::tan(beamTiltX-trkbeamlineTiltX) * (z0-beamSpotZ+trkbeamspotz);
+      float beamY = (beamSpotY-trkbeamspoty) + std::tan(beamTiltY-trkbeamlineTiltY) * (z0-beamSpotZ+trkbeamspotz);
+      float d0corr = d0 - ( -std::sin(phi0)*beamX + std::cos(phi0)*beamY );
       
-      nTracks++;
-            
-      auto trkDPhi_m = Monitored::Scalar<float>("m_trkD0Phi", phi0);
-      auto trkD_m    = Monitored::Scalar<float>("m_trkD0", d0*1e3);
-      fill(bsGroup, trkD_m, trkDPhi_m);
       
-      // Currently we do the direct calculation of d0corr. We could
-      // also use an extrapolator to calculate d0 wrt a
-      // Trk::StraightLineSurface constructed along the beam line.
-      if(m_useBeamspot){
-
-          float trkbeamlineTiltX=tpb->beamlineTiltX();
-          float trkbeamlineTiltY=tpb->beamlineTiltY();
-          float trkbeamspotx=tpb->vx();
-          float trkbeamspoty=tpb->vy();
-          float trkbeamspotz=tpb->vz();
-	
-	float beamX = (beamSpotX-trkbeamspotx) + tan(beamTiltX-trkbeamlineTiltX) * (z0-beamSpotZ+trkbeamspotz);
-	float beamY = (beamSpotY-trkbeamspoty) + tan(beamTiltY-trkbeamlineTiltY) * (z0-beamSpotZ+trkbeamspotz);
-	float d0corr = d0 - ( -sin(phi0)*beamX + cos(phi0)*beamY );
-
-      	
-	auto trkDPhiCorr_m  = Monitored::Scalar<float>("m_trkD0PhiCorr", phi0);
-	auto trkDCorr_m     = Monitored::Scalar<float>("m_trkD0Corr", d0corr*1e3);
-	fill(bsGroup, trkDPhiCorr_m, trkDCorr_m);
-      }
-    } // track iterator
+      auto trkDPhiCorr_m  = Monitored::Scalar<float>("m_trkD0PhiCorr", phi0);
+      auto trkDCorr_m     = Monitored::Scalar<float>("m_trkD0Corr", d0corr*1e3);
+      fill(bsGroup, trkDPhiCorr_m, trkDCorr_m);
+    }
+  } // track iterator
   
   auto trkNPt_m = Monitored::Scalar<float>("m_trkNPt", nTracks);
   fill(bsGroup,trkNPt_m);
@@ -193,40 +191,42 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx )
   // without beam constraint
   if (! m_vxContainerWithBeamConstraint) {
     ATH_MSG_DEBUG( "InDetGlobalBeamSpotMonAlg: vxContainerWithBeamConstraint is " << m_vxContainerWithBeamConstraint );
-
-    // Basic primary vertex monitoring
-    auto vxContainer = SG::makeHandle(m_vxContainerName, ctx);  
     
-    if (!vxContainer.isValid()) {
+    // Basic primary vertex monitoring
+    auto handle_vxContainer = SG::makeHandle(m_vxContainerName, ctx);  
+    auto vertexContainer = handle_vxContainer.cptr();
+
+    if (!handle_vxContainer.isValid()) {
       ATH_MSG_DEBUG ("InDetGlobalBeamSpotMonAlg: Could not retrieve primary vertex container with key "+ m_vxContainerName.key());
       return StatusCode::SUCCESS;
     }
     
-    auto pvN_m = Monitored::Scalar<float>("m_pvN", vxContainer->size()-1);  // exclude dummy vertex
+    auto pvN_m = Monitored::Scalar<float>("m_pvN", vertexContainer->size()-1);  // exclude dummy vertex
     fill(bsGroup, pvN_m);
     
     int nPriVtx = 0;
     int nPileupVtx = 0;
     
-    for (xAOD::VertexContainer::const_iterator vxIter = vxContainer->begin(); vxIter != vxContainer->end(); ++vxIter) {
-      if ( !(*vxIter) ) continue;
+    for(const auto & vtx : *vertexContainer) {
+      
+      if ( !vtx ) continue;
       
       // Count different types of vertices
-      if ((*vxIter)->vertexType() == xAOD::VxType::PriVtx) nPriVtx++;
-      if ((*vxIter)->vertexType() == xAOD::VxType::PileUp) nPileupVtx++;
+      if (vtx->vertexType() == xAOD::VxType::PriVtx) nPriVtx++;
+      if (vtx->vertexType() == xAOD::VxType::PileUp) nPileupVtx++;
       
       // Select primary vertex
-      if ((*vxIter)->vertexType() != xAOD::VxType::PriVtx) continue;
-      if ((*vxIter)->numberDoF() <= 0) continue;
+      if (vtx->vertexType() != xAOD::VxType::PriVtx) continue;
+      if (vtx->numberDoF() <= 0) continue;
       
-      if ((*vxIter)->nTrackParticles() < m_minTracksPerVtx) continue;
+      if (vtx->nTrackParticles() < m_minTracksPerVtx) continue;
       
       // Found good VxCandidate to monitor - now fill histograms
-      float x = (*vxIter)->position().x();
-      float y = (*vxIter)->position().y();
-      float z = (*vxIter)->position().z();
-      float beamX = beamSpotX + tan(beamTiltX) * (z-beamSpotZ);
-      float beamY = beamSpotY + tan(beamTiltY) * (z-beamSpotZ);
+      float x = vtx->position().x();
+      float y = vtx->position().y();
+      float z = vtx->position().z();
+      float beamX = beamSpotX + std::tan(beamTiltX) * (z-beamSpotZ);
+      float beamY = beamSpotY + std::tan(beamTiltY) * (z-beamSpotZ);
       float beamZ = beamSpotZ;
       
       auto pvXbeam_m = Monitored::Scalar<float>("m_pvXbeam", (x-beamX)*scaleFactor);
@@ -234,23 +234,23 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx )
       
       auto pvYbeam_m = Monitored::Scalar<float>("m_pvYbeam", (y-beamY)*scaleFactor);
       fill(bsGroup, pvYbeam_m);
-
+      
       auto pvZbeam_m = Monitored::Scalar<float>("m_pvZbeam", z-beamZ);
       fill(bsGroup, pvZbeam_m);
       
-      auto pvErrX_m = Monitored::Scalar<float>("m_pvErrX", Amg::error( (*vxIter)->covariancePosition(), Trk::x));
+      auto pvErrX_m = Monitored::Scalar<float>("m_pvErrX", Amg::error( vtx->covariancePosition(), Trk::x));
       fill(bsGroup, pvErrX_m);
 
-      auto pvErrY_m = Monitored::Scalar<float>("m_pvErrY", Amg::error( (*vxIter)->covariancePosition(), Trk::y));
+      auto pvErrY_m = Monitored::Scalar<float>("m_pvErrY", Amg::error( vtx->covariancePosition(), Trk::y));
       fill(bsGroup, pvErrY_m);
 
-      auto pvErrZ_m = Monitored::Scalar<float>("m_pvErrZ", Amg::error( (*vxIter)->covariancePosition(), Trk::z));
+      auto pvErrZ_m = Monitored::Scalar<float>("m_pvErrZ", Amg::error( vtx->covariancePosition(), Trk::z));
       fill(bsGroup, pvErrZ_m);
 
-      auto pvNTracks_m  = Monitored::Scalar<float>("m_pvNTracks", (*vxIter)->nTrackParticles());
+      auto pvNTracks_m  = Monitored::Scalar<float>("m_pvNTracks", vtx->nTrackParticles());
       fill(bsGroup, pvNTracks_m);
-
-      auto pvChiSqDof_m = Monitored::Scalar<float>("m_pvChiSqDof", (*vxIter)->chiSquared() / (*vxIter)->numberDoF());
+      
+      auto pvChiSqDof_m = Monitored::Scalar<float>("m_pvChiSqDof", vtx->chiSquared() / vtx->numberDoF());
       fill(bsGroup, pvChiSqDof_m);
       
       auto pvX_m = Monitored::Scalar<float>("m_pvX", x);
@@ -259,10 +259,10 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx )
       fill(bsGroup, pvX_m, pvZ_m);
       fill(bsGroup, pvY_m, pvZ_m);
       fill(bsGroup, pvY_m, pvX_m);
-
+      
       // Histograms on original tracks used for primary vertex
-      for (unsigned int trkIter=0; trkIter!=(*vxIter)->nTrackParticles(); ++trkIter) {
-        const xAOD::TrackParticle* tp = (*vxIter)->trackParticle(trkIter);
+      for (unsigned int trkIter=0; trkIter!=vtx->nTrackParticles(); ++trkIter) {
+        const xAOD::TrackParticle* tp = vtx->trackParticle(trkIter);
         if(!tp){
           ATH_MSG_DEBUG ("InDetGlobalBeamSpotMonAlg: Could not retrieve track particle.");
           continue;
@@ -283,4 +283,3 @@ StatusCode InDetGlobalBeamSpotMonAlg::fillHistograms( const EventContext& ctx )
   
   return StatusCode::SUCCESS;
 }
-
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalPrimaryVertexMonAlg.cxx b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalPrimaryVertexMonAlg.cxx
index f8a1c82ba6539d8a9c1c0c4ee67be4ecb19060d1..5c4cc7da7f88864fd46449f2b564e310d65ceba1 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalPrimaryVertexMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalPrimaryVertexMonAlg.cxx
@@ -8,6 +8,7 @@
  *
  *@author
  * Leonid Serkin <lserkin@cern.ch> @n
+ * Per Johansson <Per.Johansson@cern.ch> @n
  *
  * based on InDetGlobalPrimaryVertexMonTool.cxx
  *
@@ -21,15 +22,8 @@
 #include "EventPrimitives/EventPrimitivesHelpers.h"
 
 
-//Root
-#include "TMath.h"
-
 //Standard c++
-#include <algorithm>
 #include <vector>
-#include <string>
-#include <cmath>
-#include <functional>
 
 
 InDetGlobalPrimaryVertexMonAlg::InDetGlobalPrimaryVertexMonAlg( const std::string& name, ISvcLocator* pSvcLocator ) : 
@@ -73,86 +67,89 @@ StatusCode InDetGlobalPrimaryVertexMonAlg::fillHistograms( const EventContext& c
   auto pvGroup = getGroup("PrimaryVertex");
   
   // retrieving vertices
-  auto vxContainer = SG::makeHandle(m_vxContainerName, ctx);   // another way to access ??
+  auto handle_vxContainer = SG::makeHandle(m_vxContainerName, ctx);   // another way to access ??
   
-  if (!vxContainer.isPresent()) {
+  if (!handle_vxContainer.isPresent()) {
     ATH_MSG_DEBUG ("InDetGlobalPrimaryVertexMonAlg: StoreGate doesn't contain primary vertex container with key "+m_vxContainerName.key());
     return StatusCode::SUCCESS;
   }
-  if (!vxContainer.isValid()) {
+  if (!handle_vxContainer.isValid()) {
     ATH_MSG_ERROR ("InDetGlobalPrimaryVertexMonAlg: Could not retrieve primary vertex container with key "+m_vxContainerName.key());
     return StatusCode::RECOVERABLE;
   }
   
-  
+  auto vertexContainer = handle_vxContainer.cptr();
+
+
   // Total number of vertices (primary and pile up)
-  int PvN = vxContainer->size()-1;  // exclude dummy vertex
-  auto PvN_m = Monitored::Scalar<int>( "m_PvN", PvN);
-  fill(pvGroup, PvN_m);
+  int pvN = vertexContainer->size()-1;  // exclude dummy vertex
+  auto pvN_m = Monitored::Scalar<int>( "m_PvN", pvN);
+  fill(pvGroup, pvN_m);
   
   int nPriVtx = 0;
   int nPileupVtx = 0;
-  
-  for (xAOD::VertexContainer::const_iterator vxIter = vxContainer->begin(); vxIter != vxContainer->end(); ++vxIter) 
-    {
+ 
+  for(const auto & vtx : *vertexContainer) {
+      
+      if ( !vtx ) continue;
       
       // Count different types of vertices
-      if ((*vxIter)->vertexType() == xAOD::VxType::PriVtx) nPriVtx++;
-      if ((*vxIter)->vertexType() == xAOD::VxType::PileUp) nPileupVtx++;
+      if (vtx->vertexType() == xAOD::VxType::PriVtx) nPriVtx++;
+      if (vtx->vertexType() == xAOD::VxType::PileUp) nPileupVtx++;
       
       
       // Select primary vertex
-      if ((*vxIter)->vertexType() != xAOD::VxType::PriVtx) continue;
-      if ((*vxIter)->numberDoF() <= 0) continue;
+      if (vtx->vertexType() != xAOD::VxType::PriVtx) continue;
+      if (vtx->numberDoF() <= 0) continue;
       
-      float PvX = (*vxIter)->position().x();
-      auto  PvX_m = Monitored::Scalar<float>( "m_PvX", PvX);
-      fill(pvGroup, PvX_m);
+      float pvX = vtx->position().x();
+      auto  pvX_m = Monitored::Scalar<float>( "m_PvX", pvX);
+      fill(pvGroup, pvX_m);
       
-      float PvY = (*vxIter)->position().y();
-      auto  PvY_m = Monitored::Scalar<float>( "m_PvY", PvY);
-      fill(pvGroup, PvY_m);
+      float pvY = vtx->position().y();
+      auto  pvY_m = Monitored::Scalar<float>( "m_PvY", pvY);
+      fill(pvGroup, pvY_m);
       
-      float PvZ = (*vxIter)->position().z();
-      auto  PvZ_m = Monitored::Scalar<float>( "m_PvZ", PvZ);
-      fill(pvGroup, PvZ_m);
+      float pvZ = vtx->position().z();
+      auto  pvZ_m = Monitored::Scalar<float>( "m_PvZ", pvZ);
+      fill(pvGroup, pvZ_m);
       
-      float PvErrX = Amg::error( (*vxIter)->covariancePosition(), Trk::x);
-      auto  PvErrX_m = Monitored::Scalar<float>( "m_PvErrX", PvErrX);
-      fill(pvGroup, PvErrX_m);
+      float pvErrX = Amg::error( vtx->covariancePosition(), Trk::x);
+      auto  pvErrX_m = Monitored::Scalar<float>( "m_PvErrX", pvErrX);
+      fill(pvGroup, pvErrX_m);
       
-      float PvErrY = Amg::error( (*vxIter)->covariancePosition(), Trk::y);
-      auto  PvErrY_m = Monitored::Scalar<float>( "m_PvErrY", PvErrY);
-      fill(pvGroup, PvErrY_m);
+      float pvErrY = Amg::error( vtx->covariancePosition(), Trk::y);
+      auto  pvErrY_m = Monitored::Scalar<float>( "m_PvErrY", pvErrY);
+      fill(pvGroup, pvErrY_m);
       
-      float PvErrZ = Amg::error( (*vxIter)->covariancePosition(), Trk::z);
-      auto  PvErrZ_m = Monitored::Scalar<float>( "m_PvErrZ", PvErrZ);
-      fill(pvGroup, PvErrZ_m);
+      float pvErrZ = Amg::error( vtx->covariancePosition(), Trk::z);
+      auto  pvErrZ_m = Monitored::Scalar<float>( "m_PvErrZ", pvErrZ);
+      fill(pvGroup, pvErrZ_m);
       
-      float PvChiSqDoF = (*vxIter)->chiSquared() / (*vxIter)->numberDoF() ;
-      auto  PvChiSqDoF_m = Monitored::Scalar<float>( "m_PvChiSqDoF", PvChiSqDoF);
-      fill(pvGroup, PvChiSqDoF_m);
+      float pvChiSqDoF = vtx->chiSquared() / vtx->numberDoF() ;
+      auto  pvChiSqDoF_m = Monitored::Scalar<float>( "m_PvChiSqDoF", pvChiSqDoF);
+      fill(pvGroup, pvChiSqDoF_m);
       
       
-      auto & trackparticles = (*vxIter)->trackParticleLinks();
+      auto & trackparticles = vtx->trackParticleLinks();
       
-      int PvNTracks = trackparticles.size() ;
-      auto  PvNTracks_m = Monitored::Scalar<int>( "m_PvNTracks", PvNTracks);
-      fill(pvGroup, PvNTracks_m);
+      int pvNTracks = trackparticles.size() ;
+      auto  pvNTracks_m = Monitored::Scalar<int>( "m_PvNTracks", pvNTracks);
+      fill(pvGroup, pvNTracks_m);
       
       
       // original tracks used for primary vertex
-      for (auto trackparticle  : trackparticles )
-	{
+      for (const auto & trackparticle : trackparticles)
+      {
 	  const Trk::Perigee & measuredPerigee = (*trackparticle)->perigeeParameters();
 	  
-	  float PvTrackEta = measuredPerigee.eta()  ;
-	  auto  PvTrackEta_m = Monitored::Scalar<float>( "m_PvTrackEta", PvTrackEta);
-	  fill(pvGroup, PvTrackEta_m);
+	  float pvTrackEta = measuredPerigee.eta()  ;
+	  auto  pvTrackEta_m = Monitored::Scalar<float>( "m_PvTrackEta", pvTrackEta);
+	  fill(pvGroup, pvTrackEta_m);
 	  
-	  float PvTrackPt = measuredPerigee.pT()/1000. ; // Histo is in GeV
-	  auto  PvTrackPt_m = Monitored::Scalar<float>( "m_PvTrackPt", PvTrackPt);
-	  fill(pvGroup, PvTrackPt_m);
+	  float pvTrackPt = measuredPerigee.pT()/1000. ; // Histo is in GeV
+	  auto  pvTrackPt_m = Monitored::Scalar<float>( "m_PvTrackPt", pvTrackPt);
+	  fill(pvGroup, pvTrackPt_m);
 	  
 	}
       
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalTrackMonAlg.cxx b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalTrackMonAlg.cxx
index 483ca7fe29a10201523a5d4d8258f190612a768f..ba8303f256a82a1a308be5140163d3371174c0ab 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalTrackMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/src/InDetGlobalTrackMonAlg.cxx
@@ -8,6 +8,7 @@
  *
  *@author
  * Leonid Serkin <lserkin@cern.ch> @n
+ * Per Johansson <Per.Johansson@cern.ch> @n
  *
  * based on InDetGlobalTrackMonTool.cxx
  *
@@ -16,16 +17,14 @@
 //main header
 #include "InDetGlobalMonitoringRun3Test/InDetGlobalTrackMonAlg.h"
 
-//Root
-#include "TMath.h"
-
 //Standard c++
-#include <algorithm>
 #include <vector>
-#include <string>
-#include <cmath>
-#include <functional>
+#include <memory>
 
+// Id includes
+#include "InDetIdentifier/PixelID.h"
+#include "InDetIdentifier/SCT_ID.h"
+#include "InDetIdentifier/TRT_ID.h"
 
 
 
@@ -70,40 +69,34 @@ StatusCode InDetGlobalTrackMonAlg::initialize() {
   
   ATH_CHECK( detStore()->retrieve(m_atlasid, "AtlasID") );
   
-  m_pixelID = 0;
+  m_pixelID = nullptr;
   if (detStore()->retrieve(m_pixelID, "PixelID").isFailure()) {
     ATH_MSG_DEBUG("InDetGlobalMonitoringRun3Test: Could not get Pixel ID helper");
     m_doHitMaps = false;
   }
   
-  m_sctID = 0;
+  m_sctID = nullptr;
   if (detStore()->retrieve(m_sctID, "SCT_ID").isFailure()) {
     ATH_MSG_DEBUG("InDetGlobalMonitoringRun3Test: Could not get SCT ID helper");
     m_doHitMaps = false;
   }
   
-  m_trtID = 0;
+  m_trtID = nullptr;
   if (detStore()->retrieve(m_trtID, "TRT_ID").isFailure()) {
     ATH_MSG_DEBUG("InDetGlobalMonitoringRun3Test: Could not get TRT ID helper");
     m_doHitMaps = false;
   }
   
   
-  ATH_CHECK( m_pixelCondSummaryTool.retrieve() ); // maybe not needed
+  ATH_CHECK( m_pixelCondSummaryTool.retrieve() ); 
   
-  
-  if (m_IBLParameterSvc.retrieve().isFailure()) {
-    if(msgLvl(MSG::FATAL)) msg(MSG::FATAL) << "Could not retrieve " << m_IBLParameterSvc << endmsg;
-    return StatusCode::FAILURE;
-  } else {
-    if(msgLvl(MSG::INFO)) msg(MSG::INFO)  << "Retrieved tool " << m_IBLParameterSvc << endmsg;
-  }
+  ATH_CHECK( m_IBLParameterSvc.retrieve() ); 
   
   m_doIBL = m_IBLParameterSvc->containsIBL();
   
   if (!m_trackSelTool.empty() )      ATH_CHECK( m_trackSelTool.retrieve() );
   if (!m_tight_trackSelTool.empty()) ATH_CHECK( m_tight_trackSelTool.retrieve() );
-
+  
   if (!m_holes_search_tool.empty())  ATH_CHECK( m_holes_search_tool.retrieve());
   
   ATH_CHECK( m_CombinedTracksName.initialize() );
@@ -125,11 +118,11 @@ StatusCode InDetGlobalTrackMonAlg::fillHistograms( const EventContext& ctx ) con
   
   // For histogram naming
   auto trackGroup = getGroup("Track");
-
+  
   // m_manager->lumiBlockNumber() // not used anymore, now use
   int lb       = GetEventInfo(ctx)->lumiBlock();
   auto lb_m    = Monitored::Scalar<int>( "m_lb", lb );
-
+  
   // retrieving tracks
   auto combined_tracks = SG::makeHandle(m_CombinedTracksName, ctx);
   
@@ -149,207 +142,202 @@ StatusCode InDetGlobalTrackMonAlg::fillHistograms( const EventContext& ctx ) con
   int nNoTRText = 0;
   
   
-  TrackCollection::const_iterator itrack = combined_tracks->begin();
-  TrackCollection::const_iterator itrack_end = combined_tracks->end();
-  
-  for ( ; itrack!= itrack_end; ++itrack)
-    {
-      
-      const Trk::Track * track = (*itrack);
-      if ( !track || track->perigeeParameters() == 0 )
-	{
-	  ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL track pointer in collection" );
-	  continue;
-	}
-      
-      // not sure it works now....
-      // Skip tracks that are not inside out
-      //if ( ( m_dataType == AthenaMonManager::collisions || m_dataType == AthenaMonManager::userDefined )
-      //     && ! track->info().patternRecoInfo( Trk::TrackInfo::SiSPSeededFinder ) )
-      //    continue;
-
-
-      // Loose primary tracks
-      if ( !m_trackSelTool->accept(*track) )
+  for (const Trk::Track* track: *combined_tracks) {
+    
+    if ( !track || track->perigeeParameters() == 0 )
+      {
+	ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL track pointer in collection" );
 	continue;
-     
-      // Create a new summary or get copy of the cached one
-      std::unique_ptr<const Trk::TrackSummary> summary(m_trkSummaryTool->createSummary( * track ) );
-      
-      if ( !summary )
-	{
-	  ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL pointer to track summary" );
-	  continue;
-	}
-
-      nBase++;
-      
-
-      // =================================== //
-      // Fill hits BEGINS
-      int numberOfPixelHits = ( summary->get(Trk::numberOfPixelHits) >= 0 ) ? summary->get(Trk::numberOfPixelHits) : 0 ;
-      int numberOfPixelDeadSensors = ( summary->get(Trk::numberOfPixelDeadSensors) >= 0 ) ? summary->get(Trk::numberOfPixelDeadSensors ) : 0 ;
-      int pixHits = numberOfPixelHits + numberOfPixelDeadSensors;
-      
-      int numberOfSCTHits =  ( summary->get(Trk::numberOfSCTHits) >= 0 ) ? summary->get(Trk::numberOfSCTHits) : 0  ;
-      int numberOfSCTDeadSensors =  ( summary->get(Trk::numberOfSCTDeadSensors) >= 0 ) ? summary->get(Trk::numberOfSCTDeadSensors) : 0 ; 
-      int sctHits = numberOfSCTHits + numberOfSCTDeadSensors;
-      
-      int trtHits = summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTDeadStraws);
-      
-      
-      const Trk::Perigee *perigee = track->perigeeParameters();
-      if ( !perigee )  
-	{
-	  ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL track->perigeeParameters pointer " );
-	  continue;
-	}
-
-      float eta_perigee = perigee->eta();
-      float phi_perigee = perigee->parameters()[Trk::phi0];
-      
-      auto eta_perigee_m   = Monitored::Scalar<float>( "m_eta_perigee", eta_perigee);
-      auto phi_perigee_m   = Monitored::Scalar<float>( "m_phi_perigee", phi_perigee);
-      fill(trackGroup, eta_perigee_m, phi_perigee_m); // Trk_Base_eta_phi
-
-
-      if ( m_doIBL )
-	{
-          int numberOfInnermostPixelLayerHits = summary->get( Trk::numberOfInnermostPixelLayerHits );
-          auto numberOfInnermostPixelLayerHits_m = Monitored::Scalar<int>( "m_numberOfInnermostPixelLayerHits", numberOfInnermostPixelLayerHits);
-          fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfInnermostPixelLayerHits_m);
-
-          fill(trackGroup, lb_m, numberOfInnermostPixelLayerHits_m);
-	}
-      
-      auto pixHits_m  = Monitored::Scalar<int>( "m_pixHits", pixHits ); 
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, pixHits_m);
-      fill(trackGroup, lb_m, pixHits_m);
-           
-      auto numberOfPixelDeadSensors_m = Monitored::Scalar<int>( "m_numberOfPixelDeadSensors", numberOfPixelDeadSensors );
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelDeadSensors_m);
-     
-      int numberOfPixelSharedHits = ( summary->get(Trk::numberOfPixelSharedHits) >= 0 ) ? summary->get(Trk::numberOfPixelSharedHits) : 0 ;
-      auto numberOfPixelSharedHits_m = Monitored::Scalar<int>( "m_numberOfPixelSharedHits", numberOfPixelSharedHits);
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSharedHits_m);
-         
-      int numberOfPixelHoles = summary->get(Trk::numberOfPixelHoles) >= 0 ? summary->get(Trk::numberOfPixelHoles) : 0;
-      auto numberOfPixelHoles_m = Monitored::Scalar<int>( "m_numberOfPixelHoles", numberOfPixelHoles); 
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelHoles_m);
-          
-      int numberOfPixelSplitHits = ( summary->get(Trk::numberOfPixelSplitHits) >= 0 ) ? summary->get(Trk::numberOfPixelSplitHits) : 0 ;
-      auto numberOfPixelSplitHits_m = Monitored::Scalar<int>( "m_numberOfPixelSplitHits", numberOfPixelSplitHits);
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSplitHits_m);
-          
-      auto sctHits_m  = Monitored::Scalar<int>( "m_sctHits", sctHits ); 
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, sctHits_m);
-      fill(trackGroup, lb_m, sctHits_m);
-            
-      auto numberOfSCTDeadSensors_m = Monitored::Scalar<int>( "m_numberOfSCTDeadSensors", numberOfSCTDeadSensors );
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTDeadSensors_m);
-     
-      int numberOfSCTSharedHits = ( summary->get(Trk::numberOfSCTSharedHits) >= 0 ) ? summary->get(Trk::numberOfSCTSharedHits) : 0 ;
-      auto numberOfSCTSharedHits_m = Monitored::Scalar<int>( "m_numberOfSCTSharedHits", numberOfSCTSharedHits);
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTSharedHits_m);
-   
-      int numberOfSCTHoles   = summary->get(Trk::numberOfSCTHoles) >= 0 ? summary->get(Trk::numberOfSCTHoles) : 0;
-      auto numberOfSCTHoles_m   = Monitored::Scalar<int>( "m_numberOfSCTHoles", numberOfSCTHoles);
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTHoles_m);
-      
-      auto trtHits_m  = Monitored::Scalar<int>( "m_trtHits", trtHits ); 
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, trtHits_m);
-      fill(trackGroup, lb_m, trtHits_m);
-            
-      int numberOfTRTDeadStraws =    ( summary->get(Trk::numberOfTRTDeadStraws) >= 0 ) ? summary->get(Trk::numberOfTRTDeadStraws) : 0 ;
-      auto numberOfTRTDeadStraws_m = Monitored::Scalar<int>( "m_numberOfTRTDeadStraws", numberOfTRTDeadStraws);
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfTRTDeadStraws_m);
-    
-      // Fill hits ENDS 
-      // =================================== //
-      
-      // =================================== //
-      // FillEtaPhi BEGINS
-     
-      int InnermostPixelLayerHit = 0;
-      int NextToInnermostPixelLayerHit = 0;
-      if ( m_doIBL )
-	{
-	  // no IBL hit but a hit is expected
-	  if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) InnermostPixelLayerHit = 1;
-	  auto InnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_InnermostPixelLayerHit", InnermostPixelLayerHit);
-	  fill(trackGroup, eta_perigee_m, phi_perigee_m, InnermostPixelLayerHit_m);
-
-	  
-	  // no b-layer hit but a hit is expected
-	  if ( summary->get( Trk::expectNextToInnermostPixelLayerHit ) && !summary->get( Trk::numberOfNextToInnermostPixelLayerHits ) ) NextToInnermostPixelLayerHit = 1 ;
-	  auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit);
-	  fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m);
-
-	}
-      else
-	{
-	  if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) InnermostPixelLayerHit = 1;
-	  NextToInnermostPixelLayerHit = InnermostPixelLayerHit;
-	  auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit);
-	  fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m);
-
-	}
-      
-      // No TRT extension
-      int noTRTHits = 0;
-      if ( summary->get(Trk::numberOfTRTHits) == 0 ) noTRTHits = 1;
-      auto noTRTHits_m = Monitored::Scalar<int>( "m_noTRTHits", noTRTHits);
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, noTRTHits_m);
-      
-      
-      // Tight track selection
-      int track_pass_tight = 0;
-      if ( m_tight_trackSelTool -> accept(*track) ) track_pass_tight = 1; // tight selection
-      auto track_pass_tight_m = Monitored::Scalar<int>( "m_track_pass_tight", track_pass_tight);
-      fill(trackGroup, eta_perigee_m, phi_perigee_m, track_pass_tight_m);
-      
-      // =================================== //
-      // FillEtaPhi ENDS    
-      
-      int NoIBL = 0;
-      if ( m_doIBL )
-	{
-	  // no IBL hit but a hit is expected
-	  if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) NoIBL = 1;
-	  if (NoIBL == 1) nNoIBL++;
-	  auto NoIBL_m = Monitored::Scalar<int>( "m_NoIBL_LB", NoIBL);
-	  fill(trackGroup, lb_m, NoIBL_m);
-	}
-      
-      int NoBL = 0;
-      if ( summary->get( ( m_doIBL ) ? Trk::expectNextToInnermostPixelLayerHit : Trk::expectInnermostPixelLayerHit ) && !summary->get( ( m_doIBL ) ? Trk::numberOfNextToInnermostPixelLayerHits : Trk::numberOfInnermostPixelLayerHits ) ) NoBL = 1;
-      if (NoBL == 1) nNoBL++;
-      auto NoBL_m = Monitored::Scalar<int>( "m_NoBL_LB", NoBL);
-      fill(trackGroup, lb_m, NoBL_m);
-     
-      int NoTRText = 0;
-      if ( summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTOutliers) == 0 ) NoTRText = 1;
-      if (NoTRText == 1) nNoTRText++;
-      auto NoTRText_m = Monitored::Scalar<int>( "m_NoTRText_LB", NoTRText);
-      fill(trackGroup, lb_m, NoTRText_m);
-    
-      
-      if ( m_tight_trackSelTool -> accept(*track) )
-	{
-	  nTight++;
-	} 
-      
-      
-      // FillHitMaps is false for now
-      // FillHoles is false for now
-      
-      
-    } // end of track loop
+      }
+    
+    // not sure it works now....
+    // Skip tracks that are not inside out
+    //if ( ( m_dataType == AthenaMonManager::collisions || m_dataType == AthenaMonManager::userDefined )
+    //     && ! track->info().patternRecoInfo( Trk::TrackInfo::SiSPSeededFinder ) )
+    //    continue;
+    
+    
+    // Loose primary tracks
+    if ( !m_trackSelTool->accept(*track) )
+      continue;
+    
+    // Create a new summary or get copy of the cached one
+    std::unique_ptr<const Trk::TrackSummary> summary(m_trkSummaryTool->createSummary( * track ) );
+    
+    if ( !summary )
+      {
+	ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL pointer to track summary" );
+	continue;
+      }
+    
+    nBase++;
+    
+    
+    // =================================== //
+    // Fill hits BEGINS
+    int numberOfPixelHits = ( summary->get(Trk::numberOfPixelHits) >= 0 ) ? summary->get(Trk::numberOfPixelHits) : 0 ;
+    int numberOfPixelDeadSensors = ( summary->get(Trk::numberOfPixelDeadSensors) >= 0 ) ? summary->get(Trk::numberOfPixelDeadSensors ) : 0 ;
+    int pixHits = numberOfPixelHits + numberOfPixelDeadSensors;
+    
+    int numberOfSCTHits =  ( summary->get(Trk::numberOfSCTHits) >= 0 ) ? summary->get(Trk::numberOfSCTHits) : 0  ;
+    int numberOfSCTDeadSensors =  ( summary->get(Trk::numberOfSCTDeadSensors) >= 0 ) ? summary->get(Trk::numberOfSCTDeadSensors) : 0 ; 
+    int sctHits = numberOfSCTHits + numberOfSCTDeadSensors;
+    
+    int trtHits = summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTDeadStraws);
+    
+    
+    const Trk::Perigee *perigee = track->perigeeParameters();
+    if ( !perigee )  
+      {
+	ATH_MSG_DEBUG( "InDetGlobalMonitoringRun3Test: NULL track->perigeeParameters pointer " );
+	continue;
+      }
+    
+    float eta_perigee = perigee->eta();
+    float phi_perigee = perigee->parameters()[Trk::phi0];
+    
+    auto eta_perigee_m   = Monitored::Scalar<float>( "m_eta_perigee", eta_perigee);
+    auto phi_perigee_m   = Monitored::Scalar<float>( "m_phi_perigee", phi_perigee);
+    fill(trackGroup, eta_perigee_m, phi_perigee_m); // Trk_Base_eta_phi
+    
+    
+    if ( m_doIBL )
+      {
+	int numberOfInnermostPixelLayerHits = summary->get( Trk::numberOfInnermostPixelLayerHits );
+	auto numberOfInnermostPixelLayerHits_m = Monitored::Scalar<int>( "m_numberOfInnermostPixelLayerHits", numberOfInnermostPixelLayerHits);
+	fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfInnermostPixelLayerHits_m);
+	
+	fill(trackGroup, lb_m, numberOfInnermostPixelLayerHits_m);
+      }
+    
+    auto pixHits_m  = Monitored::Scalar<int>( "m_pixHits", pixHits ); 
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, pixHits_m);
+    fill(trackGroup, lb_m, pixHits_m);
+    
+    auto numberOfPixelDeadSensors_m = Monitored::Scalar<int>( "m_numberOfPixelDeadSensors", numberOfPixelDeadSensors );
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelDeadSensors_m);
+    
+    int numberOfPixelSharedHits = ( summary->get(Trk::numberOfPixelSharedHits) >= 0 ) ? summary->get(Trk::numberOfPixelSharedHits) : 0 ;
+    auto numberOfPixelSharedHits_m = Monitored::Scalar<int>( "m_numberOfPixelSharedHits", numberOfPixelSharedHits);
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSharedHits_m);
+    
+    int numberOfPixelHoles = summary->get(Trk::numberOfPixelHoles) >= 0 ? summary->get(Trk::numberOfPixelHoles) : 0;
+    auto numberOfPixelHoles_m = Monitored::Scalar<int>( "m_numberOfPixelHoles", numberOfPixelHoles); 
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelHoles_m);
+    
+    int numberOfPixelSplitHits = ( summary->get(Trk::numberOfPixelSplitHits) >= 0 ) ? summary->get(Trk::numberOfPixelSplitHits) : 0 ;
+    auto numberOfPixelSplitHits_m = Monitored::Scalar<int>( "m_numberOfPixelSplitHits", numberOfPixelSplitHits);
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSplitHits_m);
+    
+    auto sctHits_m  = Monitored::Scalar<int>( "m_sctHits", sctHits ); 
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, sctHits_m);
+    fill(trackGroup, lb_m, sctHits_m);
+    
+    auto numberOfSCTDeadSensors_m = Monitored::Scalar<int>( "m_numberOfSCTDeadSensors", numberOfSCTDeadSensors );
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTDeadSensors_m);
+    
+    int numberOfSCTSharedHits = ( summary->get(Trk::numberOfSCTSharedHits) >= 0 ) ? summary->get(Trk::numberOfSCTSharedHits) : 0 ;
+    auto numberOfSCTSharedHits_m = Monitored::Scalar<int>( "m_numberOfSCTSharedHits", numberOfSCTSharedHits);
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTSharedHits_m);
+    
+    int numberOfSCTHoles   = summary->get(Trk::numberOfSCTHoles) >= 0 ? summary->get(Trk::numberOfSCTHoles) : 0;
+    auto numberOfSCTHoles_m   = Monitored::Scalar<int>( "m_numberOfSCTHoles", numberOfSCTHoles);
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTHoles_m);
+    
+    auto trtHits_m  = Monitored::Scalar<int>( "m_trtHits", trtHits ); 
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, trtHits_m);
+    fill(trackGroup, lb_m, trtHits_m);
+    
+    int numberOfTRTDeadStraws =    ( summary->get(Trk::numberOfTRTDeadStraws) >= 0 ) ? summary->get(Trk::numberOfTRTDeadStraws) : 0 ;
+    auto numberOfTRTDeadStraws_m = Monitored::Scalar<int>( "m_numberOfTRTDeadStraws", numberOfTRTDeadStraws);
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfTRTDeadStraws_m);
+    
+    // Fill hits ENDS 
+    // =================================== //
+    
+    // =================================== //
+    // FillEtaPhi BEGINS
+    
+    int InnermostPixelLayerHit = 0;
+    int NextToInnermostPixelLayerHit = 0;
+    if ( m_doIBL )
+      {
+	// no IBL hit but a hit is expected
+	if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) InnermostPixelLayerHit = 1;
+	auto InnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_InnermostPixelLayerHit", InnermostPixelLayerHit);
+	fill(trackGroup, eta_perigee_m, phi_perigee_m, InnermostPixelLayerHit_m);
+	
+	
+	// no b-layer hit but a hit is expected
+	if ( summary->get( Trk::expectNextToInnermostPixelLayerHit ) && !summary->get( Trk::numberOfNextToInnermostPixelLayerHits ) ) NextToInnermostPixelLayerHit = 1 ;
+	auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit);
+	fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m);
+	
+      }
+    else
+      {
+	if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) InnermostPixelLayerHit = 1;
+	NextToInnermostPixelLayerHit = InnermostPixelLayerHit;
+	auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit);
+	fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m);
+	
+      }
+    
+    // No TRT extension
+    int noTRTHits = 0;
+    if ( summary->get(Trk::numberOfTRTHits) == 0 ) noTRTHits = 1;
+    auto noTRTHits_m = Monitored::Scalar<int>( "m_noTRTHits", noTRTHits);
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, noTRTHits_m);
+    
+    
+    // Tight track selection
+    int track_pass_tight = 0;
+    if ( m_tight_trackSelTool -> accept(*track) ) track_pass_tight = 1; // tight selection
+    auto track_pass_tight_m = Monitored::Scalar<int>( "m_track_pass_tight", track_pass_tight);
+    fill(trackGroup, eta_perigee_m, phi_perigee_m, track_pass_tight_m);
+    
+    // =================================== //
+    // FillEtaPhi ENDS    
+    
+    int NoIBL = 0;
+    if ( m_doIBL )
+      {
+	// no IBL hit but a hit is expected
+	if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) NoIBL = 1;
+	if (NoIBL == 1) nNoIBL++;
+	auto NoIBL_m = Monitored::Scalar<int>( "m_NoIBL_LB", NoIBL);
+	fill(trackGroup, lb_m, NoIBL_m);
+      }
+    
+    int NoBL = 0;
+    if ( summary->get( ( m_doIBL ) ? Trk::expectNextToInnermostPixelLayerHit : Trk::expectInnermostPixelLayerHit ) && !summary->get( ( m_doIBL ) ? Trk::numberOfNextToInnermostPixelLayerHits : Trk::numberOfInnermostPixelLayerHits ) ) NoBL = 1;
+    if (NoBL == 1) nNoBL++;
+    auto NoBL_m = Monitored::Scalar<int>( "m_NoBL_LB", NoBL);
+    fill(trackGroup, lb_m, NoBL_m);
+    
+    int NoTRText = 0;
+    if ( summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTOutliers) == 0 ) NoTRText = 1;
+    if (NoTRText == 1) nNoTRText++;
+    auto NoTRText_m = Monitored::Scalar<int>( "m_NoTRText_LB", NoTRText);
+    fill(trackGroup, lb_m, NoTRText_m);
+    
+    
+    if ( m_tight_trackSelTool -> accept(*track) )
+      {
+	nTight++;
+      } 
+    
+    
+    // FillHitMaps is false for now
+    // FillHoles is false for now
+    
+    
+  } // end of track loop
   
   // Filling per-event histograms
   auto nBase_m   = Monitored::Scalar<int>( "m_nBase", nBase);
   fill(trackGroup, nBase_m);
-
+  
   auto nBaseLB_m   = Monitored::Scalar<int>( "m_nBase_LB", nBase);
   fill(trackGroup, lb_m, nBaseLB_m);