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.maxZImpact = [150.0 * Units.mm]
589 icf.minClusters = [6]
590 icf.minSiNotShared = [6]
591 icf.maxShared = [0]
592 icf.minPixel = [0]
593 icf.maxHoles = [0]
594 icf.maxPixelHoles = [1]
595 icf.maxSctHoles = [2]
596 icf.maxDoubleHoles = [1]
597
598 icf.nHolesMax = icf.maxHoles
599 icf.nHolesGapMax = icf.maxHoles
600 icf.nWeightedClustersMin = [6]
601 icf.maxdImpactSSSSeeds = [20.0 * Units.mm]
602 icf.radMax = 1100. * Units.mm
603 icf.doZBoundary = False
604
605 icf.Xi2max = [9.0]
606 icf.Xi2maxNoAdd = [25.0]
607 icf.doBremRecoverySi = True
608
609 return icf
610
611
613 icf = createTrackingPassFlags() #TODO consider using createLowPtTrackingPassFlags as a base here
614 icf.extension = "VeryLowPt"
615 icf.usePrdAssociationTool = True
616 icf.isLowPt = True
617 icf.useTRTExtension = False
618 icf.maxPT = lambda pcf : (
619 pcf.BField.configuredSolenoidFieldScale *
620 (1e6 if pcf.Tracking.doMinBias else
621 pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
622 icf.minPT = lambda pcf : (
623 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
624 icf.minClusters = 3
625 icf.minSiNotShared = 3
626 icf.maxShared = 1 # cut is now on number of shared modules
627 icf.minPixel = 3 # At least one pixel hit for low-pt (assoc. seeded on pixels!)
628 icf.maxHoles = 1
629 icf.maxPixelHoles = 1
630 icf.maxSctHoles = 1
631 icf.maxDoubleHoles = 0
632 icf.nHolesMax = 1
633 icf.nHolesGapMax = 1 # not as tight as 2*maxDoubleHoles
634 icf.radMax = 600. * Units.mm # restrivt to pixels
635 icf.doBremRecoverySi = False
636
637 return icf
638
639
642 icf.extension = "Forward"
643 icf.usePrdAssociationTool = True
644 icf.useTIDE_Ambi = False
645 icf.useTRTExtension = False
646 icf.storeSeparateContainer = True
647 icf.minEta = 2.4 # restrict to minimal eta
648 icf.maxEta = 2.7
649 icf.minPT = lambda pcf: (
650 2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
651 icf.minClusters = 3
652 icf.minSiNotShared = 3
653 icf.maxShared = 1
654 icf.minPixel = 3
655 icf.maxHoles = 1
656 icf.maxPixelHoles = 1
657 icf.maxSctHoles = 1
658 icf.maxDoubleHoles = 0
659 icf.nHolesMax = icf.maxHoles
660 icf.nHolesGapMax = icf.maxHoles
661 icf.radMax = 600. * Units.mm
662 icf.doBremRecoverySi = False
663 icf.doZBoundary = False
664
665 icf.RunPixelPID = False
666 icf.RunTRTPID = False
667
668 return icf
669
670
673 icf.extension = "BeamGas"
674 icf.usePrdAssociationTool = True
675 icf.minPT = lambda pcf: (
676 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
677 icf.maxPrimaryImpact = 300. * Units.mm
678 icf.maxZImpact = 2000. * Units.mm
679 icf.minClusters = 6
680 icf.maxHoles = 3
681 icf.maxPixelHoles = 3
682 icf.maxSctHoles = 3
683 icf.maxDoubleHoles = 1
684 icf.nHolesMax = 3
685 icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles
686 icf.doBremRecoverySi = False
687
688 return icf
689
690
693 icf.extension = "VtxLumi"
694 icf.minPT = lambda pcf: (
695 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
696 icf.minClusters = 7
697 icf.maxPixelHoles = 1
698 icf.radMax = 600. * Units.mm
699 icf.nHolesMax = 2
700 icf.nHolesGapMax = 1
701 icf.doBremRecoverySi = False
702
703 return icf
704
705
708 icf.extension = "VtxLumiHeavyIon"
709 icf.minPT = lambda pcf: (
710 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
711 icf.maxPrimaryImpact = 10. * Units.mm
712 icf.maxZImpact = 250.0 * Units.mm
713 icf.minClusters = 7
714 icf.maxPixelHoles = 1
715 icf.radMax = 600. * Units.mm
716 icf.nHolesMax = 2
717 icf.nHolesGapMax = 1
718 icf.maxdImpactSSSSeeds = 20.
719 icf.roadWidth = 20.
720 icf.keepAllConfirmedPixelSeeds = False
721 icf.maxSeedsPerSP_Pixels = 5
722 icf.doBremRecoverySi = False
723
724 return icf
725
726
729 icf.extension = "VtxBeamSpot"
730 icf.minPT = lambda pcf: (
731 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
732 icf.minClusters = 9
733 icf.maxPixelHoles = 0
734 icf.radMax = 320. * Units.mm
735 icf.nHolesMax = 2
736 icf.nHolesGapMax = 1
737 icf.doBremRecoverySi = False
738
739 return icf
740
741
744 icf.extension = "Cosmics"
745 icf.minPT = lambda pcf: (
746 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
747 icf.maxPrimaryImpact = 1000. * Units.mm
748 icf.maxZImpact = 10000. * Units.mm
749 icf.minClusters = 4
750 icf.minSiNotShared = 4
751 icf.maxHoles = 3
752 icf.maxPixelHoles = 3
753 icf.maxSctHoles = 3
754 icf.maxDoubleHoles = 1
755 icf.minTRTonTrk = 15
756 icf.roadWidth = 60.
757 icf.Xi2max = 60.
758 icf.Xi2maxNoAdd = 100.
759 icf.nWeightedClustersMin = 8
760 icf.nHolesMax = 3
761 icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles
762 icf.maxdImpactSSSSeeds = 20. * Units.mm
763 icf.doBremRecoverySi = False
764 icf.doZBoundary = False
765 icf.maxSeedsPerSP_Pixels = 5
766 icf.keepAllConfirmedPixelSeeds = False
767
768 return icf
769
770
773 icf.extension = "HeavyIon"
774 icf.maxPrimaryImpact = 10. * Units.mm
775 icf.maxZImpact = 200. * Units.mm
776 icf.minClusters = 9
777 icf.minSiNotShared = 7
778 icf.maxShared = 2 # was 1, cut is now on number of shared modules
779
780 icf.nHolesMax = 0
781 icf.nHolesGapMax = 0
782 icf.Xi2max = 6.
783 icf.Xi2maxNoAdd = 10.
784
785 icf.minPT = lambda pcf: (
786 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
787
788 icf.maxdImpactSSSSeeds = 20. * Units.mm
789 icf.maxdImpactPPSSeeds = 1.7
790
791 icf.maxHoles = 2
792 icf.maxPixelHoles = 1
793 icf.maxSctHoles = 1
794 icf.maxDoubleHoles = 0
795 icf.Xi2max = 9.
796 icf.Xi2maxNoAdd = 25.
797 icf.radMax = 600. * Units.mm # restrict to pixels + first SCT layer
798 icf.roadWidth = 20.
799 icf.doBremRecoverySi = False
800 icf.doZBoundary = False
801 icf.maxSeedsPerSP_Pixels = 5
802 icf.keepAllConfirmedPixelSeeds = False
803
804 return icf
805
806
809 icf.extension = "Pixel"
810 icf.isLowPt = lambda pcf : pcf.Tracking.doMinBias
811
812 def _minPt( pcf ):
813 if pcf.Beam.Type is BeamType.Cosmics:
814 return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
815 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC:
816 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
817 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HIP:
818 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
819 if pcf.Tracking.doMinBias:
820 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
821 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
822
823 icf.minPT = _minPt
824 icf.minClusters = 3
825
826 def _pick( default, hion, cosmics):
827 def _internal( pcf ):
828 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon:
829 return hion
830 if pcf.Beam.Type is BeamType.Cosmics:
831 return cosmics
832 return default
833 return _internal
834
835 icf.maxHoles = _pick( default = 1, hion = 0, cosmics = 3 )
836 icf.maxPixelHoles = _pick( default = 1, hion = 0, cosmics = 3 )
837 icf.maxSctHoles = 0
838 icf.maxDoubleHoles = 0
839 icf.minSiNotShared = 3
840 icf.maxShared = 0
841 icf.nHolesMax = _pick( default = 1, hion = 0, cosmics = 3 )
842 icf.nHolesGapMax = _pick( default = 1, hion = 0, cosmics = 3 )
843 icf.useSCT = False
844 icf.useSCTSeeding = False
845 icf.maxPrimaryImpact = lambda pcf: (
846 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
847 10. * Units.mm if pcf.Tracking.doUPC else
848 5. * Units.mm)
849 icf.roadWidth = lambda pcf: (
850 60.0 if pcf.Beam.Type is BeamType.Cosmics else
851 12.0)
852 icf.maxZImpact = lambda pcf: (
853 10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
854 320. * Units.mm if pcf.Tracking.doLowMu else
855 250. * Units.mm if pcf.Tracking.doMinBias else
856 200. * Units.mm)
857 icf.Xi2max = lambda pcf: (
858 60. if pcf.Beam.Type is BeamType.Cosmics else
859 15. if pcf.Tracking.doLowMu else
860 9.)
861 icf.Xi2maxNoAdd = lambda pcf: (
862 100.0 if pcf.Beam.Type is BeamType.Cosmics else
863 35. if pcf.Tracking.doLowMu else
864 25.)
865 icf.nWeightedClustersMin = 6
866 icf.doBremRecoverySi = False
867
868 icf.RunPixelPID = lambda pcf: (
869 pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC)
870 icf.RunTRTPID = False
871 return icf
872
873
876 icf.extension = "Disappearing"
877 icf.usePrdAssociationTool = True
878 icf.storeSeparateContainer = True
879 icf.minPT = lambda pcf: (
880 5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
881 icf.minClusters = 4
882 icf.maxHoles = 0
883 icf.maxPixelHoles = 0
884 icf.maxSctHoles = 0
885 icf.maxDoubleHoles = 0
886 icf.minSiNotShared = 3
887 icf.maxShared = 0
888 icf.nHolesMax = 0
889 icf.nHolesGapMax = 0
890 icf.useSCT = True
891 icf.useSCTSeeding = False
892 icf.maxEta = 2.2
893 icf.doBremRecoverySi = False
894 def MainPassFlags(pcf):
895 return pcf.Tracking.__getattr__(pcf.Tracking.PrimaryPassConfig.value+'Pass')
896 icf.maxPrimaryImpact = lambda pcf: MainPassFlags(pcf).maxPrimaryImpact
897 icf.maxZImpact = lambda pcf: MainPassFlags(pcf).maxZImpact
898 icf.roadWidth = lambda pcf: MainPassFlags(pcf).roadWidth
899 return icf
900
901
904 icf.extension = "SCT"
905 icf.minClusters = 7
906 icf.maxDoubleHoles = 1
907 icf.minSiNotShared = 5
908 icf.usePixel = False
909 icf.usePixelSeeding = False
910
911 def _minpt( pcf ):
912 if pcf.Beam.Type is BeamType.Cosmics:
913 return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
914 if pcf.Tracking.doMinBias:
915 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
916 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
917
918 icf.minPT = _minpt
919
920 icf.maxPrimaryImpact = lambda pcf: (
921 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
922 10. * Units.mm if pcf.Tracking.doLowMu else
923 5. * Units.mm)
924 icf.maxZImpact = lambda pcf: (
925 10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
926 320. * Units.mm if pcf.Tracking.doLowMu else
927 200.0 * Units.mm)
928
929 icf.maxHoles = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
930 icf.nHolesMax = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
931 icf.nHolesGapMax = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
932 icf.maxPixelHoles = lambda pcf: 0 if pcf.Beam.Type is BeamType.Cosmics else 0
933 icf.maxSctHoles = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
934 icf.maxShared = 0
935 icf.roadWidth = lambda pcf: (
936 60. if pcf.Beam.Type is BeamType.Cosmics else
937 20. if pcf.Tracking.doLowMu else
938 12.)
939 icf.Xi2max = lambda pcf: (
940 60. if pcf.Beam.Type is BeamType.Cosmics else
941 15. if pcf.Tracking.doLowMu else
942 9.)
943 icf.Xi2maxNoAdd = lambda pcf: (
944 100.0 if pcf.Beam.Type is BeamType.Cosmics else
945 35. if pcf.Tracking.doLowMu else
946 25.)
947 icf.nWeightedClustersMin = lambda pcf: 4 if pcf.Beam.Type is BeamType.Cosmics else 6
948 icf.minClusters = lambda pcf: (
949 4 if pcf.Beam.Type is BeamType.Cosmics else
950 7 if pcf.Tracking.doLowMu else
951 8)
952 icf.minSiNotShared = lambda pcf: 4 if pcf.Beam.Type is BeamType.Cosmics else 5
953 icf.doBremRecoverySi = False
954
955 icf.RunPixelPID = False
956 icf.RunTRTPID = False
957 return icf
958
959
962 icf.extension = "TRT"
963 icf.useTIDE_Ambi = False
964 icf.usePrdAssociationTool = True
965 icf.minPT = lambda pcf: (
966 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
967 icf.doBremRecoverySi = False
968
969 icf.RunPixelPID = False
970 icf.RunTRTPID = False
971 return icf
972
973
974
977 icf.extension = "TRTStandalone"
978 icf.useTIDE_Ambi = False
979 icf.usePrdAssociationTool = True
980 icf.doBremRecoverySi = False
981
982 return icf
983
984
985
986
988 print()
989 print("************************************************************************")
990
991 print("******************** Tracking reconstruction Config ********************")
992 print(" Primary Config is",flags.Tracking[flags.Tracking.PrimaryPassConfig.value+"Pass"].extension)
993 flags.dump(pattern="Tracking."+flags.Tracking.PrimaryPassConfig.value+"Pass.*", evaluate=True)
994 print("************************************************************************")
995 return
996
997
999 print()
1000 print("************************************************************************")
1001
1002 print("******************** Tracking reconstruction Config ********************")
1003 print(" Active Config is",flags.Tracking.ActiveConfig.extension)
1004 flags.dump(pattern="Tracking.ActiveConfig.*", evaluate=True)
1005 print("************************************************************************")
1006 return
1007
1008
1009
1011
1012if __name__ == "__main__":
1013
1014 from AthenaConfiguration.AllConfigFlags import initConfigFlags
1015 flags = initConfigFlags()
1016
1017 from AthenaConfiguration.TestDefaults import defaultTestFiles
1018 flags.Input.Files=defaultTestFiles.RAW_RUN2
1019
1020 from AthenaCommon.Logging import logging
1021 l = logging.getLogger('TrackingPassFlags')
1022 from AthenaCommon.Constants import INFO
1023 l.setLevel(INFO)
1024
1025 flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
1026
1027 assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 5.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
1028 assert flags.Tracking.HeavyIonPass.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.HeavyIonPass.maxPrimaryImpact)
1029 flags.Tracking.doBLS = True
1030 assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
1031
1032 assert flags.Tracking.ActiveConfig.minPT == 0.5 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
1033 flags.BField.configuredSolenoidFieldScale = 0.1
1034 assert flags.Tracking.ActiveConfig.minPT == 0.05 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
1035
1036 l.info("flags.Tracking.ActiveConfig.minPT %f", flags.Tracking.ActiveConfig.minPT * 1.0)
1037 l.info("type(flags.Tracking.ActiveConfig.minPT) " + str(type(flags.Tracking.ActiveConfig.minPT)))
1038
1039
1040
1041
void print(char *figname, TCanvas *c1)
createITkTrackingPassFlags()
ITk mode ####################.
createR3LargeD0TrackingPassFlags()
R3LargeD0 mode ########################.
createVtxLumiHeavyIonTrackingPassFlags()
VtxLumiHeavyIon mode ################.
createForwardTracksTrackingPassFlags()
ForwardTracks mode ########################.
createITkLargeD0TrackingPassFlags()
ITk LRT mode ####################.
createLowPtTrackingPassFlags()
LowPt mode ########################.
createTRTStandaloneTrackingPassFlags()
TRT standalone tracklet cuts ##########.
createSCTTrackingPassFlags()
SCT mode ######################.
createHeavyIonTrackingPassFlags()
Heavyion mode #######################.
createLowPtRoITrackingPassFlags()
LowPtRoI mode ########################.
createUPCTrackingPassFlags()
UPC mode ########################.
createHIPTrackingPassFlags()
HIP mode ########################.
createDisappearingTrackingPassFlags()
Disappearing mode ######################.
createVtxLumiTrackingPassFlags()
VtxLumi mode ########################.
createITkConversionTrackingPassFlags()
ITkConversion mode ########################.
createPixelTrackingPassFlags()
Pixel mode ###############################################.
createBeamGasTrackingPassFlags()
BeamGas mode ########################.
createVtxBeamSpotTrackingPassFlags()
VtxBeamSpot mode ########################.
createITkHeavyIonTrackingPassFlags()
Heavyion mode #######################.
createVeryLowPtTrackingPassFlags()
VeryLowPt mode ########################.
createHighPileupTrackingPassFlags()
HighPileUP mode ####################.
createTRTTrackingPassFlags()
TRT subdetector tracklet cuts ##########.
createITkLowPtTrackingPassFlags()
ITk LowPt mode ####################.
createITkFTFPassFlags()
ITk with FTF standalone mode ####.
createCosmicsTrackingPassFlags()
Cosmics mode ########################.
createMinBiasTrackingPassFlags()
MinBias mode ########################.
createLowPtLargeD0TrackingPassFlags()
LowPtLargeD0 mode ########################.