Skip to content
Snippets Groups Projects
Commit 284b8a1a authored by Walter Lampl's avatar Walter Lampl
Browse files

Merge branch 'LRTIDPVM' into 'master'

Lrtidpvm

See merge request atlas/athena!45461
parents 6528e7ca 9b5ba96c
No related merge requests found
......@@ -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
]
......
......@@ -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)
......
# 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
<?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>
......@@ -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
......
......@@ -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
{
......
......@@ -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
* @{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment