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
119
121 icf.doAthenaCluster = True
122 icf.doAthenaSpacePoint = True
123 icf.doAthenaSeed = True
124 icf.doAthenaTrack = True
125 icf.doAthenaAmbiguityResolution = True
126
128 icf.doActsCluster = False
129 icf.doActsSpacePoint = False
130 icf.doActsSeed = False
131 icf.doActsTrack = False
132 icf.doActsAmbiguityResolution = False
133
135 from ActsConfig.ActsTrackingPassFlags import createActsLegacyTrackingPassFlags
136 icf = createActsLegacyTrackingPassFlags()
139
140 icf.extension = ""
141 icf.Xi2max = [9.]
142 icf.Xi2maxNoAdd = [25.]
143 return icf
144
146 from ActsConfig.ActsTrackingPassFlags import createActsTrackingPassFlags
147 icf = createActsTrackingPassFlags()
150 icf.extension = ""
151 icf.Xi2max = [9.]
152 icf.Xi2maxNoAdd = [25.]
153 return icf
154
155
156
158 from ActsConfig.ActsTrackingPassFlags import createActsHeavyIonTrackingPassFlags
159 icf = createActsHeavyIonTrackingPassFlags()
160 icf.extension = "HeavyIon"
161 return icf
162
163
164
167
168 icf.addFlag("doHitDV" , False)
169 icf.addFlag("doDisappearingTrk" , False)
170 icf.addFlag("useTrigTrackFollowing", False)
171 icf.addFlag("useTrigRoadPredictor", False)
172 icf.addFlag("useTracklets", False)
173 icf.useSeedFilter = False
174 icf.minPT = lambda pcf : (
175 [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
176 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
177 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
178 icf.minPTSeed = lambda pcf : (
179 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
180
181 return icf
182
185 icf.addFlag("doHitDV" , False)
186 icf.addFlag("doDisappearingTrk" , False)
187 icf.addFlag("useTrigTrackFollowing", False)
188 icf.addFlag("useTrigRoadPredictor", False)
189 icf.addFlag("useTracklets", False)
190 icf.useSeedFilter = False
191 icf.minPT = lambda pcf : (
192 [1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
193
194 icf.maxPrimaryImpact = [400.0 * Units.mm]
195 icf.maxPrimaryImpactSeed = 400.0 * Units.mm
196 icf.maxdImpactSSSSeeds = [400.0 * Units.mm]
197
198
199 return icf
200
201
202
204 from ActsConfig.ActsTrackingPassFlags import createActsLargeRadiusTrackingPassFlags
205 icf = createActsLargeRadiusTrackingPassFlags()
208 icf.extension = "LargeD0"
209 icf.Xi2max = [9.0]
210 icf.Xi2maxNoAdd = [25.0]
211 return icf
212
215 icf.useITkPixelSeeding = False
216 icf.useITkStripSeeding = True
217
218 icf.maxEta = 2.4
219 icf.etaBins = [-1.0, 2.4]
220 icf.minPT = lambda pcf : (
221 [5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
222 icf.minPTSeed = lambda pcf : (
223 5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
224 icf.nWeightedClustersMin = [8]
225 icf.maxPrimaryImpact = [150 * Units.mm]
226 icf.maxPrimaryImpactSeed = 150. * Units.mm
227 icf.maxdImpactSSSSeeds = [150.0 * Units.mm]
228 icf.maxZImpact = [200 * Units.mm]
229 icf.maxZImpactSeed = 200. * Units.mm
230 icf.radMax = 400. * Units.mm
231 return icf
232
233
235 from ActsConfig.ActsTrackingPassFlags import createActsLowPtTrackingPassFlags
236 icf = createActsLowPtTrackingPassFlags()
239 icf.extension = "LowPt"
240 return icf
241
242
245 icf.extension = "HighPileup"
246 icf.minPT = lambda pcf : (
247 0.900 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
248 icf.minClusters = 9
249 icf.maxPixelHoles = 0
250 icf.doBremRecoverySi = False
251
252 return icf
253
254
257 icf.extension = "MinBias"
258 icf.minPT = lambda pcf: (
259 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
260 icf.maxPrimaryImpact = 10. * Units.mm
261 icf.maxZImpact = 250. * Units.mm
262 icf.minClusters = 5
263 icf.maxdImpactSSSSeeds = 20.0 * Units.mm # apply cut on SSS seeds
264 icf.roadWidth = 20.
265 icf.doBremRecoverySi = False
266 icf.maxSeedsPerSP_Pixels = 5
267 icf.keepAllConfirmedPixelSeeds = False
268
269 return icf
270
271
274 icf.extension = "UPC"
275 # --- min pt cut for brem
276 icf.minPTBrem = lambda pcf: (
277 0.75 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
278 # MinBias turns off Brem Recovery, turn it on here
279 icf.doBremRecoverySi = lambda pcf: pcf.Tracking.doBremRecovery
280 return icf
281
282
285 icf.extension = "HIP"
286 return icf
287
288
289
292 icf.extension = "LowPtRoI"
293 icf.usePrdAssociationTool = True
294 icf.storeSeparateContainer = True
295 icf.maxPT = lambda pcf: (
296 0.850 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
297 icf.minPT = lambda pcf: (
298 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
299 icf.minClusters = 5
300 icf.minSiNotShared = 4
301 icf.maxShared = 1 # cut is now on number of shared modules
302 icf.minPixel = 2
303 icf.maxHoles = 2
304 icf.maxPixelHoles = 1
305 icf.maxSctHoles = 2
306 icf.maxDoubleHoles = 1
307 icf.radMax = 600. * Units.mm
308 icf.nHolesMax = icf.maxHoles
309 icf.nHolesGapMax = icf.maxHoles # not as tight as 2*maxDoubleHoles
310 icf.doBremRecoverySi = False
311 # Add custom flags valid for this pass only
312 icf.addFlag("z0WindowRoI", 30.0) # mm
313 icf.addFlag("doRandomSpot", False)
314 icf.addFlag("RoIStrategy", RoIStrategy.LeadTracks)
315 icf.addFlag("inputLowPtRoIfile","")
316
317 return icf
318
319
320
323 icf.extension = "R3LargeD0"
324 icf.usePrdAssociationTool = True
325 icf.usePixelSeeding = False
326 icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
327 icf.maxPT = lambda pcf : (
328 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale)
329 icf.minPT = lambda pcf : (
330 1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
331 icf.maxEta = 3
332 icf.maxPrimaryImpact = 300.0 * Units.mm
333 icf.maxEMImpact = 300 * Units.mm
334 icf.maxZImpact = 500 * Units.mm
335 icf.minClusters = 8
336 icf.minSiNotShared = 6
337 icf.maxShared = 2 # cut is now on number of shared modules
338 icf.minPixel = 0
339 icf.maxHoles = 2
340 icf.maxPixelHoles = 1
341 icf.maxSctHoles = 1
342 icf.maxDoubleHoles = 0
343 icf.radMax = 600. * Units.mm
344 icf.nHolesMax = icf.maxHoles
345 icf.nHolesGapMax = 1
346 icf.maxTracksPerSharedPRD = 2
347 icf.Xi2max = 9.0
348 icf.Xi2maxNoAdd = 25.0
349 icf.roadWidth = 5.
350 icf.nWeightedClustersMin = 8
351 icf.maxdImpactSSSSeeds = 300.0
352 icf.doZBoundary = True
353 icf.keepAllConfirmedStripSeeds = True
354 icf.maxSeedsPerSP_Strips = 1
355 icf.doBremRecoverySi = False
356
357 icf.RunPixelPID = False
358 icf.RunTRTPID = False
359
360 return icf
361
362
365 icf.extension = "LowPtLargeD0"
366 icf.usePrdAssociationTool = True
367 icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
368 icf.maxPT = lambda pcf: (
369 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale)
370 icf.minPT = lambda pcf: (
371 100 * Units.MeV * pcf.BField.configuredSolenoidFieldScale)
372 icf.maxEta = 5
373 icf.maxPrimaryImpact = 300.0 * Units.mm
374 icf.maxZImpact = 1500.0 * Units.mm
375 icf.minClusters = 5
376 icf.minSiNotShared = 5
377 icf.maxShared = 2 # cut is now on number of shared modules
378 icf.minPixel = 0
379 icf.maxHoles = 2
380 icf.maxPixelHoles = 1
381 icf.maxSctHoles = 2
382 icf.maxDoubleHoles = 1
383 icf.radMax = 600. * Units.mm
384 icf.nHolesMax = icf.maxHoles
385 icf.nHolesGapMax = icf.maxHoles
386 icf.maxTracksPerSharedPRD = 2
387 icf.doBremRecoverySi = False
388
389 icf.RunPixelPID = False
390 icf.RunTRTPID = False
391
392 return icf
393
394
397 icf.extension = "LowPt"
398 icf.usePrdAssociationTool = True
399 icf.isLowPt = True
400 icf.maxPT = lambda pcf: (
401 pcf.BField.configuredSolenoidFieldScale *
402 (1e6 if pcf.Tracking.doMinBias else
403 pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
404 icf.minPT = lambda pcf: (
405 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
406 icf.minClusters = 5
407 icf.minSiNotShared = 4
408 icf.maxShared = 1 # cut is now on number of shared modules
409 icf.minPixel = 2 # At least one pixel hit for low-pt (assoc. seeded on pixels!)
410 icf.maxHoles = 2
411 icf.maxPixelHoles = 1
412 icf.maxSctHoles = 2
413 icf.maxDoubleHoles = 1
414 icf.radMax = 600. * Units.mm
415 icf.nHolesMax = icf.maxHoles
416 icf.nHolesGapMax = icf.maxHoles # not as tight as 2*maxDoubleHoles
417 icf.maxPrimaryImpact = lambda pcf: (
418 100. * Units.mm if pcf.Tracking.doMinBias else 10. * Units.mm)
419 icf.doBremRecoverySi = False
420
421 return icf
422
423
425 from ActsConfig.ActsTrackingPassFlags import createActsConversionTrackingPassFlags
426 icf = createActsConversionTrackingPassFlags()
429 icf.extension = "Conversion"
430 icf.Xi2max = [9.0]
431 icf.Xi2maxNoAdd = [25.0]
432 return icf
433
434
436 icf = createTrackingPassFlags() #TODO consider using createLowPtTrackingPassFlags as a base here
437 icf.extension = "VeryLowPt"
438 icf.usePrdAssociationTool = True
439 icf.isLowPt = True
440 icf.useTRTExtension = False
441 icf.maxPT = lambda pcf : (
442 pcf.BField.configuredSolenoidFieldScale *
443 (1e6 if pcf.Tracking.doMinBias else
444 pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
445 icf.minPT = lambda pcf : (
446 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
447 icf.minClusters = 3
448 icf.minSiNotShared = 3
449 icf.maxShared = 1 # cut is now on number of shared modules
450 icf.minPixel = 3 # At least one pixel hit for low-pt (assoc. seeded on pixels!)
451 icf.maxHoles = 1
452 icf.maxPixelHoles = 1
453 icf.maxSctHoles = 1
454 icf.maxDoubleHoles = 0
455 icf.nHolesMax = 1
456 icf.nHolesGapMax = 1 # not as tight as 2*maxDoubleHoles
457 icf.radMax = 600. * Units.mm # restrivt to pixels
458 icf.doBremRecoverySi = False
459
460 return icf
461
462
465 icf.extension = "Forward"
466 icf.usePrdAssociationTool = True
467 icf.useTIDE_Ambi = False
468 icf.useTRTExtension = False
469 icf.storeSeparateContainer = True
470 icf.minEta = 2.4 # restrict to minimal eta
471 icf.maxEta = 2.7
472 icf.minPT = lambda pcf: (
473 2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
474 icf.minClusters = 3
475 icf.minSiNotShared = 3
476 icf.maxShared = 1
477 icf.minPixel = 3
478 icf.maxHoles = 1
479 icf.maxPixelHoles = 1
480 icf.maxSctHoles = 1
481 icf.maxDoubleHoles = 0
482 icf.nHolesMax = icf.maxHoles
483 icf.nHolesGapMax = icf.maxHoles
484 icf.radMax = 600. * Units.mm
485 icf.doBremRecoverySi = False
486 icf.doZBoundary = False
487
488 icf.RunPixelPID = False
489 icf.RunTRTPID = False
490
491 return icf
492
493
496 icf.extension = "BeamGas"
497 icf.usePrdAssociationTool = True
498 icf.minPT = lambda pcf: (
499 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
500 icf.maxPrimaryImpact = 300. * Units.mm
501 icf.maxZImpact = 2000. * Units.mm
502 icf.minClusters = 6
503 icf.maxHoles = 3
504 icf.maxPixelHoles = 3
505 icf.maxSctHoles = 3
506 icf.maxDoubleHoles = 1
507 icf.nHolesMax = 3
508 icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles
509 icf.doBremRecoverySi = False
510
511 return icf
512
513
516 icf.extension = "VtxLumi"
517 icf.minPT = lambda pcf: (
518 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
519 icf.minClusters = 7
520 icf.maxPixelHoles = 1
521 icf.radMax = 600. * Units.mm
522 icf.nHolesMax = 2
523 icf.nHolesGapMax = 1
524 icf.doBremRecoverySi = False
525
526 return icf
527
528
531 icf.extension = "VtxLumiHeavyIon"
532 icf.minPT = lambda pcf: (
533 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
534 icf.maxPrimaryImpact = 10. * Units.mm
535 icf.maxZImpact = 250.0 * Units.mm
536 icf.minClusters = 7
537 icf.maxPixelHoles = 1
538 icf.radMax = 600. * Units.mm
539 icf.nHolesMax = 2
540 icf.nHolesGapMax = 1
541 icf.maxdImpactSSSSeeds = 20.
542 icf.roadWidth = 20.
543 icf.keepAllConfirmedPixelSeeds = False
544 icf.maxSeedsPerSP_Pixels = 5
545 icf.doBremRecoverySi = False
546
547 return icf
548
549
552 icf.extension = "VtxBeamSpot"
553 icf.minPT = lambda pcf: (
554 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
555 icf.minClusters = 9
556 icf.maxPixelHoles = 0
557 icf.radMax = 320. * Units.mm
558 icf.nHolesMax = 2
559 icf.nHolesGapMax = 1
560 icf.doBremRecoverySi = False
561
562 return icf
563
564
567 icf.extension = "Cosmics"
568 icf.minPT = lambda pcf: (
569 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
570 icf.maxPrimaryImpact = 1000. * Units.mm
571 icf.maxZImpact = 10000. * Units.mm
572 icf.minClusters = 4
573 icf.minSiNotShared = 4
574 icf.maxHoles = 3
575 icf.maxPixelHoles = 3
576 icf.maxSctHoles = 3
577 icf.maxDoubleHoles = 1
578 icf.minTRTonTrk = 15
579 icf.roadWidth = 60.
580 icf.Xi2max = 60.
581 icf.Xi2maxNoAdd = 100.
582 icf.nWeightedClustersMin = 8
583 icf.nHolesMax = 3
584 icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles
585 icf.maxdImpactSSSSeeds = 20. * Units.mm
586 icf.doBremRecoverySi = False
587 icf.doZBoundary = False
588 icf.maxSeedsPerSP_Pixels = 5
589 icf.keepAllConfirmedPixelSeeds = False
590
591 return icf
592
593
596 icf.extension = "HeavyIon"
597 icf.maxPrimaryImpact = 10. * Units.mm
598 icf.maxZImpact = 200. * Units.mm
599 icf.minClusters = 9
600 icf.minSiNotShared = 7
601 icf.maxShared = 2 # was 1, cut is now on number of shared modules
602
603 icf.nHolesMax = 0
604 icf.nHolesGapMax = 0
605 icf.Xi2max = 6.
606 icf.Xi2maxNoAdd = 10.
607
608 icf.minPT = lambda pcf: (
609 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
610
611 icf.maxdImpactSSSSeeds = 20. * Units.mm
612 icf.maxdImpactPPSSeeds = 1.7
613
614 icf.maxHoles = 2
615 icf.maxPixelHoles = 1
616 icf.maxSctHoles = 1
617 icf.maxDoubleHoles = 0
618 icf.Xi2max = 9.
619 icf.Xi2maxNoAdd = 25.
620 icf.radMax = 600. * Units.mm # restrict to pixels + first SCT layer
621 icf.roadWidth = 20.
622 icf.doBremRecoverySi = False
623 icf.doZBoundary = False
624 icf.maxSeedsPerSP_Pixels = 5
625 icf.keepAllConfirmedPixelSeeds = False
626
627 return icf
628
629
632 icf.extension = "Pixel"
633 icf.isLowPt = lambda pcf : pcf.Tracking.doMinBias
634
635 def _minPt( pcf ):
636 if pcf.Beam.Type is BeamType.Cosmics:
637 return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
638 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC:
639 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
640 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HIP:
641 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
642 if pcf.Tracking.doMinBias:
643 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
644 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
645
646 icf.minPT = _minPt
647 icf.minClusters = 3
648
649 def _pick( default, hion, cosmics):
650 def _internal( pcf ):
651 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon:
652 return hion
653 if pcf.Beam.Type is BeamType.Cosmics:
654 return cosmics
655 return default
656 return _internal
657
658 icf.maxHoles = _pick( default = 1, hion = 0, cosmics = 3 )
659 icf.maxPixelHoles = _pick( default = 1, hion = 0, cosmics = 3 )
660 icf.maxSctHoles = 0
661 icf.maxDoubleHoles = 0
662 icf.minSiNotShared = 3
663 icf.maxShared = 0
664 icf.nHolesMax = _pick( default = 1, hion = 0, cosmics = 3 )
665 icf.nHolesGapMax = _pick( default = 1, hion = 0, cosmics = 3 )
666 icf.useSCT = False
667 icf.useSCTSeeding = False
668 icf.maxPrimaryImpact = lambda pcf: (
669 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
670 10. * Units.mm if pcf.Tracking.doUPC else
671 5. * Units.mm)
672 icf.roadWidth = lambda pcf: (
673 60.0 if pcf.Beam.Type is BeamType.Cosmics else
674 12.0)
675 icf.maxZImpact = lambda pcf: (
676 10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
677 320. * Units.mm if pcf.Tracking.doLowMu else
678 250. * Units.mm if pcf.Tracking.doMinBias else
679 200. * Units.mm)
680 icf.Xi2max = lambda pcf: (
681 60. if pcf.Beam.Type is BeamType.Cosmics else
682 15. if pcf.Tracking.doLowMu else
683 9.)
684 icf.Xi2maxNoAdd = lambda pcf: (
685 100.0 if pcf.Beam.Type is BeamType.Cosmics else
686 35. if pcf.Tracking.doLowMu else
687 25.)
688 icf.nWeightedClustersMin = 6
689 icf.doBremRecoverySi = False
690
691 icf.RunPixelPID = lambda pcf: (
692 pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC)
693 icf.RunTRTPID = False
694 return icf
695
696
699 icf.extension = "Disappearing"
700 icf.usePrdAssociationTool = True
701 icf.storeSeparateContainer = True
702 icf.minPT = lambda pcf: (
703 5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
704 icf.minClusters = 4
705 icf.maxHoles = 0
706 icf.maxPixelHoles = 0
707 icf.maxSctHoles = 0
708 icf.maxDoubleHoles = 0
709 icf.minSiNotShared = 3
710 icf.maxShared = 0
711 icf.nHolesMax = 0
712 icf.nHolesGapMax = 0
713 icf.useSCT = True
714 icf.useSCTSeeding = False
715 icf.maxEta = 2.2
716 icf.doBremRecoverySi = False
717 def MainPassFlags(pcf):
718 return pcf.Tracking.__getattr__(pcf.Tracking.PrimaryPassConfig.value+'Pass')
719 icf.maxPrimaryImpact = lambda pcf: MainPassFlags(pcf).maxPrimaryImpact
720 icf.maxZImpact = lambda pcf: MainPassFlags(pcf).maxZImpact
721 icf.roadWidth = lambda pcf: MainPassFlags(pcf).roadWidth
722 return icf
723
724
727 icf.extension = "SCT"
728 icf.minClusters = 7
729 icf.maxDoubleHoles = 1
730 icf.minSiNotShared = 5
731 icf.usePixel = False
732 icf.usePixelSeeding = False
733
734 def _minpt( pcf ):
735 if pcf.Beam.Type is BeamType.Cosmics:
736 return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
737 if pcf.Tracking.doMinBias:
738 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
739 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
740
741 icf.minPT = _minpt
742
743 icf.maxPrimaryImpact = lambda pcf: (
744 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
745 10. * Units.mm if pcf.Tracking.doLowMu else
746 5. * Units.mm)
747 icf.maxZImpact = lambda pcf: (
748 10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
749 320. * Units.mm if pcf.Tracking.doLowMu else
750 200.0 * Units.mm)
751
752 icf.maxHoles = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
753 icf.nHolesMax = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
754 icf.nHolesGapMax = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
755 icf.maxPixelHoles = lambda pcf: 0 if pcf.Beam.Type is BeamType.Cosmics else 0
756 icf.maxSctHoles = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
757 icf.maxShared = 0
758 icf.roadWidth = lambda pcf: (
759 60. if pcf.Beam.Type is BeamType.Cosmics else
760 20. if pcf.Tracking.doLowMu else
761 12.)
762 icf.Xi2max = lambda pcf: (
763 60. if pcf.Beam.Type is BeamType.Cosmics else
764 15. if pcf.Tracking.doLowMu else
765 9.)
766 icf.Xi2maxNoAdd = lambda pcf: (
767 100.0 if pcf.Beam.Type is BeamType.Cosmics else
768 35. if pcf.Tracking.doLowMu else
769 25.)
770 icf.nWeightedClustersMin = lambda pcf: 4 if pcf.Beam.Type is BeamType.Cosmics else 6
771 icf.minClusters = lambda pcf: (
772 4 if pcf.Beam.Type is BeamType.Cosmics else
773 7 if pcf.Tracking.doLowMu else
774 8)
775 icf.minSiNotShared = lambda pcf: 4 if pcf.Beam.Type is BeamType.Cosmics else 5
776 icf.doBremRecoverySi = False
777
778 icf.RunPixelPID = False
779 icf.RunTRTPID = False
780 return icf
781
782
785 icf.extension = "TRT"
786 icf.useTIDE_Ambi = False
787 icf.usePrdAssociationTool = True
788 icf.minPT = lambda pcf: (
789 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
790 icf.doBremRecoverySi = False
791
792 icf.RunPixelPID = False
793 icf.RunTRTPID = False
794 return icf
795
796
797
800 icf.extension = "TRTStandalone"
801 icf.useTIDE_Ambi = False
802 icf.usePrdAssociationTool = True
803 icf.doBremRecoverySi = False
804
805 return icf
806
807
808
809
811 print()
812 print("************************************************************************")
813
814 print("******************** Tracking reconstruction Config ********************")
815 print(" Primary Config is",flags.Tracking[flags.Tracking.PrimaryPassConfig.value+"Pass"].extension)
816 flags.dump(pattern="Tracking."+flags.Tracking.PrimaryPassConfig.value+"Pass.*", evaluate=True)
817 print("************************************************************************")
818 return
819
820
822 print()
823 print("************************************************************************")
824
825 print("******************** Tracking reconstruction Config ********************")
826 print(" Active Config is",flags.Tracking.ActiveConfig.extension)
827 flags.dump(pattern="Tracking.ActiveConfig.*", evaluate=True)
828 print("************************************************************************")
829 return
830
831
832
834
835if __name__ == "__main__":
836
837 from AthenaConfiguration.AllConfigFlags import initConfigFlags
838 flags = initConfigFlags()
839
840 from AthenaConfiguration.TestDefaults import defaultTestFiles
841 flags.Input.Files=defaultTestFiles.RAW_RUN2
842
843 from AthenaCommon.Logging import logging
844 l = logging.getLogger('TrackingPassFlags')
845 from AthenaCommon.Constants import INFO
846 l.setLevel(INFO)
847
848 flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
849
850 assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 5.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
851 assert flags.Tracking.HeavyIonPass.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.HeavyIonPass.maxPrimaryImpact)
852 flags.Tracking.doBLS = True
853 assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
854
855 assert flags.Tracking.ActiveConfig.minPT == 0.5 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
856 flags.BField.configuredSolenoidFieldScale = 0.1
857 assert flags.Tracking.ActiveConfig.minPT == 0.05 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
858
859 l.info("flags.Tracking.ActiveConfig.minPT %f", flags.Tracking.ActiveConfig.minPT * 1.0)
860 l.info("type(flags.Tracking.ActiveConfig.minPT) " + str(type(flags.Tracking.ActiveConfig.minPT)))
861
862
863
864
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 ########################.
activateAthenaComponents(icf)
ITk mode ####################.
createCosmicsTrackingPassFlags()
Cosmics mode ########################.
createLowPtRoITrackingPassFlags()
LowPtRoI mode ########################.
createLowPtLargeD0TrackingPassFlags()
LowPtLargeD0 mode ########################.
createLowPtTrackingPassFlags()
LowPt mode ########################.
createBeamGasTrackingPassFlags()
BeamGas 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 ################.