diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValJobProperties.py b/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValJobProperties.py
index 5173e5ed488ceb2ac9ae239ebed6f07f631729f3..f3ccfc3c9a1b635c749577cb90058b1aa97bee1b 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValJobProperties.py
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValJobProperties.py
@@ -146,6 +146,11 @@ class setTruthStrategy(InDetPhysValFlagsJobProperty):
     allowedTypes = ['string']
     StoredValue = 'HardScatter'
 
+class ancestorIDs(InDetPhysValFlagsJobProperty):
+    statusOn = True
+    allowedTypes = ['list']
+    StoredValue = []
+
 
 class hardScatterStrategy(InDetPhysValFlagsJobProperty):
     """The hard-scatter vertex selection strategy to use when running hard-scatter efficiency / performance plots in IDPVM. 0 corresponds to sumPt^2, 1 corresponds to sumPt"""
@@ -226,6 +231,7 @@ _list_InDetPhysValJobProperties = [
     doTruthOriginPlots,
     doPerAuthorPlots,
     doHitLevelPlots,
+    ancestorIDs,
     hardScatterStrategy
 ]
 
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValMonitoringTool.py b/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValMonitoringTool.py
index 7d432a66393d719e6592460a797d3f2b8fdb944a..50b578d9d61f0c96248ce1df2e60b8ccddfceb63 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValMonitoringTool.py
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValMonitoringTool.py
@@ -240,10 +240,13 @@ def getInDetPhysValMonitoringToolDBM(**kwargs):
 def getInDetLargeD0PhysValMonitoringTool(**kwargs):
     from InDetRecExample.InDetJobProperties import InDetFlags
     from InDetRecExample.InDetKeys import InDetKeys
