From edad96567969f542a6147bb55129ea016531f090 Mon Sep 17 00:00:00 2001
From: MatousVozak <matous.vozak@cern.ch>
Date: Wed, 14 Oct 2020 11:14:43 +0200
Subject: [PATCH] adding monitoring to particle creator in IDTrig precision
 tracking

---
 .../src/TrackParticleCnvAlg.cxx               |  14 +-
 .../xAODTrackingCnv/src/TrackParticleCnvAlg.h |   5 +-
 .../ITrackParticleMonitoring.h                |   2 +-
 .../TrigInDetConfig/python/ConfigSettings.py  |   8 +-
 .../TrigInDetConfig/python/InDetPT.py         |  65 ++-------
 .../TrigInDetConfig/python/InDetTrigCommon.py | 130 +++++++++---------
 .../python/TrigInDetTrackingMonitoring.py     |  34 ++---
 .../src/TrigInDetTrackMonitoringTool.cxx      |  69 +++-------
 .../src/TrigInDetTrackMonitoringTool.h        |   2 +-
 9 files changed, 139 insertions(+), 190 deletions(-)

diff --git a/Event/xAOD/xAODTrackingCnv/src/TrackParticleCnvAlg.cxx b/Event/xAOD/xAODTrackingCnv/src/TrackParticleCnvAlg.cxx
index 8127b234af1..4a1d5be5fb4 100644
--- a/Event/xAOD/xAODTrackingCnv/src/TrackParticleCnvAlg.cxx
+++ b/Event/xAOD/xAODTrackingCnv/src/TrackParticleCnvAlg.cxx
@@ -51,6 +51,9 @@ namespace xAODMaker {
     declareProperty( "ConvertTracks",           m_convertTracks = false ); 
     declareProperty( "TrackCollectionCnvTool",                 m_TrackCollectionCnvTool );
     declareProperty( "RecTrackParticleContainerCnvTool",       m_RecTrackParticleContainerCnvTool );
+    declareProperty( "DoMonitoring",      m_doMonitoring = false  );
+    declareProperty( "TrackMonTool",      m_trackMonitoringTool  );
+
   }
 
   StatusCode TrackParticleCnvAlg::initialize() {
@@ -62,11 +65,11 @@ namespace xAODMaker {
     if(m_addTruthLink) ATH_CHECK(m_truthClassifier.retrieve());
     else m_truthClassifier.disable();
     ATH_CHECK( m_TrackCollectionCnvTool.retrieve() );
-    ATH_CHECK( m_RecTrackParticleContainerCnvTool.retrieve() );
+    ATH_CHECK( m_RecTrackParticleContainerCnvTool.retrieve(DisableTool{!m_convertAODTrackParticles}) );
     // to preserve the inisialised parameters of the ParticleCreatorTool:
     ATH_MSG_DEBUG( "Overriding particle creator tool settings." );
     ATH_CHECK( m_TrackCollectionCnvTool->setParticleCreatorTool( &m_particleCreator ) );
-    ATH_CHECK( m_RecTrackParticleContainerCnvTool->setParticleCreatorTool( &m_particleCreator ) );
+    if(m_convertAODTrackParticles) ATH_CHECK( m_RecTrackParticleContainerCnvTool->setParticleCreatorTool( &m_particleCreator ) );
 
     ATH_CHECK(m_xaodout.initialize(m_convertTracks));
     ATH_CHECK(m_xaodTrackParticlesout.initialize(m_convertAODTrackParticles));
@@ -76,6 +79,9 @@ namespace xAODMaker {
     ATH_CHECK(m_aodTruth.initialize(m_addTruthLink && m_convertAODTrackParticles));
     ATH_CHECK(m_trackTruth.initialize(m_addTruthLink && m_convertTracks));
 
+    //Retrieve monitoring tool if provided
+    ATH_CHECK( m_trackMonitoringTool.retrieve(DisableTool{!m_doMonitoring}) );
+
 
     // Return gracefully:
     return StatusCode::SUCCESS;
@@ -140,6 +146,10 @@ namespace xAODMaker {
       SG::WriteHandle<xAOD::TrackParticleContainer> wh_xaodout(m_xaodout, ctx);
       ATH_CHECK(wh_xaodout.record(std::make_unique<xAOD::TrackParticleContainer>(), std::make_unique<xAOD::TrackParticleAuxContainer>()));
       convert((*tracks), trackTruth, m_TrackCollectionCnvTool,  wh_xaodout, truthLinks);
+
+      //Monitor track parameters
+      if( m_doMonitoring) m_trackMonitoringTool->monitor_tracks( "Track", "Pass", *wh_xaodout );
+
     }
     if (m_convertAODTrackParticles){
       SG::WriteHandle<xAOD::TrackParticleContainer> wh_xaodTrackParticlesout(m_xaodTrackParticlesout, ctx);
diff --git a/Event/xAOD/xAODTrackingCnv/src/TrackParticleCnvAlg.h b/Event/xAOD/xAODTrackingCnv/src/TrackParticleCnvAlg.h
index 631dd39f3ad..39a5cf5deee 100644
--- a/Event/xAOD/xAODTrackingCnv/src/TrackParticleCnvAlg.h
+++ b/Event/xAOD/xAODTrackingCnv/src/TrackParticleCnvAlg.h
@@ -99,8 +99,9 @@ namespace xAODMaker {
     SG::ReadHandleKey<TrackTruthCollection>  m_trackTruth;    
 
 
-    //Online Track monitoring
-    ToolHandle< ITrackParticleMonitoring > m_trackMonitoringTool;
+    //Allow monitoring of track parameters during conversion
+    bool m_doMonitoring;
+    ToolHandle< ITrackParticleMonitoring > m_trackMonitoringTool { this, "MonTool", "", "Tracking Monitoring tool" };
 
 
 
diff --git a/Event/xAOD/xAODTrackingCnv/xAODTrackingCnv/ITrackParticleMonitoring.h b/Event/xAOD/xAODTrackingCnv/xAODTrackingCnv/ITrackParticleMonitoring.h
index f7716128054..86df26a9777 100755
--- a/Event/xAOD/xAODTrackingCnv/xAODTrackingCnv/ITrackParticleMonitoring.h
+++ b/Event/xAOD/xAODTrackingCnv/xAODTrackingCnv/ITrackParticleMonitoring.h
@@ -22,7 +22,7 @@ public:
 
 
    /* Monitor track parameters via mon tool, prefix and suffix allows to switch between different Track collections if needed */
-   virtual void monitor_tracks(const std::string &prefix, const std::string &suffix, const xAOD::TrackParticleContainer &tracks ) = 0;
+   virtual void monitor_tracks(const std::string &prefix, const std::string &suffix, const xAOD::TrackParticleContainer &tracks ) const = 0;
 
 };
 
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/ConfigSettings.py b/Trigger/TrigTools/TrigInDetConfig/python/ConfigSettings.py
index 2cacc7d2ab0..7ff36e1ebbf 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/ConfigSettings.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/ConfigSettings.py
@@ -53,7 +53,8 @@ class _Settings :
       self._doFullScan          = False
       self._monPS               = 1
       self._monPtMin            = 1*GeV
-      self._doTRT               = False
+      self._doTRT               = False #Apply TRT extension sequence after ambiguity solving
+      self._keepTrackParameters = False #Keep track parameters in conversion to TrackParticles
 
 #Previous version in:
 #https://gitlab.cern.ch/atlas/athena/-/blob/master/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigSliceSettings.py#L70
@@ -125,6 +126,10 @@ class _Settings :
    @property
    def doTRT(self):
       return self._doTRT
+
+   @property
+   def keepTrackParameters(self):
+      return self._keepTrackParameters
    
    def printout(self): 
       print( self._name, " :")
@@ -152,6 +157,7 @@ class _Tracking_electron( _Settings ):
       self._doCloneRemoval      = True #Previously False in Run2!
       self._checkRedundantSeeds = True
       self._doTRT               = True
+      self._keepTrackParameters = True
 
 class _Tracking_tauCore( _Settings ): 
    def __init__( self ): 
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/InDetPT.py b/Trigger/TrigTools/TrigInDetConfig/python/InDetPT.py
index c6c2a91ffd3..f5b47cfafcb 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/InDetPT.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/InDetPT.py
@@ -81,12 +81,12 @@ def makeInDetPrecisionTracking( config = None,
       if "electron" in config.name  or "tau" in config.name:
          trigTrackSummaryTool.TRT_ElectronPidTool = InDetTrigTRT_ElectronPidTool
 
-      Parameter_config = True 
+      #Parameter_config = True 
       SummaryTool_config = trigTrackSummaryTool
       ToolSvc += SummaryTool_config
   else:
       SummaryTool_config = InDetTrigTrackSummaryTool
-      Parameter_config = False
+      #Parameter_config = False
 
 
   #-----------------------------------------------------------------------------
@@ -287,60 +287,15 @@ def makeInDetPrecisionTracking( config = None,
   #                      Track particle conversion algorithm
   #
   #
-  #TODO: convert into builders/getters
-  #Monitoring has been removed in the recent MR, put back in
-  """ Use the finalised track collection and convert it to container of xAOD Track Particles  """
-  
-  
-  from TrkParticleCreator.TrkParticleCreatorConf import Trk__TrackParticleCreatorTool
-  InDetTrigMTxAODParticleCreatorTool = Trk__TrackParticleCreatorTool(name =  "%sxAODParticleCreatorTool%s" %(algNamePrefix, signature),
-                                                                     Extrapolator = InDetTrigExtrapolator,
-                                                                     KeepParameters = Parameter_config,
-                                                                     #TrackSummaryTool = InDetTrigTrackSummaryToolSharedHits) 
-                                                                     TrackSummaryTool = SummaryTool_config)
-  
-  ToolSvc += InDetTrigMTxAODParticleCreatorTool
-  log.debug(InDetTrigMTxAODParticleCreatorTool)
-  
-  
-  from xAODTrackingCnv.xAODTrackingCnvConf import xAODMaker__TrackCollectionCnvTool
-  InDetTrigMTxAODTrackCollectionCnvTool= xAODMaker__TrackCollectionCnvTool(
-     name = "%sxAODTrackCollectionCnvTool%s" %(algNamePrefix, signature),
-     TrackParticleCreator = InDetTrigMTxAODParticleCreatorTool)
-  
+  from .InDetTrigCommon import trackParticleCnv_builder
+  trackParticleCnvAlg = trackParticleCnv_builder(name                 = get_full_name( 'xAODParticleCreatorAlg',config.name + '_IDTrig' ), #IDTrig suffix signifies that this is for precision tracking
+                                                 config               = config,
+                                                 inTrackCollectionKey = outPTTracks,
+                                                 outTrackParticlesKey = outPTTrackParticles,
+                                                 )
+  log.debug(trackParticleCnvAlg)
+  ptAlgs.append(trackParticleCnvAlg)
 
-  ToolSvc += InDetTrigMTxAODTrackCollectionCnvTool
-  log.debug(InDetTrigMTxAODTrackCollectionCnvTool)
-  
-  #This one shouldn't be necessary
-  #TODO: obsolete turn off
-  from xAODTrackingCnv.xAODTrackingCnvConf import  xAODMaker__RecTrackParticleContainerCnvTool
-  InDetTrigMTRecTrackParticleContainerCnvTool=  xAODMaker__RecTrackParticleContainerCnvTool(
-     name = "%sRecTrackContainerCnvTool%s" %(algNamePrefix, signature),
-     TrackParticleCreator = InDetTrigMTxAODParticleCreatorTool )
-  
-  ToolSvc += InDetTrigMTRecTrackParticleContainerCnvTool
-  #print (InDetTrigMTRecTrackParticleContainerCnvTool)
-  
-  from xAODTrackingCnv.xAODTrackingCnvConf import xAODMaker__TrackParticleCnvAlg
-  InDetTrigMTxAODTrackParticleCnvAlg = xAODMaker__TrackParticleCnvAlg( name = "%sxAODParticleCreatorAlg%s" %( algNamePrefix, signature),
-                                                                      # Properties below are used for:  TrackCollection -> xAOD::TrackParticle
-                                                                        ConvertTracks = True,  #Turn on  retrieve of TrackCollection, false by default
-                                                                        TrackContainerName                        = outPTTracks,
-                                                                        xAODTrackParticlesFromTracksContainerName = outPTTrackParticles,
-                                                                        TrackCollectionCnvTool = InDetTrigMTxAODTrackCollectionCnvTool,
-                                                                       ## Properties below are used for: Rec:TrackParticle, aod -> xAOD::TrackParticle (Turn off)
-                                                                        ConvertTrackParticles = False,  # Retrieve of Rec:TrackParticle, don't need this atm
-                                                                        xAODContainerName = '',  
-                                                                        RecTrackParticleContainerCnvTool = InDetTrigMTRecTrackParticleContainerCnvTool,
-                                                                        TrackParticleCreator = InDetTrigMTxAODParticleCreatorTool
-                                                                        )
-  
-  
-  #allViewAlgorithms += InDetTrigMTxAODTrackParticleCnvAlg
-  log.debug(InDetTrigMTxAODTrackParticleCnvAlg)
-  ptAlgs.append( InDetTrigMTxAODTrackParticleCnvAlg)
-  
   #ToolSvc.InDetTrigHoleSearchTool.SctSummaryTool.InDetTrigInDetSCT_FlaggedConditionTool.SCT_FlaggedCondData = "SCT_FlaggedCondData_TRIG"
   
   
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/InDetTrigCommon.py b/Trigger/TrigTools/TrigInDetConfig/python/InDetTrigCommon.py
index a16ff586553..8682b2070bf 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/InDetTrigCommon.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/InDetTrigCommon.py
@@ -10,6 +10,13 @@ from InDetTrigRecExample.InDetTrigFlags import InDetTrigFlags
 
 
 
+#-------------------------------
+#TODO: 
+
+#Make loader for extrapolator
+
+#-------------------------------
+
 def get_name_prefix():
    #Too long? Do we need this to separate from InDet?
    return 'InDetTrigMT_'
@@ -42,84 +49,81 @@ def trackSummaryTool_getter( doTRT ):
       return InDetTrigTrackSummaryTool
 
 #--------------------------------------------------------------------------------------
-#TODO:
-#1] need to implement this in both FTF and PT
-#2] Convert this tool into builders and getters
-def getTrackParticleCnv( prefix, suffix, outPTTracks, outPTTrackParticles ):
-  """ Use the  track collection and convert it to container of xAOD Track Particles  """
-  #suffix = '_%s'suff if suff else '' #Suffix should be based on the signature and type of tracking, e.g for cosmics and PT  -> Cosmics_PT ( for FTF or EFID, Cosmics_FTF, Cosmics_EFID )
-  from AthenaCommon.AppMgr import ToolSvc
-  keepParameter = False 
-  if 'Electron' in suffix:
-      keepParameter = True
-      
 
-  from InDetTrigRecExample.InDetTrigConfigRecLoadTools import InDetTrigTrackSummaryTool, InDetTrigExtrapolator
+
+@makePublicTool
+def trackParticleCreatorTool_builder(name, config):
+  """Tool with functionality to convert Trk:Tracks into xAOD::TrackParticles"""
+  from InDetTrigRecExample.InDetTrigConfigRecLoadTools import  InDetTrigExtrapolator
   from TrkParticleCreator.TrkParticleCreatorConf import Trk__TrackParticleCreatorTool
-  InDetTrigMTxAODParticleCreatorTool = Trk__TrackParticleCreatorTool(name =  "%sxAODParticleCreatorTool%s" %(prefix, suffix),
-                                                                     Extrapolator = InDetTrigExtrapolator,
-                                                                     KeepParameters = keepParameter,
-                                                                     #TrackSummaryTool = InDetTrigTrackSummaryToolSharedHits) 
-                                                                     TrackSummaryTool = InDetTrigTrackSummaryTool )
-  
-  ToolSvc += InDetTrigMTxAODParticleCreatorTool
-  #log.info(InDetTrigMTxAODParticleCreatorTool)
-  
-  
+  return Trk__TrackParticleCreatorTool(name             = name,
+                                       Extrapolator     = InDetTrigExtrapolator,
+                                       KeepParameters   = config.PT.setting.keepTrackParameters,
+                                       TrackSummaryTool = trackSummaryTool_getter( config.PT.setting.doTRT ) )
+
+
+@makePublicTool
+def trackCollectionCnvTool_builder(name, trackParticleCreatorTool, config):
+  """A wrapper tool around trackParticleCreatorTool that enables to run on the whole TrackCollections"""
   from xAODTrackingCnv.xAODTrackingCnvConf import xAODMaker__TrackCollectionCnvTool
-  InDetTrigMTxAODTrackCollectionCnvTool= xAODMaker__TrackCollectionCnvTool(name = "%sxAODTrackCollectionCnvTool%s" %(prefix, suffix),
-                                                                           TrackParticleCreator = InDetTrigMTxAODParticleCreatorTool)
-  
-  ToolSvc += InDetTrigMTxAODTrackCollectionCnvTool
-  #log.info(InDetTrigMTxAODTrackCollectionCnvTool)
-  
-  #This one shouldn't be necessary
-  #TODO: obsolete, try to turn off
-  from xAODTrackingCnv.xAODTrackingCnvConf import  xAODMaker__RecTrackParticleContainerCnvTool
-  InDetTrigMTRecTrackParticleContainerCnvTool=  xAODMaker__RecTrackParticleContainerCnvTool(name = "%sRecTrackContainerCnvTool%s" %(prefix, suffix),
-                                                                                            TrackParticleCreator = InDetTrigMTxAODParticleCreatorTool)
-  
-  ToolSvc += InDetTrigMTRecTrackParticleContainerCnvTool
+  return xAODMaker__TrackCollectionCnvTool( name                 = name,
+                                            TrackParticleCreator = trackParticleCreatorTool )
 
 
 
-  #Adding new monitoring tool
+def trackMonitoringTool_builder(suffix):
   #First load the generic monitoring tool with set of histograms for Particle Cnv
   from TrigInDetMonitoringTools.TrigInDetTrackingMonitoring import  TrigInDetTrackCnvMonitoring
-  #TODO need to add extra property for prefix and suffix of the track collections to be monitored
-  #Or maybe no need the name itself should be obvious from the particle cnv alg
-  monTool = TrigInDetTrackCnvMonitoring( name = '%sParticleCreatorCnv%s'%( prefix, suffix ) )
+  genericMonTool = TrigInDetTrackCnvMonitoring( name = 'GenericMonitoring_{}'.format(suffix))
+
+   
 
   #Now pass this tool to the Track Monitoring tool
   from TrigInDetMonitoringTools.TrigInDetMonitoringToolsConf import TrigInDetTrackMonitoringTool
-  monTrackCnv = TrigInDetTrackMonitoringTool( name = '%sParticleCreatorCnv%s'%( prefix, suffix ),
-                                             MonitoringTool = monTool
-                                            )
+  return TrigInDetTrackMonitoringTool( name           = 'xAODParticleCreatorAlg_{}'.format(suffix),
+                                       MonitoringTool = genericMonTool)
 
-  
-   
-  ToolSvc += monTrackCnv
 
-  from xAODTrackingCnv.xAODTrackingCnvConf import xAODMaker__TrackParticleCnvAlg
-  InDetTrigMTxAODTrackParticleCnvAlg = xAODMaker__TrackParticleCnvAlg(  name = "%sxAODParticleCreatorAlg%s" %( prefix, suffix),
-                                                                      # Properties below are used for:  TrackCollection -> xAOD::TrackParticle
-                                                                        ConvertTracks = True,  #Turn on  retrieve of TrackCollection, false by default
-                                                                        TrackContainerName                        = outPTTracks,
-                                                                        xAODTrackParticlesFromTracksContainerName = outPTTrackParticles, 
-                                                                        TrackCollectionCnvTool = InDetTrigMTxAODTrackCollectionCnvTool,
-                                                                       ## Properties below are used for: Rec:TrackParticle, aod -> xAOD::TrackParticle (Turn off)
-                                                                        ConvertTrackParticles = False,  # Retrieve of Rec:TrackParticle, don't need this atm
-                                                                        xAODContainerName = '',  
-                                                                        RecTrackParticleContainerCnvTool = InDetTrigMTRecTrackParticleContainerCnvTool,
-                                                                        TrackParticleCreator = InDetTrigMTxAODParticleCreatorTool,
-                                                                        #Add online track monitoring
-                                                                        DoMonitoring = True,
-                                                                        TrackMonTool  = monTrackCnv
-                                                                      )
-
-  return InDetTrigMTxAODTrackParticleCnvAlg
 
+#Returns suffix of tracking type from a given alg name
+def getTrackingSuffix( name ):
+   if 'IDTrig' in name:
+         return '_IDTrig'
+   elif 'FTF' in name:
+         return '_FTF'
+   elif 'EFID' in name:
+         return '_EFID'
+   else:
+      return ''
    
+   
+def trackParticleCnv_builder(name, config, inTrackCollectionKey, outTrackParticlesKey ):
+  """Alg that stages conversion of Trk::TrackCollection into xAOD::TrackParticle container"""
+      
+  trackParticleCreatorTool =  trackParticleCreatorTool_builder( name   = get_full_name( 'TrackParticleCreatorTool',config.name),
+                                                                config = config )
+  
+  trackCollectionCnvTool   =  trackCollectionCnvTool_builder( name                     = get_full_name( 'xAODTrackCollectionCnvTool',config.name),
+                                                              trackParticleCreatorTool = trackParticleCreatorTool,
+                                                              config                   = config )
+  
+  from xAODTrackingCnv.xAODTrackingCnvConf import xAODMaker__TrackParticleCnvAlg
+  return  xAODMaker__TrackParticleCnvAlg(  name                                      = name,
+                                           # Properties below are used for:  TrackCollection -> xAOD::TrackParticle
+                                           ConvertTracks                             = True,  #Turn on  retrieve of TrackCollection, false by default
+                                           TrackContainerName                        = inTrackCollectionKey, 
+                                           xAODTrackParticlesFromTracksContainerName = outTrackParticlesKey, 
+                                           TrackCollectionCnvTool                    = trackCollectionCnvTool,
+                                           TrackParticleCreator                      = trackParticleCreatorTool,
+                                           #Add track monitoring
+                                           DoMonitoring                              = True, 
+                                           TrackMonTool                              = trackMonitoringTool_builder( config.name + getTrackingSuffix(name) ), 
+                                           # Properties below are used for obsolete: Rec:TrackParticle, aod -> xAOD::TrackParticle (Turn off)
+                                           ConvertTrackParticles = False,  # Retrieve of Rec:TrackParticle, don't need this atm
+                                           xAODContainerName                         = '',  
+                                           #---------------------------------------------------------------------------------
+                                         )
+
 
 #--------------------------------------------------------------------------------------
 ## Scoring tools
diff --git a/Trigger/TrigTools/TrigInDetMonitoringTools/python/TrigInDetTrackingMonitoring.py b/Trigger/TrigTools/TrigInDetMonitoringTools/python/TrigInDetTrackingMonitoring.py
index 4529e146be1..db30a5e0be4 100644
--- a/Trigger/TrigTools/TrigInDetMonitoringTools/python/TrigInDetTrackingMonitoring.py
+++ b/Trigger/TrigTools/TrigInDetMonitoringTools/python/TrigInDetTrackingMonitoring.py
@@ -6,6 +6,7 @@ class TrigInDetTrackCnvMonitoring(GenericMonitoringTool):
     def __init__ (self, name="TrigInDetTrackCnvMonitoring"):
         super(TrigInDetTrackCnvMonitoring, self).__init__(name)
 
+        #Example:
         #self.defineHistogram('EventStatistics', path='EXPERT', type='TH1F',
         #                                     title="EventStatistics",
         #                                     xbins=9, xmin=-0.5, xmax=8.5, opt='kLBN',
@@ -14,15 +15,17 @@ class TrigInDetTrackCnvMonitoring(GenericMonitoringTool):
       #-------------------------------------------------------------------------------------------------
       #                             Monitoring track parameters
 
+       #TODO need to revisit binning with higher stats
+
         self.defineHistogram('TrackPtPass', path='EXPERT', type='TH1F',
                                              title="Acc. Track Pt; p_{t} [GeV]; Number of tracks",
-                                             xbins=50, xmin=0.0, xmax=50.0)
+                                             xbins=200, xmin=0.0, xmax=1000.0)
         self.defineHistogram('TrackQOverPPass',path='EXPERT', type='TH1F',
-                                             title="Acc. Track Pt; p_{t} [GeV]; Number of tracks",
+                                             title="Acc. Track q/p; q/p; Number of tracks",
                                              xbins=1000, xmin=-500., xmax=500.0)
         self.defineHistogram('TrackEtaPass', path='EXPERT', type='TH1F',
                                              title="Acc. Track Eta; #eta; Number of tracks",
-                                             xbins=60, xmin=-3.0, xmax=3.0)
+                                             xbins=50, xmin=-2.5, xmax=2.5)
         self.defineHistogram('TrackPhiPass', path='EXPERT', type='TH1F',
                                              title="Acc. Track Phi; #phi; Number of tracks",
                                              xbins=70, xmin=-3.5, xmax=3.5)
@@ -35,33 +38,30 @@ class TrigInDetTrackCnvMonitoring(GenericMonitoringTool):
         self.defineHistogram('TrackD0Pass', path='EXPERT', type='TH1F',
                                              title="Acc. Track D0; Track d0 [mm]; Number of tracks",
                                              xbins=400, xmin=-20.0, xmax=20.0)
-        self.defineHistogram('TrackZ0errPass', path='EXPERT', type='TH1F',
-                                             title="Acc. Track Z0err; Track z0 error [mm]; Number of tracks",
-                                             xbins=100, xmin=0., xmax=5.)
-        self.defineHistogram('TrackD0errPass', path='EXPERT', type='TH1F',
-                                             title="Acc. Track D0err; Track d0 error [mm]; Number of tracks",
-                                             xbins=100, xmin=0., xmax=5.)
+        #self.defineHistogram('TrackZ0errPass', path='EXPERT', type='TH1F',
+        #                                     title="Acc. Track Z0err; Track z0 error [mm]; Number of tracks",
+        #                                     xbins=100, xmin=0., xmax=5.)
+        #self.defineHistogram('TrackD0errPass', path='EXPERT', type='TH1F',
+        #                                     title="Acc. Track D0err; Track d0 error [mm]; Number of tracks",
+        #                                     xbins=100, xmin=0., xmax=5.)
+        #self.defineHistogram('TrackQualPass', path='EXPERT', type='TH1F',
+        #                                     title="Acc. Track Qual; Track #chi^{2}/ndf; Number of tracks",
+        #                                     xbins=50, xmin=0., xmax=10.)
         self.defineHistogram('TrackNDFPass', path='EXPERT', type='TH1F',
                                              title="Acc. Track NDF; Track NDF; Number of tracks",
                                              xbins=10, xmin=-0.5, xmax=9.5)
-        self.defineHistogram('TrackQualPass', path='EXPERT', type='TH1F',
-                                             title="Acc. Track Qual; Track #chi^{2}/ndf; Number of tracks",
-                                             xbins=50, xmin=0., xmax=10.)
         self.defineHistogram('TrackChi2ProbPass', path='EXPERT', type='TH1F',
                                              title="Acc. Track #chi^{2} probability; Track #chi^{2} probability; Number of tracks",
                                              xbins=70, xmin=-0.2, xmax=1.2)
         #Accepted Track hits in ID
-        self.defineHistogram('TrackSiHitsPass', path='EXPERT', type='TH1I',
-                                             title="Acc. Track Silicon hits; N Si hits; Number of tracks",
-                                             xbins=12, xmin=0, xmax=12)
         self.defineHistogram('TrackTRTHitsPass', path='EXPERT', type='TH1I',
                                              title="Acc. Track TRT hits; N TRT hits; Number of tracks",
                                              xbins=50, xmin=0, xmax=50)
         self.defineHistogram('TrackPIXHitsPass', path='EXPERT', type='TH1I',
                                              title="Acc. Track PIX hits; N PIX hits; Number of tracks",
-                                             xbins=7, xmin=0, xmax=7)
+                                             xbins=8, xmin=0, xmax=8)
         self.defineHistogram('TrackSCTHitsPass', path='EXPERT', type='TH1I',
                                              title="Acc. Track SCT hits; N SCT hits; Number of tracks",
-                                             xbins=9, xmin=0, xmax=9)
+                                             xbins=13, xmin=0, xmax=13)
 
 
diff --git a/Trigger/TrigTools/TrigInDetMonitoringTools/src/TrigInDetTrackMonitoringTool.cxx b/Trigger/TrigTools/TrigInDetMonitoringTools/src/TrigInDetTrackMonitoringTool.cxx
index c6a4d806c55..6b75b85dac7 100755
--- a/Trigger/TrigTools/TrigInDetMonitoringTools/src/TrigInDetTrackMonitoringTool.cxx
+++ b/Trigger/TrigTools/TrigInDetMonitoringTools/src/TrigInDetTrackMonitoringTool.cxx
@@ -43,61 +43,34 @@ StatusCode TrigInDetTrackMonitoringTool::finalize() {
 //Monitoring track variables
 //void TrigInDetTrackMonitoringTool::monitor_tracks(std::string prefix, std::string suffix, DataVector<xAOD::TrackParticle> tracks ){
 //void TrigInDetTrackMonitoringTool::monitor_tracks( const std::string &prefix, const std::string &suffix, const xAOD::TrackParticleContainer &tracks ){
-void TrigInDetTrackMonitoringTool::monitor_tracks( const std::string &prefix, const std::string &suffix, const xAOD::TrackParticleContainer &tracks ){
-   auto  trackPt      = Monitored::Collection(  prefix + "Pt"       + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->pt()      ;});
-   auto  trackQOverP  = Monitored::Collection(  prefix + "QOverP"       + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->qOverP()      ;});
-   auto  trackEta     = Monitored::Collection(  prefix + "Eta"      + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->eta()     ;});
-   auto  trackPhi     = Monitored::Collection(  prefix + "Phi"      + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->phi()     ;});
-   auto  trackTheta     = Monitored::Collection(  prefix + "Theta"      + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->theta()     ;});
-   auto  trackZ0      = Monitored::Collection(  prefix + "Z0"       + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->z0()      ;});
-   auto  trackD0      = Monitored::Collection(  prefix + "D0"       + suffix, tracks, []( const xAOD::TrackParticle *t){ return t->d0()      ;});
+void TrigInDetTrackMonitoringTool::monitor_tracks( const std::string &prefix, const std::string &suffix, const xAOD::TrackParticleContainer &tracks ) const {
+   auto  trackPt      = Monitored::Collection(  prefix + "Pt"       + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->pt();});
+   auto  trackQOverP  = Monitored::Collection(  prefix + "QOverP"   + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->qOverP();});
+   auto  trackEta     = Monitored::Collection(  prefix + "Eta"      + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->eta();});
+   auto  trackPhi     = Monitored::Collection(  prefix + "Phi"      + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->phi();});
+   auto  trackTheta   = Monitored::Collection(  prefix + "Theta"    + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->theta();});
+   auto  trackZ0      = Monitored::Collection(  prefix + "Z0"       + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->z0();});
+   auto  trackD0      = Monitored::Collection(  prefix + "D0"       + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->d0();});
+//TODO: append later if needed
 //   auto  trackZ0err   = Monitored::Collection(  prefix + "Z0err"    + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->Z0err()   ;});
 //   auto  trackD0err   = Monitored::Collection(  prefix + "D0err"    + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->D0err()   ;});
