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 >=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="<Number of TRT Hits>" 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="<Number of High Thresh TRT Hits>" 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="<Number of TRT Outliers>" 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="<Number of TRT High Thresh Outliers>" 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 * @{