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