ATLAS Offline Software
Loading...
Searching...
No Matches
HGTD_AnalysisConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5
6
7def OutputCfg(flags, output_name='HGTD_PerformanceStudies_output'):
8 acc = ComponentAccumulator()
9
10 svc = CompFactory.THistSvc(name="THistSvc")
11 svc.Output = [f"HGTD_ANA DATAFILE='{output_name}.root' OPT='RECREATE'"]
12 acc.addService(svc)
13
14 return acc
15
16
17#
18# Expert-only track-time accessor tools. These were previously provided by the
19# standalone HGTDTrackTimeInterface package and are now part of HGTD_Analysis.
20#
21# All of them are for HGTD expert studies and internal validation only, and
22# must not be scheduled in standard reconstruction jobs -- reconstruction and
23# analysis code takes the track time from the xAOD::TrackParticle EDM.
24#
25
26def HGTD_ExpertTrackTimeFromClustersToolCfg(flags, name='ExpertTrackTimeFromClusters',
27 **kwargs):
28 """Re-derives the track time from the per-layer HGTD cluster decorations."""
29 acc = ComponentAccumulator()
30 kwargs.setdefault("UseLastHitCut", True)
31 kwargs.setdefault("UseTimeConsistency", True)
32 kwargs.setdefault("DeltaTCut", 2.0)
33 kwargs.setdefault("TimeChi2Cut", 1.5)
34 acc.setPrivateTools(CompFactory.HGTD.ExpertTrackTimeFromClustersTool(name, **kwargs))
35
36 return acc
37
38
40 flags, name='ExpertTrackTimeFromClustersNoSelection', **kwargs):
41 """As above, but with the last-hit, time-consistency and minimum-hit cuts off."""
42 acc = ComponentAccumulator()
43 kwargs.setdefault("UseLastHitCut", False)
44 kwargs.setdefault("UseTimeConsistency", False)
45 kwargs.setdefault("DeltaTCut", 2.0)
46 kwargs.setdefault("TimeChi2Cut", 1.5)
47 kwargs.setdefault("UseMinNHits", False)
48 acc.setPrivateTools(CompFactory.HGTD.ExpertTrackTimeFromClustersTool(name, **kwargs))
49
50 return acc
51
52
53def HGTD_ExpertTrackTimeFromEDMToolCfg(flags, name='ExpertTrackTimeFromEDM', **kwargs):
54 """Hands back xAOD::TrackParticle::time() unchanged, as a reference point."""
55 acc = ComponentAccumulator()
56 acc.setPrivateTools(CompFactory.HGTD.ExpertTrackTimeFromEDMTool(name, **kwargs))
57
58 return acc
59
60
61def HGTD_ExpertTrackTimeFromSummaryToolCfg(flags, name='ExpertTrackTimeFromSummary',
62 **kwargs):
63 """Re-applies the HGTD selection by decoding the persisted HGTD_summaryinfo."""
64 acc = ComponentAccumulator()
65 kwargs.setdefault("UseLastHitCut", True)
66 kwargs.setdefault("UseMinNHits", True)
67 acc.setPrivateTools(CompFactory.HGTD.ExpertTrackTimeFromSummaryTool(name, **kwargs))
68
69 return acc
70
71
72#
73# Track selection tools.
74#
75
76def HGTD_NoEarlyDecayTracksSelectionToolCfg(flags, name='NoEarlyDecayTracksSelection', **kwargs):
77 acc = ComponentAccumulator()
78 kwargs.setdefault("MinRadiusProduction", 0.)
79 kwargs.setdefault("MazRadiusProduction", 10.)
80 kwargs.setdefault("MinZProduction", 0.)
81 kwargs.setdefault("MaxZProduction", 100.)
82 kwargs.setdefault("MinRadiusDecay", 0.)
83 kwargs.setdefault("MazRadiusDecay", 99999999999.)
84 kwargs.setdefault("MinZDecay", 3479.) # just after last HGTD layer
85 kwargs.setdefault("MaxZDecay", 99999999999.)
86 acc.setPrivateTools(CompFactory.HGTD_TrackDecaySelectionTool(name, **kwargs))
87
88 return acc
89
90
91def HGTD_AllTracksSelectionToolCfg(flags, name='AllTracksSelection', **kwargs):
92 acc = ComponentAccumulator()
93 acc.setPrivateTools(CompFactory.HGTD_AllTracksSelectionTool(name, **kwargs))
94
95 return acc
96
97
98#
99# The performance-study algorithm.
100#
101
102def HGTD_TrkTimePerformanceStudiesCfg(flags, name='HGTD_TrkTimePerformanceStudies',
103 output_name='HGTD_PerformanceStudies_output', **kwargs):
104 acc = ComponentAccumulator()
105
106 time_from_clusters = acc.popToolsAndMerge(
108 time_from_clusters_no_sel = acc.popToolsAndMerge(
110 time_from_summary = acc.popToolsAndMerge(
112
113 all_tracks_sel_tool = acc.popToolsAndMerge(
115 no_early_decay_tracks_sel_tool = acc.popToolsAndMerge(
117
118 kwargs.setdefault("DirectoryName", "/HGTD_ANA/")
119 kwargs.setdefault("TrackTimeTools",
120 [time_from_clusters, time_from_clusters_no_sel, time_from_summary])
121 kwargs.setdefault("TrackSelectionTools",
122 [all_tracks_sel_tool, no_early_decay_tracks_sel_tool])
123
124 # Note! change the below if you have a use case where you put a specific
125 # selection into SG and schedule the performance algo afterwards!
126 kwargs.setdefault("TrackParticleContainerName", "InDetTrackParticles")
127
128 acc.addEventAlgo(CompFactory.HGTD_TrkTimePerformanceStudies(name, **kwargs))
129
130 acc.merge(OutputCfg(flags, output_name=output_name))
131
132 return acc
133
134
135def main():
136 """Run HGTD_TrkTimePerformanceStudies over an AOD.
137
138 This is the single entry point shared with share/JO_Performance_Studies.py.
139
140 The input AOD must have been produced with
141 --preExec 'all:flags.Tracking.writeExtendedHGTDInfo=True'
142 otherwise the extended HGTD track decorations the track-time accessor
143 tools read (HGTD_cluster_time, HGTD_primary_expected, HGTD_summaryinfo,
144 ...) are stripped from the AOD and all histograms come out empty.
145 """
146 from AthenaConfiguration.AllConfigFlags import initConfigFlags
147 flags = initConfigFlags()
148 flags.Exec.MaxEvents = -1
149 flags.fillFromArgs() # set the input with: --filesInput=...
150
151 if not flags.Input.Files:
152 raise SystemExit("ERROR: no input file given, use --filesInput=<AOD.pool.root>")
153
154 flags.lock()
155
156 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
157 cfg = MainServicesCfg(flags)
158
159 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
160 cfg.merge(PoolReadCfg(flags))
161
162 cfg.merge(HGTD_TrkTimePerformanceStudiesCfg(flags))
163
164 return cfg.run().isFailure()
165
166
167if __name__ == "__main__":
168 import sys
169 sys.exit(main())
HGTD_ExpertTrackTimeFromEDMToolCfg(flags, name='ExpertTrackTimeFromEDM', **kwargs)
HGTD_ExpertTrackTimeFromSummaryToolCfg(flags, name='ExpertTrackTimeFromSummary', **kwargs)
HGTD_TrkTimePerformanceStudiesCfg(flags, name='HGTD_TrkTimePerformanceStudies', output_name='HGTD_PerformanceStudies_output', **kwargs)
OutputCfg(flags, output_name='HGTD_PerformanceStudies_output')
HGTD_NoEarlyDecayTracksSelectionToolCfg(flags, name='NoEarlyDecayTracksSelection', **kwargs)
HGTD_AllTracksSelectionToolCfg(flags, name='AllTracksSelection', **kwargs)
HGTD_ExpertTrackTimeFromClustersNoSelectionToolCfg(flags, name='ExpertTrackTimeFromClustersNoSelection', **kwargs)
HGTD_ExpertTrackTimeFromClustersToolCfg(flags, name='ExpertTrackTimeFromClusters', **kwargs)