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("useVertexPositionDuringSeeding", False)
22 icf.addFlag("extension", "" )
23
24 icf.addFlag("usePrdAssociationTool", False)
25 icf.addFlag("isLowPt", False)
26 icf.addFlag("useTIDE_Ambi", lambda pcf: pcf.Tracking.doTIDE_Ambi)
27 icf.addFlag("useTRTExtension", lambda pcf: pcf.Tracking.doTRTExtension)
28 icf.addFlag("storeSeparateContainer", False)
29 icf.addFlag("doAmbiguityProcessorTrackFit", True)
30
31 # --- first set kinematic defaults
32 icf.addFlag("minPT", lambda pcf: (pcf.BField.configuredSolenoidFieldScale *
33 (0.4 * Units.GeV if pcf.Tracking.doLowMu else
34 0.5 * Units.GeV)))
35 icf.addFlag("maxPT", 1000.0 * Units.TeV) # off!
36 icf.addFlag("minEta", -1) # off!
37 icf.addFlag("maxEta", 2.7)
38
39
40 # --- cluster cuts
41 icf.addFlag("minClusters", lambda pcf:
42 3 if (pcf.Detector.EnablePixel and not pcf.Detector.EnableSCT) else
43 6 if (pcf.Detector.EnableSCT and not pcf.Detector.EnablePixel) else
44 7 if pcf.Tracking.doLowMu else
45 8 )
46
47 icf.addFlag("minSiNotShared", 6)
48
49 icf.addFlag("maxShared", 1) # cut is now on number of shared modules
50 icf.addFlag("minPixel", 0)
51 icf.addFlag("maxHoles", lambda pcf: 3 if pcf.Tracking.doLowMu else 2)
52 icf.addFlag("maxPixelHoles", lambda pcf: 2 if pcf.Tracking.doLowMu else 1)
53 icf.addFlag("maxSctHoles", 2)
54 icf.addFlag("maxDoubleHoles", 1)
55
56 icf.addFlag("maxPrimaryImpact", lambda pcf:
57 10.0 * Units.mm if (pcf.Tracking.doBLS or pcf.Tracking.doLowMu) else
58 5.0 * Units.mm)
59 icf.addFlag("maxEMImpact", 50.0 * Units.mm)
60 icf.addFlag("maxZImpact", lambda pcf:
61 320.0 * Units.mm if pcf.Tracking.doLowMu else
62 200.0 * Units.mm)
63
64 # --- this is for the TRT-extension
65 icf.addFlag("minTRTonTrk", 9)
66 icf.addFlag("minTRTPrecFrac", 0.3)
67
68 # --- general pattern cuts for NewTracking
69
70 # default R cut for SP in SiSpacePointsSeedMaker
71 icf.addFlag("radMax", 600.0 * Units.mm)
72 icf.addFlag("roadWidth", lambda pcf: 20. if pcf.Tracking.doLowMu else 12.)
73 icf.addFlag("nHolesMax", lambda pcf: 3 if pcf.Tracking.doLowMu else 2)
74 icf.addFlag("nHolesGapMax", lambda pcf: 3 if pcf.Tracking.doLowMu else 2)
75 icf.addFlag("Xi2max", lambda pcf: 15. if pcf.Tracking.doLowMu else 9.)
76 icf.addFlag("Xi2maxNoAdd", lambda pcf: 35. if pcf.Tracking.doLowMu else 25.)
77 icf.addFlag("nWeightedClustersMin", 6)
78
79 # --- seeding
80 icf.addFlag("useSeedFilter", True)
81 icf.addFlag("maxTracksPerSharedPRD", 0)
82 icf.addFlag("maxdImpactPPSSeeds", lambda pcf: 1.7 if pcf.Tracking.doLowMu else 2.)
83 icf.addFlag("maxdImpactSSSSeeds", lambda pcf:
84 1000. * Units.mm if pcf.Tracking.doLowMu else
85 10. * Units.mm if pcf.Tracking.doBLS else
86 5. * Units.mm)
87 icf.addFlag("maxSeedsPerSP_Pixels", lambda pcf: 5 if pcf.Tracking.doLowMu else 1)
88 icf.addFlag("maxSeedsPerSP_Strips", 5)
89 icf.addFlag("keepAllConfirmedPixelSeeds", lambda pcf: not pcf.Tracking.doLowMu)
90 icf.addFlag("keepAllConfirmedStripSeeds", False)
91
92 # --- min pt cut for brem
93 icf.addFlag("doBremRecoverySi", lambda pcf: pcf.Tracking.doBremRecovery)
94 icf.addFlag("minPTBrem", lambda pcf: (
95 1. * Units.GeV * pcf.BField.configuredSolenoidFieldScale))
96
97 # --- Z Boundary Seeding
98 icf.addFlag("doZBoundary", lambda pcf:
99 not (pcf.Beam.Type is BeamType.Cosmics or pcf.Tracking.doLowMu))
100
101 icf.addFlag("usePixel" , lambda pcf : pcf.Detector.EnablePixel )
102 icf.addFlag("useSCT" , lambda pcf : pcf.Detector.EnableSCT )
103 icf.addFlag("usePixelSeeding" , lambda pcf : pcf.Detector.EnablePixel )
104 icf.addFlag("useSCTSeeding" , lambda pcf : pcf.Detector.EnableSCT )
105
106 # --- Pixel and TRT particle ID during particle creation
107 icf.addFlag("RunPixelPID", True)
108 icf.addFlag("RunTRTPID", True)
109
110 # --- Flags for detailed information.
111 # Ignored for Primary Pass (always active);
112 # Enable for other passes with dedicated output container, if desired.
113 icf.addFlag("storeTrackSeeds", False)
114 icf.addFlag("storeSiSPSeededTracks", False)
115
116 return icf
117
118
119
120
122 icf.doAthenaCluster = True
123 icf.doAthenaSpacePoint = True
124 icf.doAthenaSeed = True
125 icf.doAthenaTrack = True
126 icf.doAthenaAmbiguityResolution = True
127
128 icf.addFlag("nHolesMax", icf.maxHoles)
129 icf.addFlag("nHolesGapMax", icf.maxHoles)
130 # Chi2 cuts of the Athena track finder. The ACTS measurement selection does not use them, but the
131 # Athena passes which derive from these flags do.
132 icf.addFlag("Xi2max" , [50.])
133 icf.addFlag("Xi2maxNoAdd" , [100.])
134
136 icf.doActsCluster = False
137 icf.doActsSpacePoint = False
138 icf.doActsSeed = False
139 icf.doActsTrack = False
140 icf.doActsAmbiguityResolution = False
141
143 from ActsConfig.ActsTrackingPassFlags import createActsLegacyTrackingPassFlags
144 icf = createActsLegacyTrackingPassFlags()
147
148 icf.extension = ""
149 icf.Xi2max = [9.]
150 icf.Xi2maxNoAdd = [25.]
151 return icf
152
154 from ActsConfig.ActsTrackingPassFlags import createActsTrackingPassFlags
155 icf = createActsTrackingPassFlags()
158 icf.extension = ""
159 icf.useITkStripSeeding = False
160 icf.Xi2max = [9.]
161 icf.Xi2maxNoAdd = [25.]
162 return icf
163
164
165
167 from ActsConfig.ActsTrackingPassFlags import createActsHeavyIonTrackingPassFlags
168 icf = createActsHeavyIonTrackingPassFlags()
169 icf.extension = "HeavyIon"
170 return icf
171
172
173
176
177 icf.addFlag("doHitDV" , False)
178 icf.addFlag("doDisappearingTrk" , False)
179 icf.addFlag("useTrigTrackFollowing", False)
180 icf.addFlag("useTrigRoadPredictor", False)
181 icf.addFlag("useTracklets", False)
182 icf.useSeedFilter = False
183 icf.minPT = lambda pcf : (
184 [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
185 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale,
186 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
187 icf.minPTSeed = lambda pcf : (
188 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
189
190 return icf
191
194 icf.addFlag("doHitDV" , False)
195 icf.addFlag("doDisappearingTrk" , False)
196 icf.addFlag("useTrigTrackFollowing", False)
197 icf.addFlag("useTrigRoadPredictor", False)
198 icf.addFlag("useTracklets", False)
199 icf.useSeedFilter = False
200 icf.minPT = lambda pcf : (
201 [1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
202
203 icf.maxPrimaryImpact = [400.0 * Units.mm]
204 icf.maxPrimaryImpactSeed = 400.0 * Units.mm
205 icf.maxdImpactSSSSeeds = [400.0 * Units.mm]
206
207
208 return icf
209
210
211
213 from ActsConfig.ActsTrackingPassFlags import createActsLargeRadiusTrackingPassFlags
214 icf = createActsLargeRadiusTrackingPassFlags()
217 icf.extension = "LargeD0"
218 icf.Xi2max = [9.0]
219 icf.Xi2maxNoAdd = [25.0]
220 return icf
221
224 icf.useITkPixelSeeding = False
225 icf.useITkStripSeeding = True
226
227 icf.maxEta = 2.4
228 icf.etaBins = [-1.0, 2.4]
229 icf.minPT = lambda pcf : (
230 [5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale])
231 icf.minPTSeed = lambda pcf : (
232 5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
233 icf.nWeightedClustersMin = [8]
234 icf.maxPrimaryImpact = [150 * Units.mm]
235 icf.maxPrimaryImpactSeed = 150. * Units.mm
236 icf.maxdImpactSSSSeeds = [150.0 * Units.mm]
237 icf.maxZImpact = [200 * Units.mm]
238 icf.maxZImpactSeed = 200. * Units.mm
239 icf.radMax = 400. * Units.mm
240 return icf
241
242
244 from ActsConfig.ActsTrackingPassFlags import createActsLowPtTrackingPassFlags
245 icf = createActsLowPtTrackingPassFlags()
248 icf.extension = "LowPt"
249 return icf
250
251
254 icf.extension = "HighPileup"
255 icf.minPT = lambda pcf : (
256 0.900 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
257 icf.minClusters = 9
258 icf.maxPixelHoles = 0
259 icf.doBremRecoverySi = False
260
261 return icf
262
263
266 icf.extension = "MinBias"
267 icf.minPT = lambda pcf: (
268 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
269 icf.maxPrimaryImpact = 10. * Units.mm
270 icf.maxZImpact = 250. * Units.mm
271 icf.minClusters = 5
272 icf.maxdImpactSSSSeeds = 20.0 * Units.mm # apply cut on SSS seeds
273 icf.roadWidth = 20.
274 icf.doBremRecoverySi = False
275 icf.maxSeedsPerSP_Pixels = 5
276 icf.keepAllConfirmedPixelSeeds = False
277
278 return icf
279
280
283 icf.extension = "UPC"
284 # --- min pt cut for brem
285 icf.minPTBrem = lambda pcf: (
286 0.75 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
287 # MinBias turns off Brem Recovery, turn it on here
288 icf.doBremRecoverySi = lambda pcf: pcf.Tracking.doBremRecovery
289 return icf
290
291
294 icf.extension = "HIP"
295 return icf
296
297
298
301 icf.extension = "LowPtRoI"
302 icf.usePrdAssociationTool = True
303 icf.storeSeparateContainer = True
304 icf.maxPT = lambda pcf: (
305 0.850 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
306 icf.minPT = lambda pcf: (
307 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
308 icf.minClusters = 5
309 icf.minSiNotShared = 4
310 icf.maxShared = 1 # cut is now on number of shared modules
311 icf.minPixel = 2
312 icf.maxHoles = 2
313 icf.maxPixelHoles = 1
314 icf.maxSctHoles = 2
315 icf.maxDoubleHoles = 1
316 icf.radMax = 600. * Units.mm
317 icf.nHolesMax = icf.maxHoles
318 icf.nHolesGapMax = icf.maxHoles # not as tight as 2*maxDoubleHoles
319 icf.doBremRecoverySi = False
320 # Add custom flags valid for this pass only
321 icf.addFlag("z0WindowRoI", 30.0) # mm
322 icf.addFlag("doRandomSpot", False)
323 icf.addFlag("RoIStrategy", RoIStrategy.LeadTracks)
324 icf.addFlag("inputLowPtRoIfile","")
325
326 return icf
327
328
329
332 icf.extension = "R3LargeD0"
333 icf.usePrdAssociationTool = True
334 icf.usePixelSeeding = False
335 icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
336 icf.maxPT = lambda pcf : (
337 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale)
338 icf.minPT = lambda pcf : (
339 1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
340 icf.maxEta = 3
341 icf.maxPrimaryImpact = 300.0 * Units.mm
342 icf.maxEMImpact = 300 * Units.mm
343 icf.maxZImpact = 500 * Units.mm
344 icf.minClusters = 8
345 icf.minSiNotShared = 6
346 icf.maxShared = 2 # cut is now on number of shared modules
347 icf.minPixel = 0
348 icf.maxHoles = 2
349 icf.maxPixelHoles = 1
350 icf.maxSctHoles = 1
351 icf.maxDoubleHoles = 0
352 icf.radMax = 600. * Units.mm
353 icf.nHolesMax = icf.maxHoles
354 icf.nHolesGapMax = 1
355 icf.maxTracksPerSharedPRD = 2
356 icf.Xi2max = 9.0
357 icf.Xi2maxNoAdd = 25.0
358 icf.roadWidth = 5.
359 icf.nWeightedClustersMin = 8
360 icf.maxdImpactSSSSeeds = 300.0
361 icf.doZBoundary = True
362 icf.keepAllConfirmedStripSeeds = True
363 icf.maxSeedsPerSP_Strips = 1
364 icf.doBremRecoverySi = False
365
366 icf.RunPixelPID = False
367 icf.RunTRTPID = False
368
369 return icf
370
371
374 icf.extension = "LowPtLargeD0"
375 icf.usePrdAssociationTool = True
376 icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container
377 icf.maxPT = lambda pcf: (
378 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale)
379 icf.minPT = lambda pcf: (
380 100 * Units.MeV * pcf.BField.configuredSolenoidFieldScale)
381 icf.maxEta = 5
382 icf.maxPrimaryImpact = 300.0 * Units.mm
383 icf.maxZImpact = 1500.0 * Units.mm
384 icf.minClusters = 5
385 icf.minSiNotShared = 5
386 icf.maxShared = 2 # cut is now on number of shared modules
387 icf.minPixel = 0
388 icf.maxHoles = 2
389 icf.maxPixelHoles = 1
390 icf.maxSctHoles = 2
391 icf.maxDoubleHoles = 1
392 icf.radMax = 600. * Units.mm
393 icf.nHolesMax = icf.maxHoles
394 icf.nHolesGapMax = icf.maxHoles
395 icf.maxTracksPerSharedPRD = 2
396 icf.doBremRecoverySi = False
397
398 icf.RunPixelPID = False
399 icf.RunTRTPID = False
400
401 return icf
402
403
406 icf.extension = "LowPt"
407 icf.usePrdAssociationTool = True
408 icf.isLowPt = True
409 icf.maxPT = lambda pcf: (
410 pcf.BField.configuredSolenoidFieldScale *
411 (1e6 if pcf.Tracking.doMinBias else
412 pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
413 icf.minPT = lambda pcf: (
414 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
415 icf.minClusters = 5
416 icf.minSiNotShared = 4
417 icf.maxShared = 1 # cut is now on number of shared modules
418 icf.minPixel = 2 # At least one pixel hit for low-pt (assoc. seeded on pixels!)
419 icf.maxHoles = 2
420 icf.maxPixelHoles = 1
421 icf.maxSctHoles = 2
422 icf.maxDoubleHoles = 1
423 icf.radMax = 600. * Units.mm
424 icf.nHolesMax = icf.maxHoles
425 icf.nHolesGapMax = icf.maxHoles # not as tight as 2*maxDoubleHoles
426 icf.maxPrimaryImpact = lambda pcf: (
427 100. * Units.mm if pcf.Tracking.doMinBias else 10. * Units.mm)
428 icf.doBremRecoverySi = False
429
430 return icf
431
432
434 from ActsConfig.ActsTrackingPassFlags import createActsConversionTrackingPassFlags
435 icf = createActsConversionTrackingPassFlags()
438 icf.extension = "Conversion"
439 icf.Xi2max = [9.0]
440 icf.Xi2maxNoAdd = [25.0]
441 return icf
442
443
445 icf = createTrackingPassFlags() #TODO consider using createLowPtTrackingPassFlags as a base here
446 icf.extension = "VeryLowPt"
447 icf.usePrdAssociationTool = True
448 icf.isLowPt = True
449 icf.useTRTExtension = False
450 icf.maxPT = lambda pcf : (
451 pcf.BField.configuredSolenoidFieldScale *
452 (1e6 if pcf.Tracking.doMinBias else
453 pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV)
454 icf.minPT = lambda pcf : (
455 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
456 icf.minClusters = 3
457 icf.minSiNotShared = 3
458 icf.maxShared = 1 # cut is now on number of shared modules
459 icf.minPixel = 3 # At least one pixel hit for low-pt (assoc. seeded on pixels!)
460 icf.maxHoles = 1
461 icf.maxPixelHoles = 1
462 icf.maxSctHoles = 1
463 icf.maxDoubleHoles = 0
464 icf.nHolesMax = 1
465 icf.nHolesGapMax = 1 # not as tight as 2*maxDoubleHoles
466 icf.radMax = 600. * Units.mm # restrivt to pixels
467 icf.doBremRecoverySi = False
468
469 return icf
470
471
474 icf.extension = "Forward"
475 icf.usePrdAssociationTool = True
476 icf.useTIDE_Ambi = False
477 icf.useTRTExtension = False
478 icf.storeSeparateContainer = True
479 icf.minEta = 2.4 # restrict to minimal eta
480 icf.maxEta = 2.7
481 icf.minPT = lambda pcf: (
482 2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
483 icf.minClusters = 3
484 icf.minSiNotShared = 3
485 icf.maxShared = 1
486 icf.minPixel = 3
487 icf.maxHoles = 1
488 icf.maxPixelHoles = 1
489 icf.maxSctHoles = 1
490 icf.maxDoubleHoles = 0
491 icf.nHolesMax = icf.maxHoles
492 icf.nHolesGapMax = icf.maxHoles
493 icf.radMax = 600. * Units.mm
494 icf.doBremRecoverySi = False
495 icf.doZBoundary = False
496
497 icf.RunPixelPID = False
498 icf.RunTRTPID = False
499
500 return icf
501
502
505 icf.extension = "BeamGas"
506 icf.usePrdAssociationTool = True
507 icf.minPT = lambda pcf: (
508 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
509 icf.maxPrimaryImpact = 300. * Units.mm
510 icf.maxZImpact = 2000. * Units.mm
511 icf.minClusters = 6
512 icf.maxHoles = 3
513 icf.maxPixelHoles = 3
514 icf.maxSctHoles = 3
515 icf.maxDoubleHoles = 1
516 icf.nHolesMax = 3
517 icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles
518 icf.doBremRecoverySi = False
519
520 return icf
521
522
525 icf.extension = "VtxLumi"
526 icf.minPT = lambda pcf: (
527 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
528 icf.minClusters = 7
529 icf.maxPixelHoles = 1
530 icf.radMax = 600. * Units.mm
531 icf.nHolesMax = 2
532 icf.nHolesGapMax = 1
533 icf.doBremRecoverySi = False
534
535 return icf
536
537
540 icf.extension = "VtxLumiHeavyIon"
541 icf.minPT = lambda pcf: (
542 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
543 icf.maxPrimaryImpact = 10. * Units.mm
544 icf.maxZImpact = 250.0 * Units.mm
545 icf.minClusters = 7
546 icf.maxPixelHoles = 1
547 icf.radMax = 600. * Units.mm
548 icf.nHolesMax = 2
549 icf.nHolesGapMax = 1
550 icf.maxdImpactSSSSeeds = 20.
551 icf.roadWidth = 20.
552 icf.keepAllConfirmedPixelSeeds = False
553 icf.maxSeedsPerSP_Pixels = 5
554 icf.doBremRecoverySi = False
555
556 return icf
557
558
561 icf.extension = "VtxBeamSpot"
562 icf.minPT = lambda pcf: (
563 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
564 icf.minClusters = 9
565 icf.maxPixelHoles = 0
566 icf.radMax = 320. * Units.mm
567 icf.nHolesMax = 2
568 icf.nHolesGapMax = 1
569 icf.doBremRecoverySi = False
570
571 return icf
572
573
576 icf.extension = "Cosmics"
577 icf.minPT = lambda pcf: (
578 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
579 icf.maxPrimaryImpact = 1000. * Units.mm
580 icf.maxZImpact = 10000. * Units.mm
581 icf.minClusters = 4
582 icf.minSiNotShared = 4
583 icf.maxHoles = 3
584 icf.maxPixelHoles = 3
585 icf.maxSctHoles = 3
586 icf.maxDoubleHoles = 1
587 icf.minTRTonTrk = 15
588 icf.roadWidth = 60.
589 icf.Xi2max = 60.
590 icf.Xi2maxNoAdd = 100.
591 icf.nWeightedClustersMin = 8
592 icf.nHolesMax = 3
593 icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles
594 icf.maxdImpactSSSSeeds = 20. * Units.mm
595 icf.doBremRecoverySi = False
596 icf.doZBoundary = False
597 icf.maxSeedsPerSP_Pixels = 5
598 icf.keepAllConfirmedPixelSeeds = False
599
600 return icf
601
602
605 icf.extension = "HeavyIon"
606 icf.maxPrimaryImpact = 10. * Units.mm
607 icf.maxZImpact = 200. * Units.mm
608 icf.minClusters = 9
609 icf.minSiNotShared = 7
610 icf.maxShared = 2 # was 1, cut is now on number of shared modules
611
612 icf.nHolesMax = 0
613 icf.nHolesGapMax = 0
614
615 icf.minPT = lambda pcf: (
616 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
617
618 icf.maxdImpactSSSSeeds = 20. * Units.mm
619 icf.maxdImpactPPSSeeds = 1.7
620
621 icf.maxHoles = 2
622 icf.maxPixelHoles = 1
623 icf.maxSctHoles = 1
624 icf.maxDoubleHoles = 0
625 icf.Xi2max = 9.
626 icf.Xi2maxNoAdd = 25.
627 icf.radMax = 600. * Units.mm # restrict to pixels + first SCT layer
628 icf.roadWidth = 20.
629 icf.doBremRecoverySi = False
630 icf.doZBoundary = False
631 icf.maxSeedsPerSP_Pixels = 5
632 icf.keepAllConfirmedPixelSeeds = False
633 return icf
634
637 icf.extension = "HeavyIonLowPt"
638 icf.maxPT = lambda pcf: 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
639 icf.minPT = lambda pcf: 0.2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
640 icf.useVertexPositionDuringSeeding = True
641 icf.useTRTExtension = False
642
643 icf.Xi2max = 6.
644 icf.Xi2maxNoAdd = 10.
645 icf.usePrdAssociationTool = True
646 icf.isLowPt = True
647 icf.minClusters = 6
648 icf.minSiNotShared = 6
649 icf.minPixel = 2 # At least one pixel hit for low-pt (assoc. seeded on pixels!)
650 # this is for the Ambi
651 icf.maxHoles = 2
652 # this is for the CKF
653 icf.nHolesMax = icf.maxHoles - 1
654 icf.maxPixelHoles = 1
655 icf.maxSctHoles = 2
656 icf.maxDoubleHoles = 1
657 icf.radMax = 380. * Units.mm
658 icf.nHolesGapMax = icf.maxHoles # not as tight as 2*maxDoubleHoles
659 icf.maxPrimaryImpact = 10. * Units.mm
660 icf.maxdImpactPPSSeeds = 2. * Units.mm
661 icf.doBremRecoverySi = False
662 icf.doZBoundary = False
663 icf.maxSeedsPerSP_Pixels = 5
664 icf.keepAllConfirmedPixelSeeds = False
665 return icf
666
667
670 icf.extension = "Pixel"
671 icf.isLowPt = lambda pcf : pcf.Tracking.doMinBias
672
673 def _minPt( pcf ):
674 if pcf.Beam.Type is BeamType.Cosmics:
675 return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
676 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC:
677 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
678 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HIP:
679 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
680 if pcf.Tracking.doMinBias:
681 return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
682 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
683
684 icf.minPT = _minPt
685 icf.minClusters = 3
686
687 def _pick( default, hion, cosmics):
688 def _internal( pcf ):
689 if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon:
690 return hion
691 if pcf.Beam.Type is BeamType.Cosmics:
692 return cosmics
693 return default
694 return _internal
695
696 icf.maxHoles = _pick( default = 1, hion = 0, cosmics = 3 )
697 icf.maxPixelHoles = _pick( default = 1, hion = 0, cosmics = 3 )
698 icf.maxSctHoles = 0
699 icf.maxDoubleHoles = 0
700 icf.minSiNotShared = 3
701 icf.maxShared = 0
702 icf.nHolesMax = _pick( default = 1, hion = 0, cosmics = 3 )
703 icf.nHolesGapMax = _pick( default = 1, hion = 0, cosmics = 3 )
704 icf.useSCT = False
705 icf.useSCTSeeding = False
706 icf.maxPrimaryImpact = lambda pcf: (
707 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
708 10. * Units.mm if pcf.Tracking.doUPC else
709 5. * Units.mm)
710 icf.roadWidth = lambda pcf: (
711 60.0 if pcf.Beam.Type is BeamType.Cosmics else
712 12.0)
713 icf.maxZImpact = lambda pcf: (
714 10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
715 320. * Units.mm if pcf.Tracking.doLowMu else
716 250. * Units.mm if pcf.Tracking.doMinBias else
717 200. * Units.mm)
718 icf.Xi2max = lambda pcf: (
719 60. if pcf.Beam.Type is BeamType.Cosmics else
720 15. if pcf.Tracking.doLowMu else
721 9.)
722 icf.Xi2maxNoAdd = lambda pcf: (
723 100.0 if pcf.Beam.Type is BeamType.Cosmics else
724 35. if pcf.Tracking.doLowMu else
725 25.)
726 icf.nWeightedClustersMin = 6
727 icf.doBremRecoverySi = False
728
729 icf.RunPixelPID = lambda pcf: (
730 pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC)
731 icf.RunTRTPID = False
732 return icf
733
734
737 icf.extension = "Disappearing"
738 icf.usePrdAssociationTool = True
739 icf.storeSeparateContainer = True
740 icf.minPT = lambda pcf: (
741 5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
742 icf.minClusters = 4
743 icf.maxHoles = 0
744 icf.maxPixelHoles = 0
745 icf.maxSctHoles = 0
746 icf.maxDoubleHoles = 0
747 icf.minSiNotShared = 3
748 icf.maxShared = 0
749 icf.nHolesMax = 0
750 icf.nHolesGapMax = 0
751 icf.useSCT = True
752 icf.useSCTSeeding = False
753 icf.maxEta = 2.2
754 icf.doBremRecoverySi = False
755 def MainPassFlags(pcf):
756 return pcf.Tracking.__getattr__(pcf.Tracking.PrimaryPassConfig.value+'Pass')
757 icf.maxPrimaryImpact = lambda pcf: MainPassFlags(pcf).maxPrimaryImpact
758 icf.maxZImpact = lambda pcf: MainPassFlags(pcf).maxZImpact
759 icf.roadWidth = lambda pcf: MainPassFlags(pcf).roadWidth
760 return icf
761
762
765 icf.extension = "SCT"
766 icf.minClusters = 7
767 icf.maxDoubleHoles = 1
768 icf.minSiNotShared = 5
769 icf.usePixel = False
770 icf.usePixelSeeding = False
771
772 def _minpt( pcf ):
773 if pcf.Beam.Type is BeamType.Cosmics:
774 return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
775 if pcf.Tracking.doMinBias:
776 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
777 return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale
778
779 icf.minPT = _minpt
780
781 icf.maxPrimaryImpact = lambda pcf: (
782 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
783 10. * Units.mm if pcf.Tracking.doLowMu else
784 5. * Units.mm)
785 icf.maxZImpact = lambda pcf: (
786 10000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else
787 320. * Units.mm if pcf.Tracking.doLowMu else
788 200.0 * Units.mm)
789
790 icf.maxHoles = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
791 icf.nHolesMax = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
792 icf.nHolesGapMax = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
793 icf.maxPixelHoles = lambda pcf: 0 if pcf.Beam.Type is BeamType.Cosmics else 0
794 icf.maxSctHoles = lambda pcf: 3 if pcf.Beam.Type is BeamType.Cosmics else 2
795 icf.maxShared = 0
796 icf.roadWidth = lambda pcf: (
797 60. if pcf.Beam.Type is BeamType.Cosmics else
798 20. if pcf.Tracking.doLowMu else
799 12.)
800 icf.Xi2max = lambda pcf: (
801 60. if pcf.Beam.Type is BeamType.Cosmics else
802 15. if pcf.Tracking.doLowMu else
803 9.)
804 icf.Xi2maxNoAdd = lambda pcf: (
805 100.0 if pcf.Beam.Type is BeamType.Cosmics else
806 35. if pcf.Tracking.doLowMu else
807 25.)
808 icf.nWeightedClustersMin = lambda pcf: 4 if pcf.Beam.Type is BeamType.Cosmics else 6
809 icf.minClusters = lambda pcf: (
810 4 if pcf.Beam.Type is BeamType.Cosmics else
811 7 if pcf.Tracking.doLowMu else
812 8)
813 icf.minSiNotShared = lambda pcf: 4 if pcf.Beam.Type is BeamType.Cosmics else 5
814 icf.doBremRecoverySi = False
815
816 icf.RunPixelPID = False
817 icf.RunTRTPID = False
818 return icf
819
820
823 icf.extension = "TRT"
824 icf.useTIDE_Ambi = False
825 icf.usePrdAssociationTool = True
826 icf.minPT = lambda pcf: (
827 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale)
828 icf.doBremRecoverySi = False
829
830 icf.RunPixelPID = False
831 icf.RunTRTPID = False
832 return icf
833
834
835
838 icf.extension = "TRTStandalone"
839 icf.useTIDE_Ambi = False
840 icf.usePrdAssociationTool = True
841 icf.doBremRecoverySi = False
842
843 return icf
844
845
846
847
849 print()
850 print("************************************************************************")
851
852 print("******************** Tracking reconstruction Config ********************")
853 print(" Primary Config is",flags.Tracking[flags.Tracking.PrimaryPassConfig.value+"Pass"].extension)
854 flags.dump(pattern="Tracking."+flags.Tracking.PrimaryPassConfig.value+"Pass.*", evaluate=True)
855 print("************************************************************************")
856 return
857
858
860 print()
861 print("************************************************************************")
862
863 print("******************** Tracking reconstruction Config ********************")
864 print(" Active Config is",flags.Tracking.ActiveConfig.extension)
865 flags.dump(pattern="Tracking.ActiveConfig.*", evaluate=True)
866 print("************************************************************************")
867 return
868
869
870
872
873if __name__ == "__main__":
874
875 from AthenaConfiguration.AllConfigFlags import initConfigFlags
876 flags = initConfigFlags()
877
878 from AthenaConfiguration.TestDefaults import defaultTestFiles
879 flags.Input.Files=defaultTestFiles.RAW_RUN2
880
881 from AthenaCommon.Logging import logging
882 l = logging.getLogger('TrackingPassFlags')
883 from AthenaCommon.Constants import INFO
884 l.setLevel(INFO)
885
886 flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
887
888 assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 5.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
889 assert flags.Tracking.HeavyIonPass.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.HeavyIonPass.maxPrimaryImpact)
890 flags.Tracking.doBLS = True
891 assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact)
892
893 assert flags.Tracking.ActiveConfig.minPT == 0.5 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
894 flags.BField.configuredSolenoidFieldScale = 0.1
895 assert flags.Tracking.ActiveConfig.minPT == 0.05 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT)
896
897 l.info("flags.Tracking.ActiveConfig.minPT %f", flags.Tracking.ActiveConfig.minPT * 1.0)
898 l.info("type(flags.Tracking.ActiveConfig.minPT) " + str(type(flags.Tracking.ActiveConfig.minPT)))
899
900
901
902
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 ################.