-   auto  trackNDF     = Monitored::Collection(  prefix + "NDF"      + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->numberDoF()     ;});
 //   auto  trackQual    = Monitored::Collection(  prefix + "Qual"     + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->Qual()    ;});
-   auto  trackChi2Prob= Monitored::Collection(  prefix + "Chi2Prob" + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->chiSquared();});
-   auto  trackPiHits  = Monitored::Collection(  prefix + "PIXHits"  + suffix, tracks, [](const xAOD::TrackParticle *t){  uint8_t nPixHits = 0; t->summaryValue( nPixHits,  xAOD::numberOfPixelHits); return nPixHits ;});
-   auto  trackSCTHits  = Monitored::Collection(  prefix + "SCTHits"  + suffix, tracks, [](const xAOD::TrackParticle *t){ uint8_t nSCTHits = 0; t->summaryValue( nSCTHits,  xAOD::numberOfSCTHits); return nSCTHits ;});
-   //auto  trackPiHits  = Monitored::Collection(  prefix + "PIXHits"  + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->numberOfPixelHits() ;});
-   //auto  trackSCTHits = Monitored::Collection(  prefix + "SCTHits"  + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->numberOfSCTHits() ;});
-//   auto  trackTRTHits = Monitored::Collection(  prefix + "TRTHits"  + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->TRTHits() ;});
-//   auto mon = Monitored::Group(m_monTool, trackPt, trackEta, trackPhi, trackZ0, trackD0, trackZ0err, trackD0err,
-//         trackNDF, trackQual, trackChi2Prob, trackSiHits, trackPiHits, trackSCTHits, trackTRTHits )
-//
 //
