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, Campaign.MC23g]:
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.Input.MCCampaign
is Campaign.MC23g:
128 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00/2025_d0z0_smearing_factors.root")
130 elif flags.GeoModel.Run
is LHCPeriod.Run2:
131 kwargs.setdefault(
"calibFileIP_CTIDE",
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00/d0z0_smearing_factors_Run2_v2.root")
132 elif "calibFileIP_CTIDE" not in kwargs:
133 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.")
136 CompFactory.InDet.InDetTrackSmearingTool(name, **kwargs))
140 """Return calibFiles/runNumberBounds kwargs for InDetTrackBiasingTool.
142 Selects campaign-specific calibration files and (for multi-period
143 campaigns) run-number boundaries. Raises ValueError for unknown
144 campaigns or geometries.
146 c2 =
"InDetTrackSystematicsTools/CalibData_22.0_2022-v00"
147 c3 =
"InDetTrackSystematicsTools/CalibData_25.2_2025-v00"
148 if flags.GeoModel.Run
is LHCPeriod.Run2:
149 if flags.Input.MCCampaign
is Campaign.MC20a:
153 f
"{c2}/REL22_REPRO_2015.root",
154 f
"{c2}/REL22_REPRO_2016_1stPart.root",
155 f
"{c2}/REL22_REPRO_2016_2ndPart.root",
157 "runNumberBounds": [0, 296938, 301912, 999999],
159 elif flags.Input.MCCampaign
is Campaign.MC20d:
163 f
"{c2}/REL22_REPRO_2017_1stPart.root",
164 f
"{c2}/REL22_REPRO_2017_2ndPart.root",
166 "runNumberBounds": [0, 334842, 999999],
168 elif flags.Input.MCCampaign
is Campaign.MC20e:
172 f
"{c2}/REL22_REPRO_2018_1stPart.root",
173 f
"{c2}/REL22_REPRO_2018_2ndPart.root",
175 "runNumberBounds": [0, 353000, 999999],
179 'No biasing recommendations found for campaign "'
180 + flags.Input.MCCampaign.value
181 +
'" in Run 2. Please check the configuration.'
183 elif flags.GeoModel.Run
is LHCPeriod.Run3:
184 if flags.Input.MCCampaign
is Campaign.MC23a:
188 f
"{c3}/2022_d0z0qoverp_biasing_factor.root",
191 elif flags.Input.MCCampaign
is Campaign.MC23d:
195 f
"{c3}/2023_d0z0qoverp_biasing_factor.root",
198 elif flags.Input.MCCampaign
is Campaign.MC23e:
202 f
"{c3}/2024_d0z0qoverp_biasing_factor.root",
207 'No biasing recommendations found for campaign "'
208 + flags.Input.MCCampaign.value
209 +
'" in Run 3. Please check the configuration.'
213 'No biasing recommendations found for geometry "'
214 + flags.GeoModel.Run.value
215 +
'". Please check the configuration.'
221 acc = ComponentAccumulator()
222 kwargs.setdefault(
"isMC", flags.Input.isMC)
223 if "calibFiles" not in kwargs:
226 CompFactory.InDet.InDetTrackBiasingTool(name, **kwargs))
230 acc = ComponentAccumulator()
232 if "TrackFilterToolLRT" not in kwargs:
233 kwargs.setdefault(
"TrackFilterToolLRT", acc.popToolsAndMerge(
236 if "TrackFilterToolSTD" not in kwargs:
237 kwargs.setdefault(
"TrackFilterToolSTD", acc.popToolsAndMerge(
240 acc.addEventAlgo(CompFactory.InDet.TrackSystematicsAlg(name, **kwargs))
245 seed=4, bias_kwargs={}):
246 """Shallow-copy input_tracks and apply smearing/biasing for one syst.
248 syst is a single smearing variation string (TRK_RES_*, TRK_BIAS_*), or
249 empty for a nominal (un-smeared) copy. Produces output_tracks as a
250 shallow copy with modified d0/z0/qoverp values.
252 Any extra keyword arguments are forwarded to InDetTrackBiasingToolCfg
253 as calibration kwargs (calibFiles, runNumberBounds, ...). If none are
254 supplied, InDetTrackBiasingCalibKwargs(flags) is called to derive them;
255 exceptions from that call propagate to the caller.
257 ca = ComponentAccumulator()
260 ca.addPublicTool(smearingTool)
267 if 'BIAS' in syst
or bias_kwargs:
271 biasingTool = ca.popToolsAndMerge(
273 ca.addPublicTool(biasingTool)
275 alg = CompFactory.InDet.TrackSmearingAlg(
276 f
'TrackSmearingAlg_{output_tracks}',
277 SmearingTool=smearingTool,
278 InputTrackContainer=input_tracks,
279 OutputTrackContainer=output_tracks,
280 SystematicVariation=syst,
282 if biasingTool
is not None:
283 alg.BiasingTool = biasingTool
290 flags, syst, jet_collection,
291 in_ghost_tracks, out_ghost_tracks,
293 """Filter ghost-track links on jets for one filter systematic.
295 syst is a single filter variation string (TRK_EFF_*, TRK_FAKE_RATE_*).
296 Reads in_ghost_tracks decoration from jet_collection, applies filter
297 tools per-track (dispatching LRT vs STD by patternRecoInfo bit 49),
298 and writes surviving links to out_ghost_tracks.
300 seed overrides the Seed property on all filter tools. If None (default),
301 each tool uses its own default seed (1 STD, 2 TIDE, 3 LRT).
303 assert syst,
"JetTrackFilteringAlgCfg called with empty syst"
305 ca = ComponentAccumulator()
307 is_larged0 =
'LARGED0' in syst
308 is_tide =
'TIDE' in syst
310 alg = CompFactory.InDet.JetTrackFilteringAlg(
311 f
'JetTrackFilteringAlg_{out_ghost_tracks}',
312 JetCollection=jet_collection,
313 InGhostTracks=in_ghost_tracks,
314 OutGhostTracks=out_ghost_tracks,
315 SystematicVariation=syst,
317 std_kwargs = {}
if seed
is None else {
"seed": seed}
318 lrt_kwargs = {}
if seed
is None else {
"seed": seed}
319 tide_kwargs = {}
if seed
is None else {
"seed": seed}
321 alg.STDFilterTool = ca.popToolsAndMerge(
324 ca.addPublicTool(alg.STDFilterTool)
326 alg.LRTFilterTool = ca.popToolsAndMerge(
329 ca.addPublicTool(alg.LRTFilterTool)
331 alg.JetFilterTool = ca.popToolsAndMerge(
334 ca.addPublicTool(alg.JetFilterTool)