3from AnaAlgorithm.DualUseConfig
import isAthena
5 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
6 from AthenaConfiguration.ComponentFactory
import CompFactory
7from AthenaConfiguration.Enums
import LHCPeriod
8from Campaigns.Utils
import Campaign
9from AthenaCommon.Logging
import logging
12 acc = ComponentAccumulator()
14 log = logging.getLogger(
"InDetTrackTruthOriginTool")
17 kwargs.setdefault(
"isFullPileUpTruth", flags.Digitization.PileUp
18 and flags.Digitization.DigiSteeringConf
in [
'StandardPileUpToolsAlg',
19 'StandardInTimeOnlyTruthPileUpToolsAlg',
20 'StandardInTimeOnlyGeantinoTruthPileUpToolsAlg'])
21 except AttributeError:
23 kwargs.setdefault(
"isFullPileUpTruth",
False)
24 log.warning(
"Unable to load digi flags, assuming isFullPileUpTruth=False. Normal if you're in AthAnalysis.")
27 CompFactory.InDet.InDetTrackTruthOriginTool(name, **kwargs))
32 acc = ComponentAccumulator()
33 kwargs.setdefault(
"Seed", seed)
35 if "trackOriginTool" not in kwargs:
36 kwargs.setdefault(
"trackOriginTool", acc.popToolsAndMerge(
40 if flags.Input.MCCampaign
in [Campaign.MC23a, Campaign.MC23d, Campaign.MC23e]:
41 kwargs.setdefault(
"calibFileNomEff",
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/TrackingRecommendations_prelim_rel22.root")
42 kwargs.setdefault(
"fFakeLoose", 0.40)
43 kwargs.setdefault(
"fFakeTight", 1.00)
45 elif flags.GeoModel.Run
is LHCPeriod.Run2:
46 kwargs.setdefault(
"calibFileNomEff",
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/TrackingRecommendations_prelim_rel22.root")
47 kwargs.setdefault(
"fFakeLoose", 0.10)
48 kwargs.setdefault(
"fFakeTight", 1.00)
50 raise ValueError(f
"InDetTrackTruthFilterTool: Recommendations not yet available for campaign {flags.Input.MCCampaign}! Please check the configuration and contact Tracking CP if you believe this message is in error.")
53 CompFactory.InDet.InDetTrackTruthFilterTool(name, **kwargs))
57 acc = ComponentAccumulator()
58 kwargs.setdefault(
"Seed", seed)
60 if "trackOriginTool" not in kwargs:
61 kwargs.setdefault(
"trackOriginTool", acc.popToolsAndMerge(
66 if flags.GeoModel.Run >= LHCPeriod.Run3:
67 kwargs.setdefault(
"FakeUncertainty", 0.25)
70 kwargs.setdefault(
"FakeUncertainty", 0.35)
74 if flags.GeoModel.Run >= LHCPeriod.Run3:
76 if flags.Input.MCCampaign
in [Campaign.MC23a, Campaign.MC23d]:
77 kwargs.setdefault(
"FLostUncertainty", 0.24)
79 elif flags.Input.MCCampaign
is Campaign.MC23e:
80 kwargs.setdefault(
"FLostUncertainty", 0.32)
82 raise ValueError(f
"JetTrackFilterTool: Recommendations not yet available for campaign {flags.Input.MCCampaign}! Please check the configuration and contact Tracking CP if you believe this message is in error.")
85 kwargs.setdefault(
"FLostUncertainty", 0.24)
87 acc.setPrivateTools(CompFactory.InDet.JetTrackFilterTool(name, **kwargs))
92 acc = ComponentAccumulator()
93 kwargs.setdefault(
"Seed", seed)
96 if flags.Input.MCCampaign
is Campaign.MC23a:
97 kwargs.setdefault(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23a.root")
98 elif flags.Input.MCCampaign
is Campaign.MC23d:
99 kwargs.setdefault(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23d.root")
100 elif flags.Input.MCCampaign
is Campaign.MC23e:
101 kwargs.setdefault(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23e.root")
103 elif flags.GeoModel.Run
is LHCPeriod.Run2:
104 kwargs.setdefault(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_24.0_2023-v00/LargeD0TrackingRecommendations_20230824.root")
106 raise ValueError(f
"InclusiveTrackFilterTool: Recommendations not yet available for campaign {flags.Input.MCCampaign}! Please check the configuration and contact Tracking CP if you believe this message is in error.")
109 CompFactory.InDet.InclusiveTrackFilterTool(name, **kwargs))
114 acc = ComponentAccumulator()
115 kwargs.setdefault(
"Seed", seed)
118 if flags.Input.MCCampaign
is Campaign.MC23a:
119 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2022_d0z0_smearing_factors_v2.root")
121 elif flags.Input.MCCampaign
is Campaign.MC23d:
122 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2023_d0z0_smearing_factors_v2.root")
124 elif flags.Input.MCCampaign
is Campaign.MC23e:
125 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2024_d0z0_smearing_factors.root")
127 elif flags.GeoModel.Run
is LHCPeriod.Run2:
128 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/d0z0_smearing_factors_Run2_v2.root")
129 elif "calibFileIP_CTIDE" not in kwargs:
130 raise ValueError(f
"InDetTrackSmearingTool: Recommendations not yet available for campaign {flags.Input.MCCampaign}! Please check the configuration and contact Tracking CP if you believe this message is in error.")
133 CompFactory.InDet.InDetTrackSmearingTool(name, **kwargs))
137 """Return calibFiles/runNumberBounds kwargs for InDetTrackBiasingTool.
139 Selects campaign-specific calibration files and (for multi-period
140 campaigns) run-number boundaries. Raises ValueError for unknown
141 campaigns or geometries.
143 c2 =
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00"
144 c3 =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00"
145 if flags.GeoModel.Run
is LHCPeriod.Run2:
146 if flags.Input.MCCampaign
is Campaign.MC20a:
150 f
"{c2}/REL22_REPRO_2015.root",
151 f
"{c2}/REL22_REPRO_2016_1stPart.root",
152 f
"{c2}/REL22_REPRO_2016_2ndPart.root",
154 "runNumberBounds": [0, 296938, 301912, 999999],
156 elif flags.Input.MCCampaign
is Campaign.MC20d:
160 f
"{c2}/REL22_REPRO_2017_1stPart.root",
161 f
"{c2}/REL22_REPRO_2017_2ndPart.root",
163 "runNumberBounds": [0, 334842, 999999],
165 elif flags.Input.MCCampaign
is Campaign.MC20e:
169 f
"{c2}/REL22_REPRO_2018_1stPart.root",
170 f
"{c2}/REL22_REPRO_2018_2ndPart.root",
172 "runNumberBounds": [0, 353000, 999999],
176 'No biasing recommendations found for campaign "'
177 + flags.Input.MCCampaign.value
178 +
'" in Run 2. Please check the configuration.'
180 elif flags.GeoModel.Run
is LHCPeriod.Run3:
181 if flags.Input.MCCampaign
is Campaign.MC23a:
185 f
"{c3}/2022_d0z0qoverp_biasing_factor.root",
188 elif flags.Input.MCCampaign
is Campaign.MC23d:
192 f
"{c3}/2023_d0z0qoverp_biasing_factor.root",
195 elif flags.Input.MCCampaign
is Campaign.MC23e:
199 f
"{c3}/2024_d0z0qoverp_biasing_factor.root",
204 'No biasing recommendations found for campaign "'
205 + flags.Input.MCCampaign.value
206 +
'" in Run 3. Please check the configuration.'
210 'No biasing recommendations found for geometry "'
211 + flags.GeoModel.Run.value
212 +
'". Please check the configuration.'
218 acc = ComponentAccumulator()
219 kwargs.setdefault(
"isMC", flags.Input.isMC)
220 if "calibFiles" not in kwargs:
223 CompFactory.InDet.InDetTrackBiasingTool(name, **kwargs))
227 acc = ComponentAccumulator()
229 if "TrackFilterToolLRT" not in kwargs:
230 kwargs.setdefault(
"TrackFilterToolLRT", acc.popToolsAndMerge(
233 if "TrackFilterToolSTD" not in kwargs:
234 kwargs.setdefault(
"TrackFilterToolSTD", acc.popToolsAndMerge(
237 acc.addEventAlgo(CompFactory.InDet.TrackSystematicsAlg(name, **kwargs))
242 seed=4, bias_kwargs={}):
243 """Shallow-copy input_tracks and apply smearing/biasing for one syst.
245 syst is a single smearing variation string (TRK_RES_*, TRK_BIAS_*), or
246 empty for a nominal (un-smeared) copy. Produces output_tracks as a
247 shallow copy with modified d0/z0/qoverp values.
249 Any extra keyword arguments are forwarded to InDetTrackBiasingToolCfg
250 as calibration kwargs (calibFiles, runNumberBounds, ...). If none are
251 supplied, InDetTrackBiasingCalibKwargs(flags) is called to derive them;
252 exceptions from that call propagate to the caller.
254 ca = ComponentAccumulator()
257 ca.addPublicTool(smearingTool)
264 if 'BIAS' in syst
or bias_kwargs:
268 biasingTool = ca.popToolsAndMerge(
270 ca.addPublicTool(biasingTool)
272 alg = CompFactory.InDet.TrackSmearingAlg(
273 f
'TrackSmearingAlg_{output_tracks}',
274 SmearingTool=smearingTool,
275 InputTrackContainer=input_tracks,
276 OutputTrackContainer=output_tracks,
277 SystematicVariation=syst,
279 if biasingTool
is not None:
280 alg.BiasingTool = biasingTool
287 flags, syst, jet_collection,
288 in_ghost_tracks, out_ghost_tracks,
290 """Filter ghost-track links on jets for one filter systematic.
292 syst is a single filter variation string (TRK_EFF_*, TRK_FAKE_RATE_*).
293 Reads in_ghost_tracks decoration from jet_collection, applies filter
294 tools per-track (dispatching LRT vs STD by patternRecoInfo bit 49),
295 and writes surviving links to out_ghost_tracks.
297 seed overrides the Seed property on all filter tools. If None (default),
298 each tool uses its own default seed (1 STD, 2 TIDE, 3 LRT).
300 assert syst,
"JetTrackFilteringAlgCfg called with empty syst"
302 ca = ComponentAccumulator()
304 is_larged0 =
'LARGED0' in syst
305 is_tide =
'TIDE' in syst
307 alg = CompFactory.InDet.JetTrackFilteringAlg(
308 f
'JetTrackFilteringAlg_{out_ghost_tracks}',
309 JetCollection=jet_collection,
310 InGhostTracks=in_ghost_tracks,
311 OutGhostTracks=out_ghost_tracks,
312 SystematicVariation=syst,
314 std_kwargs = {}
if seed
is None else {
"seed": seed}
315 lrt_kwargs = {}
if seed
is None else {
"seed": seed}
316 tide_kwargs = {}
if seed
is None else {
"seed": seed}
318 alg.STDFilterTool = ca.popToolsAndMerge(
321 ca.addPublicTool(alg.STDFilterTool)
323 alg.LRTFilterTool = ca.popToolsAndMerge(
326 ca.addPublicTool(alg.LRTFilterTool)
328 alg.JetFilterTool = ca.popToolsAndMerge(
331 ca.addPublicTool(alg.JetFilterTool)