-//TODO need to record nHits  (from track summary?)
- //   uint8_t numberOfPixelHits = 0;
- //   particle->summaryValue(numberOfPixelHits, xAOD::numberOfPixelHits);
- //   m_dqm_npix_hits.push_back(static_cast<int>(numberOfPixelHits));
- //   uint8_t numberOfSCTHits = 0;
- //   particle->summaryValue(numberOfSCTHits, xAOD::numberOfSCTHits);
- //   m_dqm_nsct_hits.push_back(static_cast<int>(numberOfSCTHits));
- //   uint8_t numberOfTRTHits = 0;
- //   particle->summaryValue(numberOfTRTHits, xAOD::numberOfTRTHits);
- //   if (fabs(particle->eta())<1.9){
- //     m_dqm_ntrt_hits.push_back(static_cast<int>(numberOfTRTHits));
- //   } else {
- //     m_dqm_ntrt_hits.push_back(-1);
- //   }
-
- //   uint8_t expectInnermostHit = 0;
- //   particle->summaryValue(expectInnermostHit, xAOD::expectInnermostPixelLayerHit  );
- //   uint8_t numberOfInnermostHits = 0;
- //   particle->summaryValue(numberOfInnermostHits, xAOD::numberOfInnermostPixelLayerHits  );
- //   if (numberOfInnermostHits>1) numberOfInnermostHits = 1;
- //   if (expectInnermostHit>0){
- //     m_dqm_ibl_hit_expected_found.push_back(float(numberOfInnermostHits));
- //   }
- //   else {
- //     m_dqm_ibl_hit_expected_found.push_back(-1.);
- //   }
+   auto  trackNDF     = Monitored::Collection(  prefix + "NDF"      + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->numberDoF();});
+   auto  trackChi2Prob= Monitored::Collection(  prefix + "Chi2Prob" + suffix, tracks, [](const xAOD::TrackParticle *t){ return t->chiSquared();});
 
