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))
31 acc = ComponentAccumulator()
33 if "trackOriginTool" not in kwargs:
34 kwargs.setdefault(
"trackOriginTool", acc.popToolsAndMerge(
38 if flags.Input.MCCampaign
in [Campaign.MC23a, Campaign.MC23d, Campaign.MC23e]:
39 kwargs.setdefault(
"calibFileNomEff",
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/TrackingRecommendations_prelim_rel22.root")
40 kwargs.setdefault(
"fFakeLoose", 0.40)
41 kwargs.setdefault(
"fFakeTight", 1.00)
43 elif flags.GeoModel.Run
is LHCPeriod.Run2:
44 kwargs.setdefault(
"calibFileNomEff",
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/TrackingRecommendations_prelim_rel22.root")
45 kwargs.setdefault(
"fFakeLoose", 0.10)
46 kwargs.setdefault(
"fFakeTight", 1.00)
48 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.")
51 CompFactory.InDet.InDetTrackTruthFilterTool(name, **kwargs))
55 acc = ComponentAccumulator()
57 if "trackOriginTool" not in kwargs:
58 kwargs.setdefault(
"trackOriginTool", acc.popToolsAndMerge(
63 if flags.GeoModel.Run >= LHCPeriod.Run3:
64 kwargs.setdefault(
"FakeUncertainty", 0.25)
67 kwargs.setdefault(
"FakeUncertainty", 0.35)
71 if flags.GeoModel.Run >= LHCPeriod.Run3:
73 if flags.Input.MCCampaign
in [Campaign.MC23a, Campaign.MC23d]:
74 kwargs.setdefault(
"FLostUncertainty", 0.24)
76 elif flags.Input.MCCampaign
is Campaign.MC23e:
77 kwargs.setdefault(
"FLostUncertainty", 0.32)
79 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.")
82 kwargs.setdefault(
"FLostUncertainty", 0.24)
84 acc.setPrivateTools(CompFactory.InDet.JetTrackFilterTool(name, **kwargs))
88 acc = ComponentAccumulator()
91 if flags.Input.MCCampaign
is Campaign.MC23a:
92 kwargs.setdefault(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23a.root")
93 elif flags.Input.MCCampaign
is Campaign.MC23d:
94 kwargs.setdefault(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23d.root")
95 elif flags.Input.MCCampaign
is Campaign.MC23e:
96 kwargs.setdefault(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/LargeD0TrackingRecommendations_mc23e.root")
98 elif flags.GeoModel.Run
is LHCPeriod.Run2:
99 kwargs.setdefault(
"calibFileLRTEff",
"InDetTrackSystematicsTools/CalibData_24.0_2023-v00/LargeD0TrackingRecommendations_20230824.root")
101 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.")
104 CompFactory.InDet.InclusiveTrackFilterTool(name, **kwargs))
108 acc = ComponentAccumulator()
111 if flags.Input.MCCampaign
is Campaign.MC23a:
112 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2022_d0z0_smearing_factors_v2.root")
114 elif flags.Input.MCCampaign
is Campaign.MC23d:
115 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2023_d0z0_smearing_factors_v2.root")
117 elif flags.Input.MCCampaign
is Campaign.MC23e:
118 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2024_d0z0_smearing_factors.root")
120 elif flags.GeoModel.Run
is LHCPeriod.Run2:
121 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/d0z0_smearing_factors_Run2_v2.root")
122 elif "calibFileIP_CTIDE" not in kwargs:
123 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.")
126 CompFactory.InDet.InDetTrackSmearingTool(name, **kwargs))
130 """Return calibFiles/runNumberBounds kwargs for InDetTrackBiasingTool.
132 Selects campaign-specific calibration files and (for multi-period
133 campaigns) run-number boundaries. Raises ValueError for unknown
134 campaigns or geometries.
136 c2 =
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00"
137 c3 =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00"
138 if flags.GeoModel.Run
is LHCPeriod.Run2:
139 if flags.Input.MCCampaign
is Campaign.MC20a:
143 f
"{c2}/REL22_REPRO_2015.root",
144 f
"{c2}/REL22_REPRO_2016_1stPart.root",
145 f
"{c2}/REL22_REPRO_2016_2ndPart.root",
147 "runNumberBounds": [0, 296938, 301912, 999999],
149 elif flags.Input.MCCampaign
is Campaign.MC20d:
153 f
"{c2}/REL22_REPRO_2017_1stPart.root",
154 f
"{c2}/REL22_REPRO_2017_2ndPart.root",
156 "runNumberBounds": [0, 334842, 999999],
158 elif flags.Input.MCCampaign
is Campaign.MC20e:
162 f
"{c2}/REL22_REPRO_2018_1stPart.root",
163 f
"{c2}/REL22_REPRO_2018_2ndPart.root",
165 "runNumberBounds": [0, 353000, 999999],
169 'No biasing recommendations found for campaign "'
170 + flags.Input.MCCampaign.value
171 +
'" in Run 2. Please check the configuration.'
173 elif flags.GeoModel.Run
is LHCPeriod.Run3:
174 if flags.Input.MCCampaign
is Campaign.MC23a:
178 f
"{c3}/2022_d0z0qoverp_biasing_factor.root",
181 elif flags.Input.MCCampaign
is Campaign.MC23d:
185 f
"{c3}/2023_d0z0qoverp_biasing_factor.root",
188 elif flags.Input.MCCampaign
is Campaign.MC23e:
192 f
"{c3}/2024_d0z0qoverp_biasing_factor.root",
197 'No biasing recommendations found for campaign "'
198 + flags.Input.MCCampaign.value
199 +
'" in Run 3. Please check the configuration.'
203 'No biasing recommendations found for geometry "'
204 + flags.GeoModel.Run.value
205 +
'". Please check the configuration.'
211 acc = ComponentAccumulator()
212 kwargs.setdefault(
"isMC", flags.Input.isMC)
213 if "calibFiles" not in kwargs:
216 CompFactory.InDet.InDetTrackBiasingTool(name, **kwargs))
220 acc = ComponentAccumulator()
222 if "TrackFilterToolLRT" not in kwargs:
223 kwargs.setdefault(
"TrackFilterToolLRT", acc.popToolsAndMerge(
226 if "TrackFilterToolSTD" not in kwargs:
227 kwargs.setdefault(
"TrackFilterToolSTD", acc.popToolsAndMerge(
230 acc.addEventAlgo(CompFactory.InDet.TrackSystematicsAlg(name, **kwargs))
236 """Shallow-copy input_tracks and apply smearing/biasing for one syst.
238 syst is a single smearing variation string (TRK_RES_*, TRK_BIAS_*), or
239 empty for a nominal (un-smeared) copy. Produces output_tracks as a
240 shallow copy with modified d0/z0/qoverp values.
242 Any extra keyword arguments are forwarded to InDetTrackBiasingToolCfg
243 as calibration kwargs (calibFiles, runNumberBounds, ...). If none are
244 supplied, InDetTrackBiasingCalibKwargs(flags) is called to derive them;
245 exceptions from that call propagate to the caller.
247 ca = ComponentAccumulator()
250 ca.addPublicTool(smearingTool)
257 if 'BIAS' in syst
or bias_kwargs:
261 biasingTool = ca.popToolsAndMerge(
263 ca.addPublicTool(biasingTool)
265 alg = CompFactory.InDet.TrackSmearingAlg(
266 f
'TrackSmearingAlg_{output_tracks}',
267 SmearingTool=smearingTool,
268 InputTrackContainer=input_tracks,
269 OutputTrackContainer=output_tracks,
270 SystematicVariation=syst,
272 if biasingTool
is not None:
273 alg.BiasingTool = biasingTool
280 flags, syst, jet_collection,
281 in_ghost_tracks, out_ghost_tracks):
282 """Filter ghost-track links on jets for one filter systematic.
284 syst is a single filter variation string (TRK_EFF_*, TRK_FAKE_RATE_*).
285 Reads in_ghost_tracks decoration from jet_collection, applies filter
286 tools per-track (dispatching LRT vs STD by patternRecoInfo bit 49),
287 and writes surviving links to out_ghost_tracks.
289 assert syst,
"JetTrackFilteringAlgCfg called with empty syst"
291 ca = ComponentAccumulator()
293 is_larged0 =
'LARGED0' in syst
294 is_tide =
'TIDE' in syst
296 alg = CompFactory.InDet.JetTrackFilteringAlg(
297 f
'JetTrackFilteringAlg_{out_ghost_tracks}',
298 JetCollection=jet_collection,
299 InGhostTracks=in_ghost_tracks,
300 OutGhostTracks=out_ghost_tracks,
301 SystematicVariation=syst,
304 alg.STDFilterTool = ca.popToolsAndMerge(
307 ca.addPublicTool(alg.STDFilterTool)
309 alg.LRTFilterTool = ca.popToolsAndMerge(
312 ca.addPublicTool(alg.LRTFilterTool)
314 alg.JetFilterTool = ca.popToolsAndMerge(
317 ca.addPublicTool(alg.JetFilterTool)