ATLAS Offline Software
Loading...
Searching...
No Matches
TrkConfigFlags.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.AthConfigFlags import AthConfigFlags
4from AthenaConfiguration.Enums import BeamType, LHCPeriod, FlagEnum, HIMode, ProductionStep
5import AthenaCommon.SystemOfUnits as Units
6from Campaigns.Utils import Campaign
7
8
9class PrimaryPassConfig(FlagEnum):
10 VtxLumi = 'VtxLumi'
11 VtxLumiHeavyIon = 'VtxLumiHeavyIon'
12 VtxBeamSpot = 'VtxBeamSpot'
13 Cosmics = 'Cosmics'
14 HeavyIon = 'HeavyIon'
15 HighPileup = 'HighPileup'
16 UPC = 'UPC'
17 HIP = 'HIP'
18 MinBias = 'MinBias'
19 Default = 'Main'
20 Acts = 'Acts'
21
22
23class ITkPrimaryPassConfig(FlagEnum):
24 FTF = 'ITkFTF'
25 FastTracking = 'ITkFast'
26 HeavyIon = 'ITkHeavyIon'
27 Acts = 'ITkActs'
28 ActsLegacy = 'ITkActsLegacy'
29 ActsHeavyIon = 'ITkActsHeavyIon'
30 Default = 'ITkMain'
31
32class TrackFitterType(FlagEnum):
33 DistributedKalmanFilter = 'DistributedKalmanFilter'
34 GlobalChi2Fitter = 'GlobalChi2Fitter'
35 GaussianSumFilter = 'GaussianSumFilter'
36
37
38class KalmanUpdatorType(FlagEnum):
39 KalmanUpdator = 'KalmanUpdator'
40 KalmanUpdator_xk = 'KalmanUpdator_xk'
41 KalmanUpdatorSMatrix = 'KalmanUpdatorSMatrix'
42
43
45 NeuralNet = 'NeuralNet'
46 Truth = 'Truth'
47
48
49class TrackingComponent(FlagEnum):
50 AthenaChain = "AthenaChain" # full Athena Chain (default)
51 ActsChain = "ActsChain" # full Acts Chain
52 ActsLegacyChain = "ActsLegacyChain" # Acts Chain - legacy like
53 ActsHeavyIon = "ActsHeavyIon"
54
55 # GNN
56 GNNChain = "GNNChain"
57
58 # FPGA
59 FPGAChain = "FPGAChain"
60 ActsValidateF100 = "ActsValidateF100"
61 ActsValidateF150 = "ActsValidateF150"
62
64 icf = AthConfigFlags()
65
66 # Turn running of truth matching on and off (by default on for MC off for data)
67 icf.addFlag("Tracking.doTruth", lambda prevFlags: prevFlags.Input.isMC or
68 (prevFlags.Common.ProductionStep is not ProductionStep.MinbiasPreprocessing and prevFlags.Overlay.DataOverlay))
69
70 # control which fitter to be used
71 icf.addFlag("Tracking.trackFitterType",
72 TrackFitterType.GlobalChi2Fitter, type=TrackFitterType)
73 # control which measurement updator to load as InDetUpdator
74 icf.addFlag("Tracking.kalmanUpdator",
75 KalmanUpdatorType.KalmanUpdatorSMatrix, type=KalmanUpdatorType)
76
77 icf.addFlag("Tracking.materialInteractions", lambda prevFlags:
78 prevFlags.Beam.Type is not BeamType.SingleBeam)
79 # Control which type of particle hypothesis to use for the material interactions
80 # 0=non-interacting,1=electron,2=muon,3=pion,4=kaon,5=proton. See ParticleHypothesis.h for full definition.
81 icf.addFlag("Tracking.materialInteractionsType", lambda prevFlags:
82 2 if prevFlags.Beam.Type is BeamType.Cosmics else 3)
83
84 # Turn on running of Brem Recovery in tracking
85 icf.addFlag("Tracking.doBremRecovery", lambda prevFlags: (
86 prevFlags.Detector.EnableCalo and
87 not (prevFlags.Tracking.PrimaryPassConfig in
88 [PrimaryPassConfig.VtxLumi, PrimaryPassConfig.VtxLumiHeavyIon, PrimaryPassConfig.VtxBeamSpot] or
89 prevFlags.Tracking.doLowMu or
90 prevFlags.Beam.Type is not BeamType.Collisions or
91 not prevFlags.BField.solenoidOn)))
92 icf.addFlag("Tracking.doCaloSeededBrem", lambda prevFlags: (
93 prevFlags.Detector.EnableCalo and prevFlags.Tracking.doBremRecovery))
94 icf.addFlag("Tracking.phiWidthBrem", 0.3)
95 icf.addFlag("Tracking.etaWidthBrem", 0.2)
96 # Use Recover SSS to Calo ROIs
97 icf.addFlag("Tracking.doHadCaloSeededSSS", False)
98 # Use Calo ROIs to seed specific cuts for the ambi
99 icf.addFlag("Tracking.doCaloSeededAmbi", lambda prevFlags:
100 prevFlags.Detector.EnableCalo)
101 # control if the shared hits are recorded in TrackPatricles
102 icf.addFlag("Tracking.doSharedHits", True)
103 # Switch for running TIDE Ambi
104 icf.addFlag("Tracking.doTIDE_Ambi", lambda prevFlags:
105 prevFlags.Beam.Type is not BeamType.Cosmics)
106 # Use simple position and error estimate for on-track pixel cluster
107 icf.addFlag("Tracking.doPixelDigitalClustering", lambda prevFlags:
108 prevFlags.GeoModel.Run >= LHCPeriod.Run4)
109 # Try to split pixel clusters
110 icf.addFlag("Tracking.doPixelClusterSplitting",
111 lambda prevFlags: prevFlags.Beam.Type is not BeamType.Cosmics)
112 # choose splitter type: NeuralNet or AnalogClus
113 icf.addFlag("Tracking.pixelClusterSplittingType", lambda prevFlags:
114 PixelClusterSplittingType.NeuralNet
115 if prevFlags.GeoModel.Run <= LHCPeriod.Run3
116 else PixelClusterSplittingType.Truth,
117 type=PixelClusterSplittingType)
118 # ITk: run the pixel cluster NN (pixelClusterSplittingType NeuralNet) with
119 # ONNX models instead of the lwtnn networks of the PixelClusterNNJSON
120 # conditions folder, which is not available for the Run 4 conditions tags
121 icf.addFlag("Tracking.useONNXPixelNN", False)
122 # ITk: folder of the ONNX pixel cluster NN models (number.onnx, pos1.onnx,
123 # pos2.onnx, pos3.onnx), same models as Acts.PixelNNCalibrationModelsFolder
124 icf.addFlag("Tracking.pixelNNONNXModelsFolder",
125 'ITkPixelClusterization/nn-01-01-01/')
126 # Cut value for splitting clusters into two parts
127 icf.addFlag("Tracking.pixelClusterSplitProb1",
128 lambda prevFlags: (
129 0.5 if prevFlags.GeoModel.Run is LHCPeriod.Run1 else 0.55))
130 # Cut value for splitting clusters into three parts
131 icf.addFlag("Tracking.pixelClusterSplitProb2",
132 lambda prevFlags: (
133 0.5 if prevFlags.GeoModel.Run is LHCPeriod.Run1 else 0.45))
134 # Skip ambiguity solver in hadronic ROI
135 icf.addFlag("Tracking.doSkipAmbiROI", False)
136
137 # Guaranteed not-subtracted topo clusters even in heavy ions
138 icf.addFlag("Tracking.TopoClusters", "CaloTopoClusters")
139 icf.addFlag("Tracking.EgammaTopoClusters", "egammaTopoClusters")
140 icf.addFlag("Tracking.ForwardTopoClusters",
141 lambda prevFlags: (
142 prevFlags.Egamma.Keys.Internal.EgammaTopoClusters + 'Fwd'))
143
144 # Express track parameters wrt. to : 'BeamLine','BeamSpot','Vertex' (first primary vertex)
145 icf.addFlag("Tracking.perigeeExpression", lambda prevFlags:
146 "Vertex" if (prevFlags.Tracking.PrimaryPassConfig in [
147 PrimaryPassConfig.HeavyIon, PrimaryPassConfig.VtxLumiHeavyIon] or
148 prevFlags.Tracking.ITkPrimaryPassConfig in [
149 ITkPrimaryPassConfig.HeavyIon, ITkPrimaryPassConfig.ActsHeavyIon]
150 )
151 else "BeamLine")
152
153 # to make eta overlap space points in endcap (aligned with search eta neighbour in strip endcaps)
154 icf.addFlag("Tracking.doEndcapEtaOverlapSpacePoint", lambda prevFlags: prevFlags.ITk.doEndcapEtaNeighbour)
155
156 # Tracking passes/configurations scheduled
157
158 def doLargeD0(flags):
159 if flags.GeoModel.Run <= LHCPeriod.Run3:
160 return not ((flags.Beam.Type in
161 [BeamType.SingleBeam, BeamType.Cosmics]) or
162 flags.Tracking.PrimaryPassConfig in [
163 PrimaryPassConfig.HeavyIon,
164 PrimaryPassConfig.UPC,
165 PrimaryPassConfig.HIP,
166 PrimaryPassConfig.VtxLumi,
167 PrimaryPassConfig.VtxLumiHeavyIon,
168 PrimaryPassConfig.VtxBeamSpot,
169 PrimaryPassConfig.HighPileup])
170 else: # LRT disabled by default for Run4 for now
171 return False
172
173 icf.addFlag("Tracking.doLargeD0", doLargeD0)
174 icf.addFlag("Tracking.storeSeparateLargeD0Container", True)
175
176 # Store separate track particles collection reconstructed in regards to the beam line
177 icf.addFlag("Tracking.storeBeamLineTrackParticles", lambda prevFlags: prevFlags.Overlay.DataOverlay)
178
179 # Special configuration for low-mu runs
180 icf.addFlag("Tracking.doLowMu", False)
181 # Turn running of doLowPt second pass on and off
182 icf.addFlag("Tracking.doLowPt",
183 lambda prevFlags: prevFlags.Tracking.doLowMu)
184
185 # Turn on to save the Track Seeds in a xAOD track collecting for development studies
186 icf.addFlag("Tracking.doStoreTrackSeeds", False)
187 # Save SiSP tracks (input to the ambiguity solver)
188 icf.addFlag("Tracking.doStoreSiSPSeededTracks", False)
189 # Turn writing of seed validation ntuple on and off
190 icf.addFlag("Tracking.writeSeedValNtuple", False)
191 # Save xAOD TrackMeasurementValidation + TrackStateValidation containers
192 icf.addFlag("Tracking.writeExtendedSi_PRDInfo", False)
193 icf.addFlag("Tracking.writeExtendedTRT_PRDInfo", False)
194 icf.addFlag("Tracking.PRDInfo.KeepOnlyOnTrackMeasurements", False)
195 icf.addFlag("Tracking.writeExtendedHGTDInfo", False)
196
197 # Only keep entries in xAOD TrackMeasurementValidation + TrackStateValidation containers for tracks passing user cut
198 # Indicate detector technology from which clusters should be thinned
199 icf.addFlag("Tracking.thinPixelClustersOnTrack", False)
200 icf.addFlag("Tracking.thinSCTClustersOnTrack", False)
201 icf.addFlag("Tracking.thinTRTClustersOnTrack", False)
202 icf.addFlag("Tracking.thinInDetClustersOnTrack",
203 lambda prevFlags: (
204 prevFlags.Tracking.thinPixelClustersOnTrack or
205 prevFlags.Tracking.thinSCTClustersOnTrack or
206 prevFlags.Tracking.thinTRTClustersOnTrack ))
207
208 # For cluster thinning (if enabled): list of containers and selection strings used in ThinInDetClustersAlg
209 icf.addFlag("Tracking.thinInDetClustersTrackContainers", ["InDetTrackParticles"])
210 icf.addFlag("Tracking.thinInDetClustersPixelMSOSContainers", ["PixelMSOSs"])
211 icf.addFlag("Tracking.thinInDetClustersSCTMSOSContainers", ["SCT_MSOSs"])
212 icf.addFlag("Tracking.thinInDetClustersTRTMSOSContainers", ["TRT_MSOSs"])
213 icf.addFlag("Tracking.thinInDetClustersSelectionStrings", ["InDetTrackParticles.pt > (1*GeV)"])
214
215 # Toggle track slimming
216 icf.addFlag("Tracking.doSlimming", lambda prevFlags:
217 not (prevFlags.Beam.Type in
218 [BeamType.SingleBeam, BeamType.Cosmics] or
219 prevFlags.Tracking.PrimaryPassConfig in [
220 PrimaryPassConfig.VtxLumi,
221 PrimaryPassConfig.VtxLumiHeavyIon,
222 PrimaryPassConfig.VtxBeamSpot,
223 PrimaryPassConfig.HighPileup]))
224
225
226
227 # The following flags are only used in InDet configurations for now
228 # No corresponding ITk config is available yet
229
230 icf.addFlag("Tracking.useNewParamTRT", lambda prevFlags:
231 prevFlags.Tracking.PrimaryPassConfig is not(
232 PrimaryPassConfig.HeavyIon))
233
234 # --- run back tracking and TRT only in RoI seed regions
235 icf.addFlag("Tracking.BackTracking.doRoISeeded", lambda prevFlags:
236 prevFlags.Detector.EnableCalo and not(
237 prevFlags.Tracking.doLowMu or
238 prevFlags.Tracking.PrimaryPassConfig is (
239 PrimaryPassConfig.HeavyIon) or
240 prevFlags.Beam.Type is BeamType.Cosmics or
241 prevFlags.Tracking.doMinBias))
242
243 # --- defaults for backtracking
244 def BackTrackingMinPt(flags):
245 if flags.Tracking.doMinBias:
246 return 0.4 * Units.GeV * flags.BField.configuredSolenoidFieldScale
247 elif (flags.Tracking.doLowMu or
248 flags.Tracking.PrimaryPassConfig in [
249 PrimaryPassConfig.HeavyIon, PrimaryPassConfig.VtxLumiHeavyIon] or
250 flags.Beam.Type is BeamType.Cosmics):
251 return 1.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale
252 else:
253 return 3.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale
254 icf.addFlag("Tracking.BackTracking.minPt", BackTrackingMinPt)
255 icf.addFlag("Tracking.BackTracking.TRTSegFinderPtBins", 50)
256 icf.addFlag("Tracking.BackTracking.maxTRTSharedFrac", 0.7)
257 icf.addFlag("Tracking.BackTracking.maxSecondaryImpact", 100.0 * Units.mm)
258 icf.addFlag("Tracking.BackTracking.minClusters", 4)
259 icf.addFlag("Tracking.BackTracking.minSiNotShared", 4)
260 # cut is now on number of shared modules
261 icf.addFlag("Tracking.BackTracking.maxShared", 1)
262 icf.addFlag("Tracking.BackTracking.minTRT", lambda prevFlags:
263 10 if (prevFlags.Tracking.doLowMu or
264 prevFlags.Tracking.PrimaryPassConfig is (
265 PrimaryPassConfig.HeavyIon))
266 else 15)
267 icf.addFlag("Tracking.BackTracking.minTRTPrecFrac", lambda prevFlags:
268 0. if (prevFlags.Tracking.doLowMu or
269 prevFlags.Tracking.PrimaryPassConfig is (
270 PrimaryPassConfig.HeavyIon))
271 else 0.3)
272
273 icf.addFlag("Tracking.BackTracking.maxHoles", lambda prevFlags:
274 2 if (prevFlags.Tracking.doLowMu or
275 prevFlags.Tracking.PrimaryPassConfig is (
276 PrimaryPassConfig.HeavyIon))
277 else 1)
278 icf.addFlag("Tracking.BackTracking.maxPixelHoles", lambda prevFlags:
279 2 if (prevFlags.Tracking.doLowMu or
280 prevFlags.Tracking.PrimaryPassConfig is (
281 PrimaryPassConfig.HeavyIon))
282 else 1)
283 icf.addFlag("Tracking.BackTracking.maxSCTHoles", lambda prevFlags:
284 2 if (prevFlags.Tracking.doLowMu or
285 prevFlags.Tracking.PrimaryPassConfig is (
286 PrimaryPassConfig.HeavyIon))
287 else 1)
288 icf.addFlag("Tracking.BackTracking.maxDoubleHoles", lambda prevFlags:
289 1 if (prevFlags.Tracking.doLowMu or
290 prevFlags.Tracking.PrimaryPassConfig is (
291 PrimaryPassConfig.HeavyIon))
292 else 0)
293 icf.addFlag("Tracking.BackTracking.nHolesMax", 2)
294 icf.addFlag("Tracking.BackTracking.nHolesGapMax", 2)
295
296 # extension finder in back tracking
297 icf.addFlag("Tracking.BackTracking.rejectShortExtensions", lambda prevFlags:
298 not(prevFlags.Beam.Type is BeamType.Cosmics or
299 prevFlags.Tracking.doLowMu or
300 prevFlags.Tracking.PrimaryPassConfig is (
301 PrimaryPassConfig.HeavyIon)))
302 # cut in Si Extensions before fit
303 icf.addFlag("Tracking.BackTracking.SiExtensionCuts", lambda prevFlags:
304 not(prevFlags.Tracking.doLowMu or
305 prevFlags.Tracking.PrimaryPassConfig is (
306 PrimaryPassConfig.HeavyIon)))
307 icf.addFlag("Tracking.BackTracking.minRoIClusterEt", lambda prevFlags:
308 0. if (prevFlags.Tracking.doLowMu or
309 prevFlags.Tracking.PrimaryPassConfig in [
310 PrimaryPassConfig.HeavyIon, PrimaryPassConfig.VtxLumiHeavyIon] or
311 prevFlags.Beam.Type is BeamType.Cosmics or
312 prevFlags.Tracking.doMinBias)
313 else 6.*Units.GeV * prevFlags.BField.configuredSolenoidFieldScale)
314
315 # TRT standalone configuration
316 def TRTStandaloneMinPt(flags):
317 if flags.Tracking.doMinBias:
318 return 0.4 * Units.GeV * flags.BField.configuredSolenoidFieldScale
319 elif flags.Tracking.doLowMu or (
320 flags.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon):
321 return 1.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale
322 else:
323 return 2.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale
324 icf.addFlag("Tracking.TRTStandalone.minPt", TRTStandaloneMinPt)
325 icf.addFlag("Tracking.TRTStandalone.minTRTPrecFrac", 0.15)
326 icf.addFlag("Tracking.TRTStandalone.minTRT", 15)
327
328 # Disabled for data-taking up to 2024 included and MC campaigns up to MC23e included
329 icf.addFlag("Tracking.TRTStandalone.startAtOriginalPerigee",
330 lambda prevFlags: (
331 (not prevFlags.Input.isMC and prevFlags.Input.DataYear >= 2025) or
332 (prevFlags.Input.isMC and prevFlags.Input.MCCampaign >= Campaign.MC23g)))
333
334 # Turn on InDetRecStatistics
335 icf.addFlag("Tracking.doStats", False)
336 # Switch for track observer tool
337 icf.addFlag("Tracking.doTIDE_AmbiTrackMonitoring", False)
338 # use beam spot position in pixel NN
339 icf.addFlag("Tracking.useBeamSpotInfoNN", True)
340 # Threshold for NN cut in large D0 tracking for tracks in ambi
341 icf.addFlag("Tracking.nnCutLargeD0Threshold", -1.0)
342 # Use broad cluster errors for Pixel
343 icf.addFlag("Tracking.useBroadPixClusterErrors", False)
344 # Use broad cluster errors for SCT
345 icf.addFlag("Tracking.useBroadSCTClusterErrors", False)
346
347 # Tracking passes/configurations scheduled
348
349 # Turn running of track segment creation in pixel on and off
350 icf.addFlag("Tracking.doTrackSegmentsPixel",
351 lambda prevFlags: (
352 prevFlags.Detector.EnablePixel and (
353 prevFlags.Tracking.doMinBias or
354 prevFlags.Tracking.doLowMu or
355 prevFlags.Beam.Type is BeamType.Cosmics)))
356 # Turn running of track segment creation in SCT on and off
357 icf.addFlag("Tracking.doTrackSegmentsSCT",
358 lambda prevFlags: (
359 prevFlags.Detector.EnableSCT and (
360 prevFlags.Tracking.doLowMu or
361 prevFlags.Beam.Type is BeamType.Cosmics)))
362 # Turn running of track segment creation in TRT on and off
363 icf.addFlag("Tracking.doTrackSegmentsTRT",
364 lambda prevFlags: (
365 prevFlags.Detector.EnableTRT and
366 (prevFlags.Tracking.doLowMu or
367 prevFlags.Beam.Type is BeamType.Cosmics)))
368 # turn on / off TRT extensions
369 icf.addFlag("Tracking.doTRTExtension",
370 lambda prevFlags: prevFlags.Detector.EnableTRT)
371 # control to run TRT Segment finding (do it always after new tracking!)
372 icf.addFlag("Tracking.doTRTSegments",
373 lambda prevFlags: (prevFlags.Detector.EnableTRT and
374 (prevFlags.Tracking.doBackTracking or
375 prevFlags.Tracking.doTRTStandalone)))
376 # Turn running of backtracking on and off
377 icf.addFlag("Tracking.doBackTracking", lambda prevFlags: (
378 prevFlags.Detector.EnableTRT and
379 not(prevFlags.Beam.Type in [BeamType.SingleBeam, BeamType.Cosmics] or
380 prevFlags.Tracking.PrimaryPassConfig in [
381 PrimaryPassConfig.HeavyIon,
382 PrimaryPassConfig.VtxLumi,
383 PrimaryPassConfig.VtxLumiHeavyIon,
384 PrimaryPassConfig.VtxBeamSpot,
385 PrimaryPassConfig.HighPileup])))
386 # control TRT Standalone
387 icf.addFlag("Tracking.doTRTStandalone", lambda prevFlags: (
388 prevFlags.Detector.EnableTRT and
389 not(prevFlags.Tracking.PrimaryPassConfig in [
390 PrimaryPassConfig.HeavyIon,
391 PrimaryPassConfig.VtxLumi,
392 PrimaryPassConfig.VtxLumiHeavyIon,
393 PrimaryPassConfig.VtxBeamSpot,
394 PrimaryPassConfig.HighPileup])))
395
396 # Turn running of doForwardTracks pass on and off
397 icf.addFlag("Tracking.doForwardTracks", lambda prevFlags: (
398 prevFlags.Detector.EnablePixel and
399 not(prevFlags.Beam.Type in [BeamType.SingleBeam, BeamType.Cosmics] or
400 prevFlags.Tracking.PrimaryPassConfig in [
401 PrimaryPassConfig.HeavyIon,
402 PrimaryPassConfig.VtxLumi,
403 PrimaryPassConfig.VtxLumiHeavyIon,
404 PrimaryPassConfig.VtxBeamSpot,
405 PrimaryPassConfig.HighPileup] or
406 prevFlags.Tracking.doMinBias or
407 prevFlags.Tracking.doLowMu)))
408
409 def doTrackSegmentsDisappearing(flags):
410 if flags.GeoModel.Run <= LHCPeriod.Run3:
411 return not((flags.Tracking.PrimaryPassConfig is
412 PrimaryPassConfig.HeavyIon) or
413 flags.Beam.Type is BeamType.Cosmics)
414 else: # Disappearing tracks disabled for Run4
415 return False
416 icf.addFlag("Tracking.doTrackSegmentsDisappearing", doTrackSegmentsDisappearing)
417
418 # Turn running of doVeryLowPt third pass on and off
419 icf.addFlag("Tracking.doVeryLowPt", False)
420 # Turn running of doLargeD0 second pass down to 100 MeV on and off
421 icf.addFlag("Tracking.doLowPtLargeD0", False)
422 # Switch for running LowPtRoI settings
423 icf.addFlag("Tracking.doLowPtRoI", False)
424 # Switch for running UPC settings
425 icf.addFlag("Tracking.doUPC", lambda prevFlags: prevFlags.Reco.HIMode is HIMode.UPC)
426 # Switch for running HIP settings
427 icf.addFlag("Tracking.doHIP", lambda prevFlags: prevFlags.Reco.HIMode is HIMode.HIP)
428 # Switch for running MinBias settings (UPC or HIP turn this ON)
429 icf.addFlag("Tracking.doMinBias", lambda prevFlags:
430 prevFlags.Tracking.doUPC or prevFlags.Tracking.doHIP)
431 # Turn running of BeamGas second pass on and off
432 icf.addFlag("Tracking.doBeamGas",
433 lambda prevFlags: prevFlags.Beam.Type is BeamType.SingleBeam)
434 # Special reconstruction for BLS physics
435 icf.addFlag("Tracking.doBLS", False)
436
437 # Special pass using truth information for pattern recognition, runs in parallel to/instead of the first pass
438 icf.addFlag("Tracking.doPseudoTracking", False)
439 # Special pass using truth information for pattern recognition, removes assumed in-efficencies applied to PseudoTracking
440 icf.addFlag("Tracking.doIdealPseudoTracking", False)
441
442
443
444 # The following flags are only used in ITk configurations
445
446 # Turn running of ITk FastTracking on and off
447 icf.addFlag("Tracking.doITkFastTracking", True)
448
449 # Turn running of Conversion second tracking pass on and off
450 icf.addFlag("Tracking.doITkConversion", lambda prevFlags: (
451 not prevFlags.Tracking.doITkFastTracking and prevFlags.Detector.EnableCalo))
452
453 # Allows TrigFastTrackFinder to be run as an offline algorithm by replacing
454 # SiSPSeededTrackFinder
455 icf.addFlag("Tracking.useITkFTF", False)
456
457 # GNN for ITk flags
458 from InDetGNNTracking.InDetGNNTrackingConfigFlags import createGNNTrackingConfigFlags
459 icf.join(createGNNTrackingConfigFlags())
460
461 # enable reco steps
462 icf.addFlag("Tracking.recoChain", lambda prevFlags:
463 [TrackingComponent.AthenaChain] if prevFlags.GeoModel.Run <= LHCPeriod.Run3
464 else [TrackingComponent.ActsChain])
465
466
467
468 # Tracking pass flags
469
470 # InDet
471
472 from TrkConfig.TrackingPassFlags import (
473 createTrackingPassFlags, createHighPileupTrackingPassFlags,
474 createMinBiasTrackingPassFlags, createUPCTrackingPassFlags,
475 createHIPTrackingPassFlags, createR3LargeD0TrackingPassFlags,
476 createLowPtLargeD0TrackingPassFlags,
477 createLowPtTrackingPassFlags, createVeryLowPtTrackingPassFlags,
478 createLowPtRoITrackingPassFlags, createForwardTracksTrackingPassFlags,
479 createBeamGasTrackingPassFlags, createVtxLumiTrackingPassFlags, createVtxLumiHeavyIonTrackingPassFlags,
480 createVtxBeamSpotTrackingPassFlags, createCosmicsTrackingPassFlags,
481 createHeavyIonTrackingPassFlags, createPixelTrackingPassFlags,
482 createDisappearingTrackingPassFlags, createSCTTrackingPassFlags,
483 createTRTTrackingPassFlags, createTRTStandaloneTrackingPassFlags)
484
485 def primaryPass(flags):
486 if TrackingComponent.ActsChain in flags.Tracking.recoChain:
487 return PrimaryPassConfig.Acts
488 if flags.Beam.Type is BeamType.Cosmics:
489 return PrimaryPassConfig.Cosmics
490 elif flags.Reco.EnableHI:
491 if flags.Tracking.doUPC: #For UPC
492 return PrimaryPassConfig.UPC
493 elif flags.Tracking.doHIP: #For HIP
494 return PrimaryPassConfig.HIP
495 else: #For HI (default)
496 return PrimaryPassConfig.HeavyIon
497 elif flags.Tracking.doMinBias:
498 return PrimaryPassConfig.MinBias
499 else:
500 return PrimaryPassConfig.Default
501
502 icf.addFlag("Tracking.PrimaryPassConfig", lambda prevFlags:
503 primaryPass(prevFlags), type=PrimaryPassConfig)
504
505 # Set up for first tracking pass, updated for second passes
506 icf.addFlagsCategory("Tracking.MainPass",
507 createTrackingPassFlags, prefix=True)
508 icf.addFlagsCategory("Tracking.HighPileupPass",
509 createHighPileupTrackingPassFlags, prefix=True)
510 icf.addFlagsCategory("Tracking.UPCPass",
511 createUPCTrackingPassFlags, prefix=True)
512 icf.addFlagsCategory("Tracking.HIPPass",
513 createHIPTrackingPassFlags, prefix=True)
514 icf.addFlagsCategory("Tracking.MinBiasPass",
515 createMinBiasTrackingPassFlags, prefix=True)
516 icf.addFlagsCategory("Tracking.R3LargeD0Pass",
517 createR3LargeD0TrackingPassFlags, prefix=True)
518 icf.addFlagsCategory("Tracking.LowPtLargeD0Pass",
519 createLowPtLargeD0TrackingPassFlags, prefix=True)
520 icf.addFlagsCategory("Tracking.LowPtPass",
521 createLowPtTrackingPassFlags, prefix=True)
522 icf.addFlagsCategory("Tracking.VeryLowPtPass",
523 createVeryLowPtTrackingPassFlags, prefix=True)
524 icf.addFlagsCategory("Tracking.LowPtRoIPass",
525 createLowPtRoITrackingPassFlags, prefix=True)
526 icf.addFlagsCategory("Tracking.ForwardPass",
527 createForwardTracksTrackingPassFlags, prefix=True)
528 icf.addFlagsCategory("Tracking.BeamGasPass",
529 createBeamGasTrackingPassFlags, prefix=True)
530 icf.addFlagsCategory("Tracking.VtxLumiPass",
531 createVtxLumiTrackingPassFlags, prefix=True)
532 icf.addFlagsCategory("Tracking.VtxLumiHeavyIonPass",
533 createVtxLumiHeavyIonTrackingPassFlags, prefix=True)
534 icf.addFlagsCategory("Tracking.VtxBeamSpotPass",
535 createVtxBeamSpotTrackingPassFlags, prefix=True)
536 icf.addFlagsCategory("Tracking.CosmicsPass",
537 createCosmicsTrackingPassFlags, prefix=True)
538 icf.addFlagsCategory("Tracking.HeavyIonPass",
539 createHeavyIonTrackingPassFlags, prefix=True)
540 icf.addFlagsCategory("Tracking.PixelPass",
541 createPixelTrackingPassFlags, prefix=True)
542 icf.addFlagsCategory("Tracking.DisappearingPass",
543 createDisappearingTrackingPassFlags, prefix=True)
544 icf.addFlagsCategory("Tracking.SCTPass",
545 createSCTTrackingPassFlags, prefix=True)
546 icf.addFlagsCategory("Tracking.TRTPass",
547 createTRTTrackingPassFlags, prefix=True)
548 icf.addFlagsCategory("Tracking.TRTStandalonePass",
549 createTRTStandaloneTrackingPassFlags, prefix=True)
550
551 # ITk
552
553 from TrkConfig.TrackingPassFlags import (
554 createITkTrackingPassFlags, createITkLargeD0TrackingPassFlags,
555 createITkConversionTrackingPassFlags,
556 createITkFastTrackingPassFlags, createITkLargeD0FastTrackingPassFlags,
557 createITkFTFPassFlags, createITkFTFLargeD0PassFlags, createITkLowPtTrackingPassFlags,
558 createITkHeavyIonTrackingPassFlags)
559
560 def itkPrimaryPass(flags):
561 if flags.Tracking.useITkFTF:
562 return ITkPrimaryPassConfig.FTF
563 elif TrackingComponent.ActsChain in flags.Tracking.recoChain:
564 return ITkPrimaryPassConfig.Acts
565 elif TrackingComponent.ActsLegacyChain in flags.Tracking.recoChain:
566 return ITkPrimaryPassConfig.ActsLegacy
567 elif TrackingComponent.ActsHeavyIon in flags.Tracking.recoChain:
568 return ITkPrimaryPassConfig.ActsHeavyIon
569 elif flags.Tracking.doITkFastTracking:
570 return ITkPrimaryPassConfig.FastTracking
571 elif flags.Reco.EnableHI:
572 return ITkPrimaryPassConfig.HeavyIon
573 else:
574 return ITkPrimaryPassConfig.Default
575
576 icf.addFlag("Tracking.ITkPrimaryPassConfig", lambda prevFlags:
577 itkPrimaryPass(prevFlags), type=ITkPrimaryPassConfig)
578
579 icf.addFlagsCategory ("Tracking.ITkMainPass",
580 createITkTrackingPassFlags, prefix=True)
581 icf.addFlagsCategory ("Tracking.ITkLargeD0Pass",
582 createITkLargeD0TrackingPassFlags, prefix=True)
583 icf.addFlagsCategory ("Tracking.ITkConversionPass",
584 createITkConversionTrackingPassFlags, prefix=True)
585 icf.addFlagsCategory ("Tracking.ITkLowPtPass",
586 createITkLowPtTrackingPassFlags, prefix=True)
587 icf.addFlagsCategory ("Tracking.ITkFastPass",
588 createITkFastTrackingPassFlags, prefix=True)
589 icf.addFlagsCategory ("Tracking.ITkLargeD0FastPass",
590 createITkLargeD0FastTrackingPassFlags, prefix=True)
591 icf.addFlagsCategory ("Tracking.ITkFTFPass",
592 createITkFTFPassFlags, prefix=True)
593 icf.addFlagsCategory ("Tracking.ITkFTFLargeD0Pass",
594 createITkFTFLargeD0PassFlags, prefix=True)
595 icf.addFlagsCategory ("Tracking.ITkHeavyIonPass",
596 createITkHeavyIonTrackingPassFlags, prefix=True)
597
598 # Acts
599 from ActsConfig.ActsTrackingPassFlags import (
600 createActsTrackingPassFlags,
601 createActsLegacyTrackingPassFlags,
602 createActsLargeRadiusTrackingPassFlags,
603 createActsConversionTrackingPassFlags,
604 createActsLowPtTrackingPassFlags,
605 createActsHeavyIonTrackingPassFlags,
606 createEFValidateF100TrackingPassFlags,
607 createEFValidateF150TrackingPassFlags,
608 createACTSInnerDetectorTrackingPassFlags
609 )
610
611 icf.addFlagsCategory ("Tracking.ITkActsPass",
612 createActsTrackingPassFlags, prefix=True)
613 icf.addFlagsCategory ("Tracking.ActsPass",
614 createACTSInnerDetectorTrackingPassFlags, prefix=True)
615 icf.addFlagsCategory ("Tracking.ITkActsLegacyPass",
616 createActsLegacyTrackingPassFlags, prefix=True)
617 icf.addFlagsCategory ("Tracking.ITkActsLargeRadiusPass",
618 createActsLargeRadiusTrackingPassFlags, prefix=True)
619 icf.addFlagsCategory ('Tracking.ITkActsConversionPass',
620 createActsConversionTrackingPassFlags, prefix=True)
621 icf.addFlagsCategory ('Tracking.ITkActsLowPtPass',
622 createActsLowPtTrackingPassFlags, prefix=True)
623 icf.addFlagsCategory ("Tracking.ITkActsHeavyIonPass",
624 createActsHeavyIonTrackingPassFlags, prefix=True)
625
626 # Acts F100 validation pass
627 icf.addFlagsCategory ("Tracking.ITkActsValidateF100Pass",
628 createEFValidateF100TrackingPassFlags, prefix=True)
629
630 # Acts F150 validation pass
631 icf.addFlagsCategory ("Tracking.ITkActsValidateF150Pass",
632 createEFValidateF150TrackingPassFlags, prefix=True)
633
634 # GNN
635 from InDetGNNTracking.InDetGNNTrackingFlags import createGNNTrackingPassFlags
636 icf.addFlagsCategory ("Tracking.ITkGNNPass",
637 createGNNTrackingPassFlags, prefix=True)
638 # FPGA
639 from TrkConfig.InDetFPGATrackingFlags import createFPGATrackingPassFlags
640 icf.addFlagsCategory ("Tracking.ITkFPGAPass",
641 createFPGATrackingPassFlags, prefix=True)
642
643 # ACTS Derivation flags
644 icf.addFlag("Tracking.StoreSlimmedDataPreparation", False)
645
646
647
648 # Vertexing flags
649 from TrkConfig.VertexFindingFlags import createPriVertexingFlags
650 icf.addFlagsCategory("Tracking.PriVertex",
651 createPriVertexingFlags, prefix=True)
652
653 # Turn on the primary vertex reconstruction
654 icf.addFlag("Tracking.doVertexFinding",
655 lambda prevFlags: prevFlags.Beam.Type is not BeamType.Cosmics)
656 # Turn on the secondary vertex V0 finder
657 icf.addFlag("Tracking.doV0Finder", False)
658
659 icf.addFlag('Tracking.TruthClusterSplittingEff', 0.9)
660
661 # Dump GBTS training data: 0=no dump, 1=standard tracking, 2=LRT
662 icf.addFlag("Tracking.dumpGBTSTrainingData", 0)
663
664 return icf