- //   if(particle->numberDoF()>0) {
- //     m_dqm_chi2dof.push_back(particle->chiSquared() / particle->numberDoF());
- //   }
+   //Hits in the layiers
+   auto  trackPiHits  = Monitored::Collection(  prefix + "PIXHits"  + suffix, tracks, [](const xAOD::TrackParticle *t){ uint8_t nPixHits = 0; t->summaryValue( nPixHits,  xAOD::numberOfPixelHits); return nPixHits ;});
+   auto  trackSCTHits = Monitored::Collection(  prefix + "SCTHits"  + suffix, tracks, [](const xAOD::TrackParticle *t){ uint8_t nSCTHits = 0; t->summaryValue( nSCTHits,  xAOD::numberOfSCTHits); return nSCTHits ;});
 
+   auto  trackTRTHits = Monitored::Collection(  prefix + "TRTHits"  + suffix, tracks, [](const xAOD::TrackParticle *t){ uint8_t nTRTHits = 0; t->summaryValue( nTRTHits,  xAOD::numberOfTRTHits); return nTRTHits ;});
 
+   //If needed add more monitored values from:
+   //https://gitlab.cern.ch/atlas/athena/-/blob/master/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx
 
-   auto mon = Monitored::Group(m_monTool, trackPt, trackEta, trackQOverP, trackPhi, trackTheta, trackD0 ,trackZ0, trackNDF, trackChi2Prob );
+   auto mon = Monitored::Group(m_monTool, 
+              trackPt, trackEta, trackQOverP, trackPhi, trackTheta, trackD0 ,trackZ0, trackNDF, trackChi2Prob, 
+              trackPiHits, trackSCTHits, trackTRTHits //Hits in the det layers
+              ); 
 }
 
diff --git a/Trigger/TrigTools/TrigInDetMonitoringTools/src/TrigInDetTrackMonitoringTool.h b/Trigger/TrigTools/TrigInDetMonitoringTools/src/TrigInDetTrackMonitoringTool.h
index 98599feeeaf..37c6afed629 100755
--- a/Trigger/TrigTools/TrigInDetMonitoringTools/src/TrigInDetTrackMonitoringTool.h
+++ b/Trigger/TrigTools/TrigInDetMonitoringTools/src/TrigInDetTrackMonitoringTool.h
@@ -26,7 +26,7 @@ public:
   virtual StatusCode initialize() final;
   virtual StatusCode finalize()   final;
 
-  void monitor_tracks(const std::string &prefix, const std::string &suffix, const xAOD::TrackParticleContainer &tracks );
+  void monitor_tracks(const std::string &prefix, const std::string &suffix, const xAOD::TrackParticleContainer &tracks ) const;
 
 private:
   ToolHandle<GenericMonitoringTool> m_monTool{this,"MonitoringTool","","Monitoring tool"};
-- 
GitLab