ATLAS Offline Software
TrackingPassFlags.py
Go to the documentation of this file.
1 #Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 from __future__ import print_function
4 
5 import AthenaCommon.SystemOfUnits as Units
6 from AthenaConfiguration.Enums import BeamType, FlagEnum
7 from TrkConfig.TrkConfigFlags import PrimaryPassConfig
8 
9 class RoIStrategy(FlagEnum):
10  LeadTracks = 'LeadTracks'
11  Random = 'Random'
12  File = 'File'
13  TruthHS = 'TruthHS'
14 
15 
19  from AthenaConfiguration.AthConfigFlags import AthConfigFlags
20  icf = AthConfigFlags()
21 
22  icf.addFlag("extension", "" )
23 
24  icf.addFlag("usePrdAssociationTool", False)
25  icf.addFlag("isLowPt", False)
26  icf.addFlag("useTIDE_Ambi", lambda pcf: pcf.Tracking.doTIDE_Ambi)
27  icf.addFlag("useTRTExtension", lambda pcf: pcf.Tracking.doTRTExtension)
28  icf.addFlag("storeSeparateContainer", False)
29  icf.addFlag("doAmbiguityProcessorTrackFit", True)
30 
31  # --- first set kinematic defaults
32  icf.addFlag("minPT", lambda pcf: (pcf.BField.configuredSolenoidFieldScale *
33  (0.4 * Units.GeV if pcf.Tracking.doLowMu else
34  0.5 * Units.GeV)))
35  icf.addFlag("maxPT", 1000.0 * Units.TeV) # off!
36  icf.addFlag("minEta", -1) # off!
37  icf.addFlag("maxEta", 2.7)
38 
39 
40  # --- cluster cuts
41  icf.addFlag("minClusters", lambda pcf:
42  3 if (pcf.Detector.EnablePixel and not pcf.Detector.EnableSCT) else
43  6 if (pcf.Detector.EnableSCT and not pcf.Detector.EnablePixel) else
44  7 if pcf.Tracking.doLowMu else
45  8 )
46 
47  icf.addFlag("minSiNotShared", 6)
48 
49  icf.addFlag("maxShared", 1) # cut is now on number of shared modules
50  icf.addFlag("minPixel", 0)
51  icf.addFlag("maxHoles", lambda pcf: 3 if pcf.Tracking.doLowMu else 2)
52  icf.addFlag("maxPixelHoles", lambda pcf: 2 if pcf.Tracking.doLowMu else 1)
53  icf.addFlag("maxSctHoles", 2)
54  icf.addFlag("maxDoubleHoles", 1)
55 
56  icf.addFlag("maxPrimaryImpact", lambda pcf:
57  10.0 * Units.mm if (pcf.Tracking.doBLS or pcf.Tracking.doLowMu) else
58  5.0 * Units.mm)
59  icf.addFlag("maxEMImpact", 50.0 * Units.mm)
60  icf.addFlag("maxZImpact", lambda pcf:
61  320.0 * Units.mm if pcf.Tracking.doLowMu else
62  200.0 * Units.mm)
63 
64  # --- this is for the TRT-extension
65  icf.addFlag("minTRTonTrk", 9)
66  icf.addFlag("minTRTPrecFrac", 0.3)
67 
68  # --- general pattern cuts for NewTracking
69 
70  # default R cut for SP in SiSpacePointsSeedMaker
71  icf.addFlag("radMax", 600.0 * Units.mm)
72  icf.addFlag("roadWidth", lambda pcf: 20. if pcf.Tracking.doLowMu else 12.)
73  icf.addFlag("nHolesMax", lambda pcf: 3 if pcf.Tracking.doLowMu else 2)
74  icf.addFlag("nHolesGapMax", lambda pcf: 3 if pcf.Tracking.doLowMu else 2)
75  icf.addFlag("Xi2max", lambda pcf: 15. if pcf.Tracking.doLowMu else 9.)
76  icf.addFlag("Xi2maxNoAdd", lambda pcf: 35. if pcf.Tracking.doLowMu else 25.)
77  icf.addFlag("nWeightedClustersMin", 6)
78 
79  # --- seeding
80  icf.addFlag("useSeedFilter", True)
81  icf.addFlag("maxTracksPerSharedPRD", 0)
82  icf.addFlag("maxdImpactPPSSeeds", lambda pcf: 1.7 if pcf.Tracking.doLowMu else 2.)
83  icf.addFlag("maxdImpactSSSSeeds", lambda pcf:
84  1000. * Units.mm if pcf.Tracking.doLowMu else
85  10. * Units.mm if pcf.Tracking.doBLS else
86  5. * Units.mm)
87  icf.addFlag("maxSeedsPerSP_Pixels", lambda pcf: 5 if pcf.Tracking.doLowMu else 1)
88  icf.addFlag("maxSeedsPerSP_Strips", 5)
89  icf.addFlag("keepAllConfirmedPixelSeeds", lambda pcf: not pcf.Tracking.doLowMu)
90  icf.addFlag("keepAllConfirmedStripSeeds", False)
91 
92  # --- min pt cut for brem
93  icf.addFlag("doBremRecoverySi", lambda pcf: pcf.Tracking.doBremRecovery)
94  icf.addFlag("minPTBrem", lambda pcf: (
95  1. * Units.GeV * pcf.BField.configuredSolenoidFieldScale))
96 
97  # --- Z Boundary Seeding
98  icf.addFlag("doZBoundary", lambda pcf:
99  not (pcf.Beam.Type is BeamType.Cosmics or pcf.Tracking.doLowMu))
100 
101  icf.addFlag("usePixel" , lambda pcf : pcf.Detector.EnablePixel )
102  icf.addFlag("useTRT" , lambda pcf : pcf.Detector.EnableTRT )
103  icf.addFlag("useSCT" , lambda pcf : pcf.Detector.EnableSCT )
104  icf.addFlag("usePixelSeeding" , lambda pcf : pcf.Detector.EnablePixel )
105  icf.addFlag("useSCTSeeding" , lambda pcf : pcf.Detector.EnableSCT )
106 
107  # --- Pixel and TRT particle ID during particle creation
108  icf.addFlag("RunPixelPID", True)
109  icf.addFlag("RunTRTPID", True)
110 
111  # --- Flags for detailed information.
112  # Ignored for Primary Pass (always active);
113  # Enable for other passes with dedicated output container, if desired.
114  icf.addFlag("storeTrackSeeds", False)
115  icf.addFlag("storeSiSPSeededTracks", False)
116 
117  return icf
118 
119 
120 
122 
123  # Set ITk flags from scratch to avoid relying on InDet flags through lambda functions
124  from AthenaConfiguration.AthConfigFlags import AthConfigFlags
125  icf = AthConfigFlags()
126 
127  icf.addFlag("extension", "" )
128 
129  icf.addFlag("useITkPixel" , lambda pcf : pcf.Detector.EnableITkPixel )
130  icf.addFlag("useITkStrip" , lambda pcf : pcf.Detector.EnableITkStrip )
131  icf.addFlag("useITkPixelSeeding" , True )
132  icf.addFlag("useITkStripSeeding" , True )
133 
134  icf.addFlag("usePrdAssociationTool" , False)
135  icf.addFlag("storeSeparateContainer" , False)
136  icf.addFlag("doZBoundary" , True)
137  icf.addFlag("doAmbiguityProcessorTrackFit", True)
138 
139  # Maximum bin set to 9999 instead of four to prevent out of bounds lookups
140  icf.addFlag("etaBins" , [-1.0, 2.0, 2.6, 9999.0])
141  icf.addFlag("maxEta" , 4.0)
142  icf.addFlag("minPT" , lambda pcf :
143  [0.2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale]
144  if pcf.Tracking.doLowMu else
145  [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
146  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
147  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
148 
149  icf.addFlag("minPTSeed" , lambda pcf : (
150  pcf.BField.configuredSolenoidFieldScale *
151  (0.2 * Units.GeV if pcf.Tracking.doLowMu
152  else 0.9 * Units.GeV)))
153  icf.addFlag("maxPrimaryImpactSeed" , 2.0 * Units.mm)
154  icf.addFlag("maxZImpactSeed" , 200.0 * Units.mm)
155  icf.addFlag("useSeedFilter" , True)
156 
157  # --- cluster cuts
158  icf.addFlag("minClusters" , lambda pcf :
159  [6, 5, 4] if pcf.Tracking.doLowMu else [9, 8, 7])
160  icf.addFlag("minSiNotShared" , lambda pcf :
161  [6, 5, 4] if pcf.Tracking.doLowMu else [7, 6, 5])
162  icf.addFlag("maxShared" , [2])
163  icf.addFlag("minPixel" , [1])
164  icf.addFlag("maxHoles" , [2])
165  icf.addFlag("maxPixelHoles" , [2])
166  icf.addFlag("maxSctHoles" , [2])
167  icf.addFlag("maxDoubleHoles" , [1])
168  icf.addFlag("maxPrimaryImpact" , [2.0 * Units.mm, 2.0 * Units.mm, 10.0 * Units.mm])
169  icf.addFlag("maxZImpact" , [200.0 * Units.mm])
170 
171  # --- general pattern cuts for NewTracking
172  icf.addFlag("roadWidth" , 20.)
173  icf.addFlag("nHolesMax" , icf.maxHoles)
174  icf.addFlag("nHolesGapMax" , icf.maxHoles)
175 
176  icf.addFlag("Xi2max" , [9.0])
177  icf.addFlag("Xi2maxNoAdd" , [25.0])
178  icf.addFlag("nWeightedClustersMin" , [6])
179 
180  # --- seeding
181  icf.addFlag("maxdImpactSSSSeeds" , [20.0 * Units.mm])
182  icf.addFlag("radMax" , 1100. * Units.mm)
183 
184  # --- min pt cut for brem
185  icf.addFlag("doBremRecoverySi", lambda pcf: pcf.Tracking.doBremRecovery)
186  icf.addFlag("minPTBrem", lambda pcf: (
187  [1. * Units.GeV * pcf.BField.configuredSolenoidFieldScale]))
188 
189  # -- use of calo information
190  icf.addFlag("doCaloSeededBremSi", lambda pcf: pcf.Tracking.doCaloSeededBrem)
191  icf.addFlag("doCaloSeededAmbiSi", lambda pcf: pcf.Tracking.doCaloSeededAmbi)
192 
193  # --- handle ACTS workflow coexistence
194  # Athena components
195  icf.addFlag("doAthenaCluster", True)
196  icf.addFlag("doAthenaSpacePoint", True)
197  icf.addFlag("doAthenaSeed", True)
198  icf.addFlag("doAthenaTrack", True)
199  icf.addFlag("doAthenaAmbiguityResolution", True)
200  # Acts components
201  icf.addFlag("doActsCluster", False)
202  icf.addFlag("doActsSpacePoint", False)
203  icf.addFlag("doActsSeed", False)
204  icf.addFlag("doActsTrack", False)
205  icf.addFlag("doActsAmbiguityResolution", False)
206  # Athena -> Acts EDM converters
207  icf.addFlag("doAthenaToActsCluster", False)
208  icf.addFlag("doAthenaToActsSpacePoint", False)
209  icf.addFlag("doAthenaToActsTrack", False)
210  # Acts -> Athena EDM converters
211  icf.addFlag("doActsToAthenaCluster", False)
212  icf.addFlag("doActsToAthenaSpacePoint", False)
213  icf.addFlag("doActsToAthenaSeed", False)
214  icf.addFlag("doActsToAthenaTrack", False)
215  icf.addFlag("doActsToAthenaResolvedTrack", False)
216 
217  # --- flags for GNN tracking
218  icf.addFlag("doGNNTrack", False)
219 
220  # --- Flags for detailed information.
221  # Ignored for Primary Pass (always active);
222  # Enable for other passes with dedicated output container, if desired.
223  icf.addFlag("storeTrackSeeds", False)
224  icf.addFlag("storeSiSPSeededTracks", False)
225 
226  # --- flags for ACTS tracking
227  icf.addFlag("isSecondaryPass", False)
228  return icf
229 
230 
231 
232 
235  icf.extension = "HeavyIon"
236  icf.maxPrimaryImpact = [2.0 * Units.mm]
237  icf.minPT = lambda pcf : (
238  [0.4 *Units.GeV * pcf.BField.configuredSolenoidFieldScale])
239  icf.minPTSeed = lambda pcf : (
240  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
241  icf.minClusters = [6]
242  icf.minSiNotShared = [6]
243  icf.Xi2max = [6.]
244  icf.Xi2maxNoAdd = [9.]
245  icf.maxPixelHoles = [1]
246  icf.maxSctHoles = [1]
247  icf.maxDoubleHoles = [0]
248  icf.doBremRecoverySi = False
249  return icf
250 
251 
253 
255 
256  icf.minPT = lambda pcf : (
257  [1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
258  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
259  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
260  icf.maxZImpact = [150.0 * Units.mm]
261  icf.minPixel = [3]
262  icf.nHolesMax = [1]
263  icf.nHolesGapMax = [1]
264  icf.minPTSeed = lambda pcf: (
265  1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
266  icf.maxZImpactSeed = 150.0 * Units.mm
267  icf.useITkStripSeeding = False
268 
269  return icf
270 
271 
273 
275 
276  icf.addFlag("doHitDV" , False)
277  icf.addFlag("doDisappearingTrk" , False)
278  icf.useSeedFilter = False
279  icf.minPT = lambda pcf : (
280  [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
281  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
282  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
283  icf.minPTSeed = lambda pcf : (
284  0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
285 
286  return icf
287 
288 
289 
291 
293  icf.extension = "LargeD0"
294  icf.usePrdAssociationTool = True
295  icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
296 
297  icf.minPT = lambda pcf : (
298  [1000 * Units.MeV * pcf.BField.configuredSolenoidFieldScale])
299  icf.maxEta = 4.0
300  icf.etaBins = [-1.0, 4.0]
301  icf.maxPrimaryImpact = [300 * Units.mm]
302  icf.maxZImpact = [500 * Units.mm]
303  icf.minClusters = [8]
304  icf.minSiNotShared = [6]
305  icf.maxShared = [2]
306  icf.minPixel = [0]
307  icf.maxHoles = [1]
308  icf.maxPixelHoles = [1]
309  icf.maxSctHoles = [1]
310  icf.maxDoubleHoles = [0]
311 
312  icf.maxZImpactSeed = 500.0 * Units.mm
313  icf.maxPrimaryImpactSeed = 300.0 * Units.mm
314  icf.minPTSeed = lambda pcf : (
315  1000 * Units.MeV * pcf.BField.configuredSolenoidFieldScale)
316 
317  icf.radMax = 1100. * Units.mm
318  icf.nHolesMax = icf.maxHoles
319  icf.nHolesGapMax = icf.maxHoles
320  icf.roadWidth = 5
321 
322  # --- seeding
323  icf.useITkPixelSeeding = False
324  icf.maxdImpactSSSSeeds = [300.0 * Units.mm]
325 
326  icf.doBremRecoverySi = False
327 
328  icf.Xi2max = [9.0]
329  icf.Xi2maxNoAdd = [25.0]
330  icf.nWeightedClustersMin = [6]
331 
332  return icf
333 
335 
337 
338  icf.useITkPixelSeeding = False
339  icf.useITkStripSeeding = True
340 
341  icf.maxEta = 2.4
342  icf.etaBins = [-1.0, 2.4]
343  icf.minPT = lambda pcf : (
344  [5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
345  icf.minPTSeed = lambda pcf : (
346  5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
347  icf.nWeightedClustersMin = [8]
348  icf.maxPrimaryImpact = [150 * Units.mm]
349  icf.maxPrimaryImpactSeed = 150. * Units.mm
350  icf.maxdImpactSSSSeeds = [150.0 * Units.mm]
351  icf.maxZImpact = [200 * Units.mm]
352  icf.maxZImpactSeed = 200. * Units.mm
353  icf.radMax = 400. * Units.mm
354 
355  return icf
356 
357 
359 
361  icf.extension = "LowPt"
362  icf.minPT = lambda pcf : (
363  [0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
364  icf.minPTSeed = lambda pcf : (
365  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
366  icf.doBremRecoverySi = False
367 
368  return icf
369 
370 
373  icf.extension = "HighPileup"
374  icf.minPT = lambda pcf : (
375  0.900 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
376  icf.minClusters = 9
377  icf.maxPixelHoles = 0
378  icf.doBremRecoverySi = False
379 
380  return icf
381 
382 
385  icf.extension = "MinBias"
386  icf.minPT = lambda pcf: (
387  0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
388  icf.maxPrimaryImpact = 10. * Units.mm
389  icf.maxZImpact = 250. * Units.mm
390  icf.minClusters = 5
391  icf.maxdImpactSSSSeeds = 20.0 * Units.mm # apply cut on SSS seeds
392  icf.roadWidth = 20.
393  icf.doBremRecoverySi = False
394  icf.maxSeedsPerSP_Pixels = 5
395  icf.keepAllConfirmedPixelSeeds = False
396 
397  return icf
398 
399 
402  icf.extension = "UPC"
403  # --- min pt cut for brem
404  icf.minPTBrem = lambda pcf: (
405  0.75 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
406  # MinBias turns off Brem Recovery, turn it on here
407  icf.doBremRecoverySi = lambda pcf: pcf.Tracking.doBremRecovery
408  return icf
409 
410 
413  icf.extension = "HIP"
414  return icf
415 
416 
417 
420  icf.extension = "LowPtRoI"
421  icf.usePrdAssociationTool = True
422  icf.storeSeparateContainer = True
423  icf.maxPT = lambda pcf: (
424  0.850 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
425  icf.minPT = lambda pcf: (
426  0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
427  icf.minClusters = 5
428  icf.minSiNotShared = 4
429  icf.maxShared = 1 # cut is now on number of shared modules
430  icf.minPixel = 2
431  icf.maxHoles = 2
432  icf.maxPixelHoles = 1
433  icf.maxSctHoles = 2
434  icf.maxDoubleHoles = 1
435  icf.radMax = 600. * Units.mm
436  icf.nHolesMax = icf.maxHoles
437  icf.nHolesGapMax = icf.maxHoles # not as tight as 2*maxDoubleHoles
438  icf.doBremRecoverySi = False
439  # Add custom flags valid for this pass only
440  icf.addFlag("z0WindowRoI", 30.0) # mm
441  icf.addFlag("doRandomSpot", False)
442  icf.addFlag("RoIStrategy", RoIStrategy.LeadTracks)
443  icf.addFlag("inputLowPtRoIfile","")
444 
445  return icf
446 
447 
448 
451  icf.extension = "R3LargeD0"
452  icf.usePrdAssociationTool = True
453  icf.usePixelSeeding = False
454  icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
455  icf.maxPT = lambda pcf : (
456  1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale)
457  icf.minPT = lambda pcf : (
458  1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
459  icf.maxEta = 3
460  icf.maxPrimaryImpact = 300.0 * Units.mm
461  icf.maxEMImpact = 300 * Units.mm
462  icf.maxZImpact = 500 * Units.mm
463  icf.minClusters = 8
464  icf.minSiNotShared = 6
465  icf.maxShared = 2 # cut is now on number of shared modules
466  icf.minPixel = 0
467  icf.maxHoles = 2
468  icf.maxPixelHoles = 1
469  icf.maxSctHoles = 1
470  icf.maxDoubleHoles = 0
471  icf.radMax = 600. * Units.mm
472  icf.nHolesMax = icf.maxHoles
473  icf.nHolesGapMax = 1
474  icf.maxTracksPerSharedPRD = 2
475  icf.Xi2max = 9.0
476  icf.Xi2maxNoAdd = 25.0
477  icf.roadWidth = 5.
478  icf.nWeightedClustersMin = 8
479  icf.maxdImpactSSSSeeds = 300.0
480  icf.doZBoundary = True
481  icf.keepAllConfirmedStripSeeds = True
482  icf.maxSeedsPerSP_Strips = 1
483  icf.doBremRecoverySi = False
484 
485  icf.RunPixelPID = False
486  icf.RunTRTPID = False
487 
488  return icf
489 
490 
493  icf.extension = "LowPtLargeD0"
494  icf.usePrdAssociationTool = True
495  icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
496  icf.maxPT = lambda pcf: (
497  1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale)
498  icf.minPT = lambda pcf: (
499  100 * Units.MeV * pcf.BField.configuredSolenoidFieldScale)
500  icf.maxEta = 5
501  icf.maxPrimaryImpact = 300.0 * Units.mm
502  icf.maxZImpact = 1500.0 * Units.mm
503  icf.minClusters = 5
504  icf.minSiNotShared = 5
505  icf.maxShared = 2 # cut is now on number of shared modules
506  icf.minPixel = 0
507  icf.maxHoles = 2
508  icf.maxPixelHoles = 1
509  icf.maxSctHoles = 2
510  icf.maxDoubleHoles = 1
511  icf.radMax = 600. * Units.mm
512  icf.nHolesMax = icf.maxHoles
513  icf.nHolesGapMax = icf.maxHoles
514  icf.maxTracksPerSharedPRD = 2
515  icf.doBremRecoverySi = False
516 
517  icf.RunPixelPID = False
518  icf.RunTRTPID = False
519 
520  return icf
521 
522 
525  icf.extension = "LowPt"
526  icf.usePrdAssociationTool = True
527  icf.isLowPt = True
528  icf.maxPT = lambda pcf: (
529  pcf.BField.configuredSolenoidFieldScale *
530  (1e6 if pcf.Tracking.doMinBias else
531  pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
532  icf.minPT = lambda pcf: (
533  0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
534  icf.minClusters = 5
535  icf.minSiNotShared = 4
536  icf.maxShared = 1 # cut is now on number of shared modules
537  icf.minPixel = 2 # At least one pixel hit for low-pt (assoc. seeded on pixels!)
538  icf.maxHoles = 2
539  icf.maxPixelHoles = 1
540  icf.maxSctHoles = 2
541  icf.maxDoubleHoles = 1
542  icf.radMax = 600. * Units.mm
543  icf.nHolesMax = icf.maxHoles
544  icf.nHolesGapMax = icf.maxHoles # not as tight as 2*maxDoubleHoles
545  icf.maxPrimaryImpact = lambda pcf: (
546  100. * Units.mm if pcf.Tracking.doMinBias else 10. * Units.mm)
547  icf.doBremRecoverySi = False
548 
549  return icf
550 
551 
554  icf.extension = "Conversion"
555  icf.usePrdAssociationTool = True
556 
557  icf.etaBins = [-1.0,4.0]
558  icf.minPT = lambda pcf: (
559  [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
560  icf.maxPrimaryImpact = [10.0 * Units.mm]
561  icf.maxZImpact = [150.0 * Units.mm]
562  icf.minClusters = [6]
563  icf.minSiNotShared = [6]
564  icf.maxShared = [0]
565  icf.minPixel = [0]
566  icf.maxHoles = [0]
567  icf.maxPixelHoles = [1]
568  icf.maxSctHoles = [2]
569  icf.maxDoubleHoles = [1]
570 
571  icf.nHolesMax = icf.maxHoles
572  icf.nHolesGapMax = icf.maxHoles
573  icf.nWeightedClustersMin = [6]
574  icf.maxdImpactSSSSeeds = [20.0 * Units.mm]
575  icf.radMax = 1000. * Units.mm
576  icf.doZBoundary = False
577 
578  icf.Xi2max = [9.0]
579  icf.Xi2maxNoAdd = [25.0]
580  icf.doBremRecoverySi = True
581 
582  return icf
583 
584 
586  icf = createTrackingPassFlags() #TODO consider using createLowPtTrackingPassFlags as a base here
587  icf.extension = "VeryLowPt"
588  icf.usePrdAssociationTool = True
589  icf.isLowPt = True
590  icf.useTRTExtension = False
591  icf.maxPT = lambda pcf : (
592  pcf.BField.configuredSolenoidFieldScale *
593  (1e6 if pcf.Tracking.doMinBias else
594  pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
595  icf.minPT = lambda pcf : (
596  0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
597  icf.minClusters = 3
598  icf.minSiNotShared = 3
599  icf.maxShared = 1 # cut is now on number of shared modules
600  icf.minPixel = 3 # At least one pixel hit for low-pt (assoc. seeded on pixels!)
601  icf.maxHoles = 1
602  icf.maxPixelHoles = 1
603  icf.maxSctHoles = 1
604  icf.maxDoubleHoles = 0
605  icf.nHolesMax = 1
606  icf.nHolesGapMax = 1 # not as tight as 2*maxDoubleHoles
607  icf.radMax = 600. * Units.mm # restrivt to pixels
608  icf.doBremRecoverySi = False
609 
610  return icf
611 
612 
615  icf.extension = "Forward"
616  icf.usePrdAssociationTool = True
617  icf.useTIDE_Ambi = False
618  icf.useTRTExtension = False
619  icf.storeSeparateContainer = True
620  icf.minEta = 2.4 # restrict to minimal eta
621  icf.maxEta = 2.7
622  icf.minPT = lambda pcf: (
623  2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
624  icf.minClusters = 3
625  icf.minSiNotShared = 3
626  icf.maxShared = 1
627  icf.minPixel = 3
628  icf.maxHoles = 1
629  icf.maxPixelHoles = 1
630  icf.maxSctHoles = 1
631  icf.maxDoubleHoles = 0
632  icf.nHolesMax = icf.maxHoles
633  icf.nHolesGapMax = icf.maxHoles
634  icf.radMax = 600. * Units.mm
635  icf.useTRT = False # no TRT for forward tracks
636  icf.doBremRecoverySi = False
637  icf.doZBoundary = False
638 
639  icf.RunPixelPID = False
640  icf.RunTRTPID = False
641 
642  return icf
643 
644 
647  icf.extension = "BeamGas"
648  icf.usePrdAssociationTool = True
649  icf.minPT = lambda pcf: (
650  0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
651  icf.maxPrimaryImpact = 300. * Units.mm
652  icf.maxZImpact = 2000. * Units.mm
653  icf.minClusters = 6
654  icf.maxHoles = 3
655  icf.maxPixelHoles = 3
656  icf.maxSctHoles = 3
657  icf.maxDoubleHoles = 1
658  icf.nHolesMax = 3
659  icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles
660  icf.doBremRecoverySi = False
661 
662  return icf
663 
664 
667  icf.extension = "VtxLumi"
668  icf.minPT = lambda pcf: (
669  0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
670  icf.minClusters = 7
671  icf.maxPixelHoles = 1
672  icf.radMax = 600. * Units.mm
673  icf.nHolesMax = 2
674  icf.nHolesGapMax = 1
675  icf.useTRT = False
676  icf.doBremRecoverySi = False
677 
678  return icf
679 
680 
683  icf.extension = "VtxBeamSpot"
684  icf.minPT = lambda pcf: (
685  0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
686  icf.minClusters = 9
687  icf.maxPixelHoles = 0
688  icf.radMax = 320. * Units.mm
689  icf.nHolesMax = 2
690  icf.nHolesGapMax = 1
691  icf.useTRT = False
692  icf.doBremRecoverySi = False
693 
694  return icf
695 
696 
699  icf.extension = "Cosmics"
700  icf.minPT = lambda pcf: (
701  0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
702  icf.maxPrimaryImpact = 1000. * Units.mm
703  icf.maxZImpact = 10000. * Units.mm
704  icf.minClusters = 4
705  icf.minSiNotShared = 4
706  icf.maxHoles = 3
707  icf.maxPixelHoles = 3
708  icf.maxSctHoles = 3
709  icf.maxDoubleHoles = 1
710  icf.minTRTonTrk = 15
711  icf.roadWidth = 60.
712  icf.Xi2max = 60.
713  icf.Xi2maxNoAdd = 100.
714  icf.nWeightedClustersMin = 8
715  icf.nHolesMax = 3
716  icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles
717  icf.maxdImpactSSSSeeds = 20. * Units.mm
718  icf.doBremRecoverySi = False
719  icf.doZBoundary = False
720  icf.maxSeedsPerSP_Pixels = 5
721  icf.keepAllConfirmedPixelSeeds = False
722 
723  return icf
724 
725 
728  icf.extension = "HeavyIon"
729  icf.maxPrimaryImpact = 10. * Units.mm
730  icf.maxZImpact = 200. * Units.mm
731  icf.minClusters = 9
732  icf.minSiNotShared = 7
733  icf.maxShared = 2 # was 1, cut is now on number of shared modules
734 
735  icf.nHolesMax = 0
736  icf.nHolesGapMax = 0
737  icf.Xi2max = 6.
738  icf.Xi2maxNoAdd = 10.
739 
740  icf.minPT = lambda pcf: (
741  0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
742 
743  icf.maxdImpactSSSSeeds = 20. * Units.mm
744  icf.maxdImpactPPSSeeds = 1.7
745 
746  icf.maxHoles = 2
747  icf.maxPixelHoles = 1
748  icf.maxSctHoles = 1
749  icf.maxDoubleHoles = 0
750  icf.Xi2max = 9.
751  icf.Xi2maxNoAdd = 25.
752  icf.radMax = 600. * Units.mm # restrict to pixels + first SCT layer
753  icf.roadWidth = 20.
754  icf.useTRT = False
755  icf.doBremRecoverySi = False
756  icf.doZBoundary = False
757  icf.maxSeedsPerSP_Pixels = 5
758  icf.keepAllConfirmedPixelSeeds = False
759 
760  return icf
761 
762 
765  icf.extension = "Pixel"
766  icf.isLowPt = lambda pcf : pcf.Tracking.doMinBias
767 
768  def _minPt( pcf ):
769  if pcf.Beam.Type is BeamType.Cosmics:
770  return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
771  if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC:
772  return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
773  if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HIP:
774  return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
775  if pcf.Tracking.doMinBias:
776  return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
777  return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
778 
779  icf.minPT = _minPt
780  icf.minClusters = 3
781 
782  def _pick( default, hion, cosmics):
783  def _internal( pcf ):
784  if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon:
785  return hion
786  if pcf.Beam.Type is BeamType.Cosmics:
787  return cosmics
788  return default
789  return _internal
790 
791  icf.maxHoles = _pick( default = 1, hion = 0, cosmics = 3 )
792  icf.maxPixelHoles = _pick( default = 1, hion = 0, cosmics = 3 )
793  icf.maxSctHoles = 0
794  icf.maxDoubleHoles = 0
795  icf.minSiNotShared = 3
796  icf.maxShared = 0
797  icf.nHolesMax = _pick( default = 1, hion = 0, cosmics = 3 )
798  icf.nHolesGapMax = _pick( default = 1, hion = 0, cosmics = 3 )
799  icf.useSCT = False
800  icf.useSCTSeeding = False
801  icf.useTRT = False
802  icf.maxPrimaryImpact = lambda pcf: (
803  1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
804  10. * Units.mm if pcf.Tracking.doUPC else
805  5. * Units.mm)
806  icf.roadWidth = lambda pcf: (
807  60.0 if pcf.Beam.Type is BeamType.Cosmics else
808  12.0)
809  icf.maxZImpact = lambda pcf: (
810  10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
811  320. * Units.mm if pcf.Tracking.doLowMu else
812  250. * Units.mm if pcf.Tracking.doMinBias else
813  200. * Units.mm)
814  icf.Xi2max = lambda pcf: (
815  60. if pcf.Beam.Type is BeamType.Cosmics else
816  15. if pcf.Tracking.doLowMu else
817  9.)
818  icf.Xi2maxNoAdd = lambda pcf: (
819  100.0 if pcf.Beam.Type is BeamType.Cosmics else
820  35. if pcf.Tracking.doLowMu else
821  25.)
822  icf.nWeightedClustersMin = 6
823  icf.doBremRecoverySi = False
824 
825  icf.RunPixelPID = lambda pcf: (
826  pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC)
827  icf.RunTRTPID = False
828  return icf
829 
830 
833  icf.extension = "Disappearing"
834  icf.usePrdAssociationTool = True
835  icf.storeSeparateContainer = True
836  icf.minPT = lambda pcf: (
837  5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
838  icf.minClusters = 4
839  icf.maxHoles = 0
840  icf.maxPixelHoles = 0
841  icf.maxSctHoles = 0
842  icf.maxDoubleHoles = 0
843  icf.minSiNotShared = 3
844  icf.maxShared = 0
845  icf.nHolesMax = 0
846  icf.nHolesGapMax = 0
847  icf.useSCT = True
848  icf.useTRT = True
849  icf.useSCTSeeding = False
850  icf.maxEta = 2.2
851  icf.doBremRecoverySi = False
852  def MainPassFlags(pcf):
853  return pcf.Tracking.__getattr__(pcf.Tracking.PrimaryPassConfig.value+'Pass')
854  icf.maxPrimaryImpact = lambda pcf: MainPassFlags(pcf).maxPrimaryImpact
855  icf.maxZImpact = lambda pcf: MainPassFlags(pcf).maxZImpact
856  icf.roadWidth = lambda pcf: MainPassFlags(pcf).roadWidth
857  return icf
858 
859 
862  icf.extension = "SCT"
863  icf.minClusters = 7
864  icf.maxDoubleHoles = 1
865  icf.minSiNotShared = 5
866  icf.usePixel = False
867  icf.usePixelSeeding = False
868  icf.useTRT = False
869 
870  def _minpt( pcf ):
871  if pcf.Beam.Type is BeamType.Cosmics:
872  return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
873  if pcf.Tracking.doMinBias:
874  return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
875  return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
876 
877  icf.minPT = _minpt
878 
879  icf.maxPrimaryImpact = lambda pcf: (
880  1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
881  10. * Units.mm if pcf.Tracking.doLowMu else
882  5. * Units.mm)
883  icf.maxZImpact = lambda pcf: (
884  10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
885  320. * Units.mm if pcf.Tracking.doLowMu else
886  200.0 * Units.mm)
887 
888  icf.maxHoles = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
889  icf.nHolesMax = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
890  icf.nHolesGapMax = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
891  icf.maxPixelHoles = lambda pcf: 0 if pcf.Beam.Type is BeamType.Cosmics else 0
892  icf.maxSctHoles = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
893  icf.maxShared = 0
894  icf.roadWidth = lambda pcf: (
895  60. if pcf.Beam.Type is BeamType.Cosmics else
896  20. if pcf.Tracking.doLowMu else
897  12.)
898  icf.Xi2max = lambda pcf: (
899  60. if pcf.Beam.Type is BeamType.Cosmics else
900  15. if pcf.Tracking.doLowMu else
901  9.)
902  icf.Xi2maxNoAdd = lambda pcf: (
903  100.0 if pcf.Beam.Type is BeamType.Cosmics else
904  35. if pcf.Tracking.doLowMu else
905  25.)
906  icf.nWeightedClustersMin = lambda pcf: 4 if pcf.Beam.Type is BeamType.Cosmics else 6
907  icf.minClusters = lambda pcf: (
908  4 if pcf.Beam.Type is BeamType.Cosmics else
909  7 if pcf.Tracking.doLowMu else
910  8)
911  icf.minSiNotShared = lambda pcf: 4 if pcf.Beam.Type is BeamType.Cosmics else 5
912  icf.doBremRecoverySi = False
913 
914  icf.RunPixelPID = False
915  icf.RunTRTPID = False
916  return icf
917 
918 
921  icf.extension = "TRT"
922  icf.useTIDE_Ambi = False
923  icf.usePrdAssociationTool = True
924  icf.minPT = lambda pcf: (
925  0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
926  icf.doBremRecoverySi = False
927 
928  icf.RunPixelPID = False
929  icf.RunTRTPID = False
930  return icf
931 
932 
933 
936  icf.extension = "TRTStandalone"
937  icf.useTIDE_Ambi = False
938  icf.usePrdAssociationTool = True
939  icf.doBremRecoverySi = False
940 
941  return icf
942 
943 
944 
945 def printActiveConfig(flags):
946  print()
947  print("************************************************************************")
948 
949  print("******************** Tracking reconstruction Config ********************")
950  print(" Active Config is",flags.Tracking.ActiveConfig.extension)
951  flags.dump(pattern="Tracking.ActiveConfig.*", evaluate=True)
952  print("************************************************************************")
953  return
954 
955 
956 
958 
959 if __name__ == "__main__":
960 
961  from AthenaConfiguration.AllConfigFlags import initConfigFlags
962  flags = initConfigFlags()
963 
964  from AthenaConfiguration.TestDefaults import defaultTestFiles
965  flags.Input.Files=defaultTestFiles.RAW_RUN2
966 
967  from AthenaCommon.Logging import logging
968  l = logging.getLogger('TrackingPassFlags')
969  from AthenaCommon.Constants import INFO
970  l.setLevel(INFO)
971 
972  flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
973 
974  assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 5.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
975  assert flags.Tracking.HeavyIonPass.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.HeavyIonPass.maxPrimaryImpact)
976  flags.Tracking.doBLS = True
977  assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
978 
979  assert flags.Tracking.ActiveConfig.minPT == 0.5 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
980  flags.BField.configuredSolenoidFieldScale = 0.1
981  assert flags.Tracking.ActiveConfig.minPT == 0.05 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
982 
983  l.info("flags.Tracking.ActiveConfig.minPT %f", flags.Tracking.ActiveConfig.minPT * 1.0)
984  l.info("type(flags.Tracking.ActiveConfig.minPT) " + str(type(flags.Tracking.ActiveConfig.minPT)))
985 
986 
987 
988 
python.TrackingPassFlags.createVtxBeamSpotTrackingPassFlags
def createVtxBeamSpotTrackingPassFlags()
VtxBeamSpot mode ########################.
Definition: TrackingPassFlags.py:681
SystemOfUnits
python.TrackingPassFlags.createLowPtTrackingPassFlags
def createLowPtTrackingPassFlags()
LowPt mode ########################.
Definition: TrackingPassFlags.py:523
vtune_athena.format
format
Definition: vtune_athena.py:14
python.TrackingPassFlags.RoIStrategy
Definition: TrackingPassFlags.py:9
python.TrackingPassFlags.createVtxLumiTrackingPassFlags
def createVtxLumiTrackingPassFlags()
VtxLumi mode ########################.
Definition: TrackingPassFlags.py:665
python.TrackingPassFlags.createUPCTrackingPassFlags
def createUPCTrackingPassFlags()
UPC mode ########################.
Definition: TrackingPassFlags.py:400
python.TrackingPassFlags.createMinBiasTrackingPassFlags
def createMinBiasTrackingPassFlags()
MinBias mode ########################.
Definition: TrackingPassFlags.py:383
python.TrackingPassFlags.createPixelTrackingPassFlags
def createPixelTrackingPassFlags()
Pixel mode ###############################################.
Definition: TrackingPassFlags.py:763
python.TrackingPassFlags.createITkLargeD0FastTrackingPassFlags
def createITkLargeD0FastTrackingPassFlags()
Definition: TrackingPassFlags.py:334
python.TrackingPassFlags.createLowPtRoITrackingPassFlags
def createLowPtRoITrackingPassFlags()
LowPtRoI mode ########################.
Definition: TrackingPassFlags.py:418
python.TrackingPassFlags.createITkHeavyIonTrackingPassFlags
def createITkHeavyIonTrackingPassFlags()
Heavyion mode #######################.
Definition: TrackingPassFlags.py:233
python.TrackingPassFlags.createCosmicsTrackingPassFlags
def createCosmicsTrackingPassFlags()
Cosmics mode ########################.
Definition: TrackingPassFlags.py:697
python.TrackingPassFlags.createTRTStandaloneTrackingPassFlags
def createTRTStandaloneTrackingPassFlags()
TRT standalone tracklet cuts ##########.
Definition: TrackingPassFlags.py:934
python.TrackingPassFlags.printActiveConfig
def printActiveConfig(flags)
Definition: TrackingPassFlags.py:945
python.TrackingPassFlags.createTrackingPassFlags
def createTrackingPassFlags()
Definition: TrackingPassFlags.py:18
python.TrackingPassFlags.createBeamGasTrackingPassFlags
def createBeamGasTrackingPassFlags()
BeamGas mode ########################.
Definition: TrackingPassFlags.py:645
python.TrackingPassFlags.createDisappearingTrackingPassFlags
def createDisappearingTrackingPassFlags()
Disappearing mode ######################.
Definition: TrackingPassFlags.py:831
python.TrackingPassFlags.createITkFastTrackingPassFlags
def createITkFastTrackingPassFlags()
Definition: TrackingPassFlags.py:252
python.TrackingPassFlags.createForwardTracksTrackingPassFlags
def createForwardTracksTrackingPassFlags()
ForwardTracks mode ########################.
Definition: TrackingPassFlags.py:613
python.TrackingPassFlags.createVeryLowPtTrackingPassFlags
def createVeryLowPtTrackingPassFlags()
VeryLowPt mode ########################.
Definition: TrackingPassFlags.py:585
python.TrackingPassFlags.createHeavyIonTrackingPassFlags
def createHeavyIonTrackingPassFlags()
Heavyion mode #######################.
Definition: TrackingPassFlags.py:726
python.TrackingPassFlags.createITkConversionTrackingPassFlags
def createITkConversionTrackingPassFlags()
ITkConversion mode ########################.
Definition: TrackingPassFlags.py:552
Constants
some useful constants -------------------------------------------------—
python.TrackingPassFlags.createTRTTrackingPassFlags
def createTRTTrackingPassFlags()
TRT subdetector tracklet cuts ##########.
Definition: TrackingPassFlags.py:919
python.TrackingPassFlags.createHighPileupTrackingPassFlags
def createHighPileupTrackingPassFlags()
HighPileUP mode ####################.
Definition: TrackingPassFlags.py:371
python.TrackingPassFlags.createITkLowPtTrackingPassFlags
def createITkLowPtTrackingPassFlags()
ITk LowPt mode ####################.
Definition: TrackingPassFlags.py:358
python.TrackingPassFlags.createR3LargeD0TrackingPassFlags
def createR3LargeD0TrackingPassFlags()
R3LargeD0 mode ########################.
Definition: TrackingPassFlags.py:449
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
python.TrackingPassFlags.createSCTTrackingPassFlags
def createSCTTrackingPassFlags()
SCT mode ######################.
Definition: TrackingPassFlags.py:860
python.TrackingPassFlags.createITkFTFPassFlags
def createITkFTFPassFlags()
ITk with FTF standalone mode ####.
Definition: TrackingPassFlags.py:272
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
str
Definition: BTagTrackIpAccessor.cxx:11
python.TrackingPassFlags.createHIPTrackingPassFlags
def createHIPTrackingPassFlags()
HIP mode ########################.
Definition: TrackingPassFlags.py:411
python.TrackingPassFlags.createITkTrackingPassFlags
def createITkTrackingPassFlags()
ITk mode ####################.
Definition: TrackingPassFlags.py:121
python.TrackingPassFlags.createLowPtLargeD0TrackingPassFlags
def createLowPtLargeD0TrackingPassFlags()
LowPtLargeD0 mode ########################.
Definition: TrackingPassFlags.py:491
python.TrackingPassFlags.createITkLargeD0TrackingPassFlags
def createITkLargeD0TrackingPassFlags()
ITk LRT mode ####################.
Definition: TrackingPassFlags.py:290