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