+    from InDetPhysValMonitoring.InDetPhysValDecoration import getInDetRttTruthSelectionTool
+    from InDetPhysValMonitoring.InDetPhysValJobProperties import InDetPhysValFlags
     kwargs = setDefaults(
         kwargs,
         name='InDetPhysValMonitoringToolLargeD0',
-        SubFolder='LargeD0/',
+        SubFolder='LRT/',
+        TruthSelectionTool=getInDetRttTruthSelectionTool(name="AthTruthSelectionToolForIDPVM_LargeD0",maxProdVertRadius = 440.,minPt=1200.,ancestorList=InDetPhysValFlags.ancestorIDs()),
         TrackParticleContainerName=InDetKeys.xAODLargeD0TrackParticleContainer(
         ) if InDetFlags.storeSeparateLargeD0Container() else InDetKeys.xAODTrackParticleContainer(),
         useTrackSelection=True)
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/run/LargeD0_jobOptions.py b/InnerDetector/InDetValidation/InDetPhysValMonitoring/run/LargeD0_jobOptions.py
deleted file mode 100644
index 72449f7597e834b797171d96ce78bebc279dc6c9..0000000000000000000000000000000000000000
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/run/LargeD0_jobOptions.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-
-# $Id: LargeD0_jobOptions.py 779296 2016-10-19 18:17:30Z sroe $
-
-# Set up the reading of the input xAOD:
-
-#"AOD.05522648._000044.pool.root.1" K-short dataset
-#"ESD.05108991._000060.pool.root.1" original ttbar dataset 
-#"ESD.05297574._000081.pool.root.1" new ttbar dataset (this one should enable residuals)
-
-import getpass
-FNAME = "AOD.pool.root"
-'''
-FNAME = ["/n/atlas05/userdata/sche/MC15/xAOD/zprimemumu/emu_RecExCommon/r6/user.sche.LRT.r6.mc15_13TeV.301913.Pythia8EvtGen_A14NNPDF23LO_LLzprimemumu_m250t500.recon.ESD.e4821_s2698_r6939_AOD/user.sche.8294387.AOD._000001.pool.root",
-         "/n/atlas05/userdata/sche/MC15/xAOD/zprimemumu/emu_RecExCommon/r6/user.sche.LRT.r6.mc15_13TeV.301913.Pythia8EvtGen_A14NNPDF23LO_LLzprimemumu_m250t500.recon.ESD.e4821_s2698_r6939_AOD/user.sche.8294387.AOD._000002.pool.root",
-         "/n/atlas05/userdata/sche/MC15/xAOD/zprimemumu/emu_RecExCommon/r6/user.sche.LRT.r6.mc15_13TeV.301913.Pythia8EvtGen_A14NNPDF23LO_LLzprimemumu_m250t500.recon.ESD.e4821_s2698_r6939_AOD/user.sche.8294387.AOD._000003.pool.root",
-         "/n/atlas05/userdata/sche/MC15/xAOD/zprimemumu/emu_RecExCommon/r6/user.sche.LRT.r6.mc15_13TeV.301913.Pythia8EvtGen_A14NNPDF23LO_LLzprimemumu_m250t500.recon.ESD.e4821_s2698_r6939_AOD/user.sche.8294387.AOD._000004.pool.root",
-         "/n/atlas05/userdata/sche/MC15/xAOD/zprimemumu/emu_RecExCommon/r6/user.sche.LRT.r6.mc15_13TeV.301913.Pythia8EvtGen_A14NNPDF23LO_LLzprimemumu_m250t500.recon.ESD.e4821_s2698_r6939_AOD/user.sche.8294387.AOD._000005.pool.root"
-         ]'''
-
-# -- Glob, if necessary ('*' is FNAME)
-if '*' in FNAME:
-  import glob
-  FNAME = glob.glob(FNAME)
-  print FNAME
-  pass
-
-include( "AthenaPython/iread_file.py" )
-
-
-# Access the algorithm sequence:
-from AthenaCommon.AlgSequence import AlgSequence
-topSequence = AlgSequence()
-
-from InDetPhysValMonitoring.InDetPhysValMonitoringConf import HistogramDefinitionSvc
-ToolSvc = ServiceMgr.ToolSvc
-ServiceMgr+=HistogramDefinitionSvc()
-ServiceMgr.HistogramDefinitionSvc.DefinitionSource="../share/LargeD0PlotDefinitions.xml"
-ServiceMgr.HistogramDefinitionSvc.DefinitionFormat="text/xml"
-
-import InDetPhysValMonitoring.InDetPhysValDecoration
-for decorator in InDetPhysValMonitoring.InDetPhysValDecoration.getDecorators() :
-  topSequence += decorator
-
-
-from AthenaMonitoring.AthenaMonitoringConf import AthenaMonManager
-monMan = AthenaMonManager( "PhysValMonManager" )
-monMan.ManualDataTypeSetup = True
-monMan.DataType            = "monteCarlo"
-monMan.Environment         = "altprod"
-monMan.ManualRunLBSetup    = True
-monMan.Run                 = 1
-monMan.LumiBlock           = 1
-monMan.FileKey = "output"
-topSequence += monMan
-
-from InDetPhysValMonitoring.InDetPhysValDecoration import getInDetRttTruthSelectionTool
-truthSelection = getInDetTruthSelectionTool(name = 'InDetLargeD0TruthSelectionTool',
-                                            minPt = 1000.,
-                                            maxBarcode = -1)
-
-# @asogaard
-from InDetPhysValMonitoring.InDetPhysValMonitoringConf import TrackSelectionTool
-trackSelection = TrackSelectionTool()
-print trackSelection
-#trackSelection.maxZImpact = -1
-#trackSelection.minZImpact = -1
-#trackSelection.maxPrimaryImpact = -1
-#trackSelection.minPrimaryImpact = -1
-#trackSelection.maxEta       = -1
-#trackSelection.minEta       = -1
-#trackSelection.minSiNotShared = -1 # < Rejects Large-D0 tracks
-#trackSelection.maxShared      = -1 # < Rejects Large-D0 tracks
-#trackSelection.maxBLayerSplitHits   = -1
-#trackSelection.minPixelHits   = -1
-#trackSelection.maxPixelHoles  = -1
-#trackSelection.maxPixelOutliers  = -1
-#trackSelection.maxHoles       = -1
-#trackSelection.maxSCTHits       = -1
-#trackSelection.minSCTHits     = 9
-#trackSelection.maxSctHoles    = -1
-#trackSelection.maxDoubleHoles = -1
-#trackSelection.maxTRTOutliers       = -1
-#trackSelection.maxTRTHighThresholdHits = -1
-#trackSelection.minTRTHighThresholdHits = -1
-#trackSelection.maxTRTHighThresholdOutliers = -1
-ToolSvc += trackSelection
-        
-from InDetPhysValMonitoring.InDetPhysValMonitoringConf import InDetPhysValLargeD0Tool
-tool2 = InDetPhysValLargeD0Tool()
-tool2.TruthSelectionTool = truthSelection
-# Specify Long-lived particle for efficiency plot
-# Available options: Zprime, Wino, Gluino, or empty ("") for no selection 
-#tool2.LongLivedParticle = "" # @asogaard
-#tool2.SignalIds = [32]
-
-ToolSvc += tool2
-
-
-monMan.AthenaMonTools += [tool2]
-#monMan.AthenaMonTools += [truthSelection]
-
-from InDetBoundaryCheckTool.InDetBoundaryCheckToolConf import InDet__InDetBoundaryCheckTool
-InDetBoundaryCheckTool = InDet__InDetBoundaryCheckTool(
-    name="InDetBoundaryCheckTool"
-)
-ToolSvc += InDetBoundaryCheckTool
-
-from InDetTrackHoleSearch.InDetTrackHoleSearchConf import InDet__InDetTrackHoleSearchTool
-InDetHoleSearchTool = InDet__InDetTrackHoleSearchTool(name = "InDetHoleSearchTool", Extrapolator = InDetExtrapolator, BoundaryCheckTool=InDetBoundaryCheckTool, CountDeadModulesAfterLastHit = True)
-ToolSvc += InDetHoleSearchTool
-print InDetHoleSearchTool
-
-
-from GaudiSvc.GaudiSvcConf import THistSvc
-ServiceMgr += THistSvc()
-svcMgr.THistSvc.Output += ["output DATAFILE='output.root' OPT='RECREATE'"]
-
-# Do some additional tweaking:
-from AthenaCommon.AppMgr import theApp
-ServiceMgr.MessageSvc.OutputLevel = INFO
-ServiceMgr.MessageSvc.defaultLimit = 10000
-theApp.EvtMax = 10
-#theApp.EvtMax = -1
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefLargeD0.xml b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefLargeD0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d9e4b2cedeb36209e9ae95830effe693156c98d4
--- /dev/null
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefLargeD0.xml
@@ -0,0 +1,488 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" media="screen" href="hdefhtml.xsl"?>
+<?xml-stylesheet type="text/xsl" media="tty" href="hdeftty.xsl" alternate="yes"?>
+<!DOCTYPE  hdef [
+<!ENTITY PI "3.1415926">
+<!-- eta coverage of the tracker -->
+<!ENTITY ETA "2.5">
+<!ENTITY NETA "64">
+<!-- min eta covered by pix. endcaps -->
+<!ENTITY ETAPixECMin "1.5">
+<!-- eta coverage of sct -->
+<!ENTITY ETASct "2.0">
+<!-- min eta covered by sct endcaps -->
+<!ENTITY ETASctECMin "1.0">
+<!-- term used for innermost pixel barrel layer in histogram text -->
+<!ENTITY L0PixBarr "IBL">
+<!-- bins for hits -->
+<!ENTITY PIXHIT "10">
+<!ENTITY SCTHIT "20">
+<!ENTITY TRTHIT "40">
+<!-- bins for resolutions -->
+<!ENTITY D0RES "2.00">
+<!ENTITY Z0RES "10.0">
+<!ENTITY PTQOPTRES "2.00">
+<!ENTITY THETARES "0.10">
+<!ENTITY PHIRES "0.010">
+<!ENTITY Z0SINRES "1.00">
+<!-- bins for parameters -->
+<!ENTITY D0PARA "20.0">
+<!ENTITY Z0PARA "250.0">
+<!ENTITY QOPPARA "5.0e-3">
+<!ENTITY Z0SINPARA "40.0">
+<!-- dR plots for tracks in jets -->
+<!ENTITY DRMAX "0.4">
+<!ENTITY SMALLDRMAX "0.1">
+<!-- Number of tracks vs MU -->
+<!ENTITY EXPMU "100">
+<!ENTITY EXPTRK "2000">
+<!-- histogram definitions common to Run2 and ITk -->
+<!ENTITY Common SYSTEM "InDetPVMPlotDefCommon.xml">
+]>
+
+<hdef xmlns:xi="http://www.w3.org/2001/XInclude">
+  <!-- Plots common to Run2 and ITK -->
+  &Common;
+  <!-- Run2-specific plots -->
+  <!--
+     =======================================================
+     hit residuals:
+     =======================================================
+    -->
+  <!-- x residuals -->
+  <!-- barrel-->
+  <h id="residualx_trt_barrel" type="TH1F" title="Residual: TRT Barrel X">
+    <x title="x residual(#mum)" n="200" lo="-500" hi="500"/> 
+    <y title="Entries"/>
+  </h>
+  <!-- endcap-->
+  <h id="residualx_trt_endcap" type="TH1F" title="Residual: TRT Endcap X">
+    <x title="x residual(#mum)" n="200" lo="-500" hi="500"/> 
+    <y title="Entries"/>
+  </h>
+
+  <!-- y residuals -->
+  <!-- barrel -->
+  <h id="residualy_trt_barrel" type="TH1F" title="Residual: TRT Barrel Y">
+    <x title="y residual(#mum)" n="120" lo="0" hi="2500"/>
+    <y title="Entries"/>
+  </h>
+  <!-- endcaps -->
+  <h id="residualy_sct_endcap" type="TH1F" title="Residual: SCT Endcap Y">
+    <x title="y residual(#mum)" n="120" lo="-50" hi="50"/>
+    <y title="Entries"/>
+  </h>
+  <h id="residualy_sct_endcap_1hit" type="TH1F" title="Residual: SCT Endcap Y 1 hit">
+    <x title="y residual(#mum)" n="120" lo="-50" hi="50"/>
+    <y title="Entries"/>
+  </h>
+  <h id="residualy_sct_endcap_2ormorehits" type="TH1F" title="Residual: SCT Endcap Y &gt;=2 hits">
+    <x title="y residual(#mum)" n="120" lo="-50" hi="50"/>
+    <y title="Entries"/>
+  </h>
+  <h id="residualy_trt_endcap" type="TH1F" title="Residual: TRT Endcap Y">
+    <x title="y residual(#mum)" n="120" lo="-50" hi="50"/>
+    <y title="Entries"/>
+  </h>
+
+  <!-- pulls -->
+  <!-- barrel, x -->
+  <h id="residualpullx_trt_barrel" type="TH1F" title="Residualpull: TRT Barrel X">
+    <x title="x residual(#mum)" n="100" lo="-5" hi="5"/>
+    <y title="Entries"/>
+  </h>
+  <!-- endcap, x -->
+  <h id="residualpullx_trt_endcap" type="TH1F" title="Residualpull: TRT Endcap X">
+    <x title="x residual(#mum)" n="100" lo="-5" hi="5"/>
+    <y title="Entries"/>
+  </h>
+  <!-- barrel, y -->
+  <h id="residualpully_trt_barrel" type="TH1F" title="Residualpull: TRT Barrel Y">
+    <x title="y residual(#mum)" n="10" lo="-5" hi="5"/>
+    <y title="Entries"/>
+  </h>
+  <!-- endcap,y -->
+  <h id="residualpully_trt_endcap" type="TH1F" title="Residualpull: TRT Endcap Y">
+    <x title="y residual(#mum)" n="10" lo="-5" hi="5"/>
+    <y title="Entries"/>
+  </h>
+  <!--
+     =======================================================
+     end of hit residuals plots
+     ========================================================
+    -->
+  <!--
+     =======================================================
+     hit efficiency plots: 
+     ========================================================
+    -->
+  <h id="eff_hit_vs_eta_trt_barrel" type="TProfile" title="Cluster Efficiency: TRT Barrel">
+    <x title="#eta" n="5" lo="0" hi="1.25"/>
+    <y title="Cluster Efficiency" lo="0" hi="2.0"/>
+  </h>
+  <h id="eff_hit_vs_eta_trt_endcap" type="TProfile" title="Cluster Efficiency: TRT Endcaps">
+    <x title="#eta" n="6" lo="0.75" hi="2.25"/>
+    <y title="Cluster Efficiency" lo="0" hi="2.0"/>
+  </h>
+  <!--
+     =======================================================
+     end of hit efficiency plots
+     ======================================================
+    -->
+<!--
+   =======================================================
+   hit content plots:
+   =======================================================
+  -->
+<!-- general interest plots -->
+<!-- 1D plots -->
+<h id="HitContent_NTRTHits" type="TH1F" title="Number of TRT Clusters">
+  <x title="Number of Hits" n="51" lo="-0.5" hi="50.5"/>
+  <y title="Entries"/>
+</h>
+<h id="HitContent_NTRTHighThresholdHits" type="TH1F" title="Number of TRT high threshold Hits">
+  <x title="Number of Hits" n="51" lo="-0.5" hi="50.5"/>
+  <y title="Entries"/>
+</h>
+<!-- eta profiles -->
+<h id="HitContent_vs_eta_NTRTHits" type="TProfile" title="Number of TRT Clusters">
+  <x title="#eta" n="80" lo="-&ETA;" hi="&ETA;"/>
+  <y title="&lt;Number of TRT Hits&gt;" lo="0" hi="100"/>
+</h>
+<h id="HitContent_vs_eta_NTRTHighThresholdHits" type="TProfile" title="Number of TRT high threshold clusters">
+  <x title="#eta" n="80" lo="-&ETA;" hi="&ETA;"/>
+  <y title="&lt;Number of High Thresh TRT Hits&gt;" lo="0" hi="100"/>
+</h>
+<!-- detailed expert plots  -->
+<!-- 1D plots -->
+<h id="HitContent_NTRTOutliers" type="TH1F" title="Number of TRT Outliers">
+  <x title="Number of Outliers" n="51" lo="-0.5" hi="49.5"/>
+  <y title="Entries"/>
+</h>
+<h id="HitContent_NTRTHighThresholdOutliers" type="TH1F" title="Number of TRT High Threshold outliers">
+  <x title="Number of Outliers" n="51" lo="-0.5" hi="49.5"/>
+  <y title="Entries"/>
+</h>
+<!-- eta profiles -->
+<h id="HitContent_vs_eta_NTRTOutliers" type="TProfile" title="Number of TRT outliers">
+  <x title="#eta" n="80" lo="-&ETA;" hi="&ETA;"/>
+  <y title="&lt;Number of TRT Outliers&gt;" lo="0" hi="100"/>
+</h>
+<h id="HitContent_vs_eta_NTRTHighThresholdOutliers" type="TProfile" title="Number of TRT High Threshold outliers">
+  <x title="#eta" n="80" lo="-&ETA;" hi="&ETA;"/>
+  <y title="&lt;Number of TRT High Thresh Outliers&gt;" lo="0" hi="100"/>
+</h>
+<!--
+   =======================================================
+   end of hit content plots
+   ========================================================
+  -->
+
+<!--
+   =======================================================
+   TRT Extension plots
+   ========================================================
+  -->
+<h id="fracTRTExtensions_vs_eta" type="TEfficiency" title="Fraction of TRT Extended Tracks">
+  <x title="#eta" n="32" lo="-&ETA;" hi="&ETA;"/>
+  <y title="Fraction of TRT Extended Tracks" lo="0" hi="2.0"/>
+</h>
+
+<h id="fracTRTExtensions_vs_pt" type="TEfficiency" title="Fraction of TRT Extended Tracks">
+  <x title="p_{T} [GeV]" n="25" lo="0" hi="50"/>
+  <y title="Fraction of TRT Extended Tracks" lo="0" hi="2.0"/>
+</h>
+
+<h id="fracTRTExtensions_vs_nvertices" type="TEfficiency" title="Fraction of TRT Extended Tracks">
+  <x title="Number of Reconstucted Vertices" n="50" lo="0" hi="100"/>
+  <y title="Fraction of TRT Extended Tracks" lo="0" hi="2.0"/>
+</h>
+
+<h id="fracTRTExtensions_vs_mu" type="TEfficiency" title="Fraction of TRT Extended Tracks">
+  <x title="#LT#mu#GT" n="50" lo="0" hi="100"/>
+  <y title="Fraction of TRT Extended Tracks" lo="0" hi="2.0"/>
+</h>
+
+
+
+<h id="fracTRTExtensions_matched_vs_eta" type="TEfficiency" title="Fraction of TRT Extended Matched Tracks">
+  <x title="#eta" n="32" lo="-&ETA;" hi="&ETA;"/>
+  <y title="Fraction of TRT Extended Matched Tracks" lo="0" hi="2.0"/>
+</h>
+
+<h id="fracTRTExtensions_matched_vs_pt" type="TEfficiency" title="Fraction of TRT Extended Matched Tracks">
+  <x title="p_{T} [GeV]" n="25" lo="0" hi="50"/>
+  <y title="Fraction of TRT Extended Matched Tracks" lo="0" hi="2.0"/>
+</h>
+
+<h id="chi2ndofTRTExtensions" type="TH1F" title="reco_{#chi^2/ndof}">
+  <x title="reco_{#chi^2/ndof}" n="100" lo="0.0" hi="5.0"/>
+  <y title="Number of Entries"/>
+</h>
+
+<h id="chi2ndofNoTRTExtensions" type="TH1F" title="reco_{#chi^2/ndof}">
+  <x title="reco_{#chi^2/ndof}" n="100" lo="0.0" hi="5.0"/>
+  <y title="Number of Entries"/>
+</h>
+
+
+<h id="ptresNoTRTExtensions_vs_eta" type="TH2F" title="residual vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="reco_{p_{T} #times q/p_{T}} - truth_{p_{T} #times q/p_{T}}" n="2000" lo="-&PTQOPTRES;" hi="&PTQOPTRES;"/>
+</h>
+
+<h id="ptresNoTRTExtensions_vs_pt" type="TH2F" title="residual vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="reco_{pT #times q/pT} - truth_{pT #times q/pT}" n="2000" lo="-&PTQOPTRES;" hi="&PTQOPTRES;"/>
+</h>
+
+<h id="ptresTRTExtensions_vs_eta" type="TH2F" title="residual vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="reco_{p_{T} #times q/p_{T}} - truth_{p_{T} #times q/p_{T}}" n="2000" lo="-&PTQOPTRES;" hi="&PTQOPTRES;"/>
+</h>
+
+<h id="ptresTRTExtensions_vs_pt" type="TH2F" title="residual vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="reco_{pT #times q/pT} - truth_{pT #times q/pT}" n="2000" lo="-&PTQOPTRES;" hi="&PTQOPTRES;"/>
+</h>
+
+<h id="ptresolutionTRTExtensions_vs_eta" type="TH1F" title="resolution vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="width of resolution for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptresmeanTRTExtensions_vs_eta" type="TH1F" title="mean of resolution vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="mean of resolution for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptresolutionNoTRTExtensions_vs_eta" type="TH1F" title="resolution vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="width of resolution for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptresmeanNoTRTExtensions_vs_eta" type="TH1F" title="mean of resolution vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="mean of resolution for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptresolutionTRTExtensions_vs_pt" type="TH1F" title="resolution vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="width of resolution for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptresmeanTRTExtensions_vs_pt" type="TH1F" title="mean of resolution vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="mean of resolution for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptresolutionNoTRTExtensions_vs_pt" type="TH1F" title="resolution vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="width of resolution for p_{T} #times q/p_{T}"/>
+</h>
+
+
+<h id="ptresmeanNoTRTExtensions_vs_pt" type="TH1F" title="mean of resolution vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="mean of resolution for p_{T} #times q/p_{T}"/>
+</h>
+
+
+<h id="ptpullwidthTRTExtensions_vs_eta" type="TH1F" title="pull vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="width of pull for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptpullmeanTRTExtensions_vs_eta" type="TH1F" title="mean of pull vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="means pull for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptpullwidthTRTExtensions_vs_pt" type="TH1F" title="pull vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="width of pull for p_{T} #times q/p_{T}"/>
+</h>
+<h id="ptpullmeanTRTExtensions_vs_pt" type="TH1F" title="mean of pull vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="mean of pull for p_{T} #times q/p_{T}"/>
+</h>
+
+
+<h id="ptpullwidthNoTRTExtensions_vs_eta" type="TH1F" title="pull vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="width of pull for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptpullmeanNoTRTExtensions_vs_eta" type="TH1F" title="mean of pull vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="means pull for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptpullwidthNoTRTExtensions_vs_pt" type="TH1F" title="pull vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="width of pull for p_{T} #times q/p_{T}"/>
+</h>
+<h id="ptpullmeanNoTRTExtensions_vs_pt" type="TH1F" title="mean of pull vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="mean of pull for p_{T} #times q/p_{T}"/>
+</h>
+
+<h id="ptpullTRTExtensions_vs_eta" type="TH2F" title="pull vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="(reco_{q/p_{T}} - truth_{q/p_{T}}) / #sigma(q/p_{T})" n="100" lo="-10.0" hi="10.0"/>
+</h>
+
+<h id="ptpullTRTExtensions_vs_pt" type="TH2F" title="pull  vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="(reco_{q/p_{T}} - truth_{q/p_{T}}) / #sigma(q/p_{T})" n="100" lo="-10.0" hi="10.0"/>
+</h>
+
+<h id="ptpullNoTRTExtensions_vs_eta" type="TH2F" title="pull vs #eta for p_{T} #times q/p_{T}">
+  <x title="#eta" n="&NETA;" lo="-&ETA;" hi="&ETA;"/>
+  <y title="(reco_{q/p_{T}} - truth_{q/p_{T}}) / #sigma(q/p_{T})" n="100" lo="-10.0" hi="10.0"/>
+</h>
+
+<h id="ptpullNoTRTExtensions_vs_pt" type="TH2F" title="pull  vs p_{T} for p_{T} #times q/p_{T}">
+  <x title="p_{T} [GeV]" n="100" lo="0." hi="100"/>
+  <y title="(reco_{q/p_{T}} - truth_{q/p_{T}}) / #sigma(q/p_{T})" n="100" lo="-10.0" hi="10.0"/>
+</h>
+
+
+<!--
+   =======================================================
+   end TRT Extension plots
+   ========================================================
+  -->
+
+<!--
+   =======================================================
+   ANT plots
+   ========================================================
+  -->
+
+<h id="efficiencySplit_vs_eta" type="TEfficiency" title="Efficiency">
+  <x title="#eta" n="32" lo="-&ETA;" hi="&ETA;"/>
+  <y title="Efficiency" lo="0" hi="2.0"/>
+</h>
+
+<h id="efficiencySplit_vs_pt" type="TEfficiency" title="Efficiency">
+  <x title="p_{T} [GeV]" n="100" lo="0" hi="50"/>
+  <y title="Efficiency" lo="0" hi="2.0"/>
+</h>
+
+<h id="efficiencySplit_vs_phi" type="TEfficiency" title="Efficiency">
+  <x title="#phi" n="32" lo="-3.14" hi="3.14"/>
+  <y title="Efficiency" lo="0" hi="2.0"/>
+</h>
+
+<h id="efficiencySplit_vs_d0" type="TEfficiency" title="Efficiency">
+  <x title="d_{0} [mm]" n="150" lo="-300.0" hi="300.0"/>
+  <y title="Efficiency" lo="0" hi="2.0"/>
+</h>
+
+<h id="efficiencySplit_vs_z0" type="TEfficiency" title="Efficiency">
+  <x title="z_{0} [mm]" n="150" lo="-500.0" hi="500.0"/>
+  <y title="Efficiency" lo="0" hi="2.0"/>
+</h>
+
+<h id="efficiencySplit_vs_radius" type="TEfficiency" title="Efficiency">
+  <x title="r_{production} [mm]" n="150" lo="0." hi="600.0"/>
+  <y title="Efficiency" lo="0" hi="2.0"/>
+</h>
+
+<h id="efficiencySplit_vs_mu" type="TEfficiency" title="Efficiency">
+  <x title="#LT#mu#GT" n="100" lo="0.0" hi="100.0"/>
+  <y title="Efficiency" lo="0" hi="2.0"/>
+</h>
+
+<h id="efficiencySplit_vs_nvertices" type="TEfficiency" title="Efficiency">
+  <x title="number of vertices" n="100" lo="0.0" hi="100.0"/>
+  <y title="Efficiency" lo="0" hi="2.0"/>
+</h>
+
+<h id="fakeSplit_vs_eta" type="TEfficiency" title="Fake Rate">
+  <x title="#eta" n="32" lo="-&ETA;" hi="&ETA;"/>
+  <y title="Fake Rate" lo="0" hi="2.0"/> 
+</h>
+
+<h id="fakeSplit_vs_pt" type="TEfficiency" title="Fake Rate">
+  <x title="p_{T} [GeV]" n="25" lo="0" hi="50"/>
+  <y title="Fake Rate" lo="0" hi="2.0"/>
+</h>
+
+<h id="fakeSplit_vs_phi" type="TEfficiency" title="Fake Rate">
+  <x title="#phi" n="32" lo="-3.14" hi="3.14"/>
+  <y title="Fake Rate" lo="0" hi="2.0"/>
+</h>
+
+<h id="fakeSplit_vs_d0" type="TEfficiency" title="Fake Rate">
+  <x title="d_{0} [mm]" n="150" lo="-300.0" hi="300.0"/>
+  <y title="Fake Rate" lo="0" hi="2.0"/>
+</h>
+
+<h id="fakeSplit_vs_z0" type="TEfficiency" title="Fake Rate">
+  <x title="z_{0} [mm]" n="150" lo="-500.0" hi="500.0"/>
+  <y title="Fake Rate" lo="0" hi="2.0"/>
+</h>
+
+<h id="fakeSplit_vs_radius" type="TEfficiency" title="Fake Rate">
+  <x title="r_{production} [mm]" n="150" lo="0." hi="600.0"/>
+  <y title="Fake Rate" lo="0" hi="2.0"/>
+</h>
+
+<h id="fakeSplit_vs_mu" type="TEfficiency" title="Fake Rate">
+  <x title="#LT#mu#GT" n="100" lo="0.0" hi="100.0"/>
+  <y title="Fake Rate" lo="0" hi="2.0"/>
+</h>
+
+<h id="fakeSplit_vs_nvertices" type="TEfficiency" title="Fake Rate">
+  <x title="number of vertices" n="100" lo="0.0" hi="100.0"/>
+  <y title="Fake Rate" lo="0" hi="2.0"/>
+</h>
+
+<h id="trkpropSplit_vs_d0" type="TH1F" title="reco_{d_{0}}">
+  <x title="reco_{d0} [mm]" n="100" lo="-300.0" hi="300.0"/>
+  <y title="Number of Entries"/>
+</h>
+<h id="trkpropSplit_vs_z0" type="TH1F" title="reco_{z_{0}}">
+  <x title="reco_{z_{0}}" n="100" lo="-500.0" hi="500.0"/>
+  <y title="Number of Entries"/>
+</h>
+
+<h id="trkpropSplit_vs_phi" type="TH1F" title="reco_{#phi}">
+  <x title="reco_{#phi} [rads]" n="100" lo="-&PI;" hi="&PI;"/>
+  <y title="Number of Entries"/>
+</h>
+<h id="trkpropSplit_vs_eta" type="TH1F" title="reco_{#eta}">
+  <x title="reco_{#eta} [rads]" n="100" lo="-&ETA;" hi="&ETA;"/>
+  <y title="Number of Entries"/>
+</h>
+
+<h id="trkpropSplit_vs_pt" type="TH1F" title="reco_{p_{T}} [GeV]">
+  <x title="reco_{p_{T}} [GeV]" n="100" lo="0.0" hi="100.0"/>
+  <y title="Number of Entries"/>
+</h>
+
+<h id="ntrkSplit_vs_mu" type="TH2" title="Number of tracks versus mu">
+  <x title="#LT#mu#GT" n="100" lo="0.0" hi="100.0"/>
+  <y title="Number of Tracks / Event" n="500" lo="0" hi="900"/>
+</h>
+
+<h id="ntrkSplit_vs_nvertices" type="TH2" title="Number of tracks versus nvertices">
+  <x title="Number of vertices" n="100" lo="0.0" hi="100.0"/>
+  <y title="Number of Tracks / Event" n="500" lo="0" hi="900"/>
+</h>
+
+<!--
+   =======================================================
+   end ANT plots
+   ========================================================
+  -->
+
+
+
+
+</hdef>
+
+
+
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPhysValMonitoring_topOptions.py b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPhysValMonitoring_topOptions.py
index a53e5df625a193e4f3bb8e01d33fcbf8d61073c4..89dac6922acce833fc5bea9875db366434956383 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPhysValMonitoring_topOptions.py
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPhysValMonitoring_topOptions.py
@@ -18,6 +18,7 @@ def GetCustomAthArgs():
     IDPVMparser.add_argument("--hardScatterStrategy", help='Strategy to select the hard scatter. 0 = SumPt² 1 = SumPt', choices=["0","1"], default="0")
     IDPVMparser.add_argument("--outputFile", help='Name of output file',default="M_output.root")
     IDPVMparser.add_argument("--HSFlag", help='Hard-scatter flag - decides what is used for truth matching', choices=['HardScatter', 'All', 'PileUp'],default="HardScatter")
+    IDPVMparser.add_argument("--ancestorIDList", help='List of ancestor truth IDs to match.', default = [], nargs='+', type=int)
     return IDPVMparser.parse_args()
 
 # Parse the arguments 
@@ -37,6 +38,7 @@ InDetPhysValFlags.doValidateMuonMatchedTracks.set_Value_and_Lock(MyArgs.doMuonMa
 InDetPhysValFlags.doValidateElectronMatchedTracks.set_Value_and_Lock(MyArgs.doElectronMatchedTracks)
 InDetPhysValFlags.doPerAuthorPlots.set_Value_and_Lock(MyArgs.doPerAuthor)
 InDetPhysValFlags.doHitLevelPlots.set_Value_and_Lock(MyArgs.doHitLevelPlots)
+InDetPhysValFlags.ancestorIDs.set_Value_and_Lock(MyArgs.ancestorIDList)
 InDetPhysValFlags.hardScatterStrategy.set_Value_and_Lock(int(MyArgs.hardScatterStrategy))
 
 # Print the configuration
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/AthTruthSelectionTool.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/AthTruthSelectionTool.cxx
index 60960f2188529ce6940ba1e9f96fb4c5f6b63c2d..983215b45b11c89c4c4086d79cbb99142ad98efd 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/AthTruthSelectionTool.cxx
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/AthTruthSelectionTool.cxx
@@ -20,6 +20,22 @@
 namespace {
   constexpr int electronId(11);
   constexpr int gammaId(22);
+  bool hasAncestor(const xAOD::TruthParticle* particle, const std::vector<int>& allowedAncestors) {
+    bool pass = false;
+    uint nPar = particle->nParents(); 
+    for (uint i = 0; i < nPar; i++) {
+      for (const int & ancestorID : allowedAncestors) {
+        if (std::abs(particle->parent(i)->pdgId()) ==  ancestorID) {
+          return true;
+        }
+      }
+    }
+    for (uint i = 0; i < nPar; i++) {
+      const xAOD::TruthParticle* parent = particle->parent(i);
+      if (hasAncestor(parent, allowedAncestors)) return true;
+    }
+    return pass;
+  }
 }
 
 
@@ -40,6 +56,7 @@ AthTruthSelectionTool::AthTruthSelectionTool(const std::string& type, const std:
   declareProperty("maxProdVertRadius", m_maxProdVertRadius = 110.);
   declareProperty("pdgId", m_pdgId = -1);
   declareProperty("hasNoGrandparent", m_grandparent = false);
+  declareProperty("ancestorList", m_ancestors = {});
   declareProperty("poselectronfromgamma", m_poselectronfromgamma = false);
   declareProperty("radiusCylinder", m_radiusCylinder=-1, "Select truth particle based on extrapolated position on cylinder placed at this radius. Enabled if greater than 0.");
   declareProperty("minZCylinder", m_minZCylinder=0.0, "Minimum |Z| on cylinder for accepting extrapolated truth particle to surface.");
@@ -69,18 +86,18 @@ AthTruthSelectionTool::initialize() {
   //
   m_cutList = CutList<P_t>(filters);
   if (m_maxProdVertRadius>0) {
-    m_cutList.add(Accept_t([this](const P_t& p) -> bool {
+    m_cutList.add(Accept_t([&m_maxProdVertRadius = std::as_const(m_maxProdVertRadius)](const P_t& p) -> bool {
                        return((not (p.hasProdVtx()))or(p.prodVtx()->perp() < m_maxProdVertRadius));
                   },
                   "decay_before_" + std::to_string(m_maxProdVertRadius)));
   }
   if (m_maxPt > 0) {
-    m_cutList.add(Accept_t([this](const P_t& p) {
+    m_cutList.add(Accept_t([&m_maxPt = std::as_const(m_maxPt)](const P_t& p) {
       return(p.pt() < m_maxPt);
     }, "max_pt"));
   }
   if (m_maxBarcode > -1) {
-    m_cutList.add(Accept_t([this](const P_t& p) {
+    m_cutList.add(Accept_t([&m_maxBarcode = std::as_const(m_maxBarcode)](const P_t& p) {
       return(p.barcode() < m_maxBarcode);
     }, "barcode < " + std::to_string(m_maxBarcode)));
   }
@@ -95,7 +112,7 @@ AthTruthSelectionTool::initialize() {
     }, "status1"));
   }
   if (m_pdgId > 0) {
-    m_cutList.add(Accept_t([this](const P_t& p) {
+    m_cutList.add(Accept_t([&m_pdgId = std::as_const(m_pdgId)](const P_t& p) {
       return(std::abs(p.pdgId()) == m_pdgId);
     }, "pdgId"));
   }
@@ -104,6 +121,14 @@ AthTruthSelectionTool::initialize() {
       return((p.nParents() == 0) || ((p.nParents() == 1)and((p.parent(0))->nParents() == 0)));
     }, "hasNoGrandparent"));
   }
+  //require the truth particles to come from certain ancesters
+  if (!m_ancestors.empty()) {
+    m_cutList.add(Accept_t([&m_ancestors = std::as_const(m_ancestors)](const P_t& p) -> bool {
+      const xAOD::TruthParticle* pTruth = dynamic_cast<const xAOD::TruthParticle*>(&p);  
+      if (not pTruth) return false;
+      else return hasAncestor(pTruth, m_ancestors);   
+    }, "ancestors"));
+  }
   if (m_poselectronfromgamma) {
     m_cutList.add(Accept_t([](const P_t& p) {
       return((p.absPdgId() == electronId)and(p.nParents() >= 1) and(p.parent(0)) and(p.parent(0)->pdgId() == gammaId));
@@ -248,6 +273,7 @@ AthTruthSelectionTool::testAllCuts(const xAOD::IParticle * particle, std::vector
   return m_cutList.testAllCuts(*pTruth,counter);
 }
 
+
 /*
 bool AthTruthSelectionTool::acceptExtrapolatedTPToSurface(const xAOD::TruthParticle& p) const
 {
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/AthTruthSelectionTool.h b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/AthTruthSelectionTool.h
index fae47b2947a7c56b6af2adb3f07de698153f5624..355b47a96700e6754ae6718d24dc43fe87ba7e73 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/AthTruthSelectionTool.h
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/AthTruthSelectionTool.h
@@ -62,6 +62,7 @@ private:
   bool m_grandparent;
   bool m_poselectronfromgamma;
   std::vector<unsigned int> m_counters;
+  std::vector<int> m_ancestors;
   
   /* \defgroup Selection on extrapolated particle to cylinder or disk surface
    * @{