ATLAS Offline Software
Loading...
Searching...
No Matches
AFP_DigitizationConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3#==============================================================
4# Job options file for the AFP_Digitization package
5#==============================================================
6
7from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
8from AthenaConfiguration.ComponentFactory import CompFactory
9from AthenaConfiguration.Enums import ProductionStep
10from DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
11
12
13# The earliest bunch crossing time for which interactions will be sent to the AFP Digitization code.
15 return 0 #Assume AFP is only sensitive to the current bunch crossing, for the moment
16
17
18# The latest bunch crossing time for which interactions will be sent to the AFP Digitization code.
20 return 0 #Assume AFP is only sensitive to the current bunch crossing, for the moment
21
22
23def AFP_SIDPUXinfFolderCfg(flags, name="AFP_SIDXinfFolder", **kwargs):
24 """Return a PileUpXingFoldertool for AFP SID"""
25 # bunch crossing range in ns
26 kwargs.setdefault("FirstXing", AFP_FirstXing())
27 kwargs.setdefault("LastXing", AFP_LastXing())
28 kwargs.setdefault("ItemList", ["AFP_SIDSimHitCollection#AFP_SIDSimHitCollection"])
29 return PileUpXingFolderCfg(flags, name, **kwargs)
30
31
32def AFP_TDPUXinfFolderCfg(flags, name="AFP_TDXinfFolder", **kwargs):
33 """Return a PileUpXingFoldertool for AFP TD"""
34 # bunch crossing range in ns
35 kwargs.setdefault("FirstXing", AFP_FirstXing())
36 kwargs.setdefault("LastXing", AFP_LastXing())
37 kwargs.setdefault("ItemList", ["AFP_TDSimHitCollection#AFP_TDSimHitCollection"])
38 return PileUpXingFolderCfg(flags, name, **kwargs)
39
40
41def AFP_DigitizationToolCfg(flags, name="AFP_PileUpTool", **kwargs):
42 """Return ComponentAccumulator with AFP digitization tool."""
43 acc = ComponentAccumulator()
44
45 if flags.Digitization.PileUp:
46 intervals = []
47 if flags.Digitization.DoXingByXingPileUp:
48 kwargs.setdefault("FirstXing", AFP_FirstXing())
49 kwargs.setdefault("LastXing", AFP_LastXing())
50 else:
51 intervals += [acc.popToolsAndMerge(AFP_SIDPUXinfFolderCfg(flags))]
52 intervals += [acc.popToolsAndMerge(AFP_TDPUXinfFolderCfg(flags))]
53 kwargs.setdefault("mergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
54 kwargs.setdefault("OnlyUseContainerName", True)
55 else:
56 kwargs.setdefault("mergeSvc", '')
57 kwargs.setdefault("OnlyUseContainerName", False)
58
59 from RngComps.RngCompsConfig import AthRNGSvcCfg
60 kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
61
62 acc.setPrivateTools(CompFactory.AFP_PileUpTool(name, **kwargs))
63 return acc
64
65
66def AFP_OverlayDigitizationToolCfg(flags, name="AFP_OverlayDigitizationTool", **kwargs):
67 """Return ComponentAccumulator with AFP_DigitizationTool for Overlay"""
68 acc = ComponentAccumulator()
69 kwargs.setdefault("mergeSvc", '')
70 kwargs.setdefault("OnlyUseContainerName", False)
71 tool = acc.popToolsAndMerge(AFP_DigitizationToolCfg(flags, name, **kwargs))
72 acc.setPrivateTools(tool)
73 return acc
74
75
77 """Return ComponentAccumulator with Output for AFP. Not standalone."""
78 acc = ComponentAccumulator()
79 if flags.Output.doWriteRDO:
80 ItemList = ["AFP_TDDigiCollection#AFP_TDDigiCollection",
81 "AFP_SiDigiCollection#AFP_SiDigiCollection",
82 "xAOD::AFPSiHitContainer#AFPSiHitContainer", "xAOD::AFPSiHitAuxContainer#AFPSiHitContainerAux.",
83 "xAOD::AFPToFHitContainer#AFPToFHitContainer", "xAOD::AFPToFHitAuxContainer#AFPToFHitContainerAux."]
84 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
85 acc.merge(OutputStreamCfg(flags,"RDO", ItemList))
86 return acc
87
88
89def AFP_DigitizationBasicCfg(flags, **kwargs):
90 """Return ComponentAccumulator for AFP digitization"""
91 acc = ComponentAccumulator()
92 if "PileUpTools" not in kwargs:
93 PileUpTools = acc.popToolsAndMerge(AFP_DigitizationToolCfg(flags))
94 kwargs["PileUpTools"] = PileUpTools
95 from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
96 acc.merge(PileUpToolsCfg(flags, **kwargs))
97 return acc
98
99
101 """Return ComponentAccumulator with AFP_DigiTop."""
102 acc = ComponentAccumulator()
103 if flags.Common.ProductionStep != ProductionStep.FastChain:
104 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
105 acc.merge(SGInputLoaderCfg(flags,Load={('AFP_TDSimHitCollection','StoreGateSvc+AFP_TDSimHitCollection'),
106 ('AFP_SIDSimHitCollection','StoreGateSvc+AFP_SIDSimHitCollection')} ) )
107 if "DigitizationTool" not in kwargs:
108 kwargs.setdefault("DigitizationTool", acc.popToolsAndMerge(AFP_OverlayDigitizationToolCfg(flags)))
109
110 if flags.Concurrency.NumThreads > 0:
111 kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
112
113 # Set common overlay extra inputs
114 kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
115
116 acc.addEventAlgo(CompFactory.AFP_DigiTop("AFP_DigiTop", **kwargs))
117 return acc
118
119
120def AFP_DigitizationCfg(flags, **kwargs):
121 """Return ComponentAccumulator for AFP digitization and Output"""
122 acc = ComponentAccumulator()
123 acc.merge(AFP_DigitizationBasicCfg(flags, **kwargs))
124 acc.merge(AFP_DigitizationOutputCfg(flags))
125
126 return acc
127
128
129def AFP_DigitizationOverlayCfg(flags, **kwargs):
130 """Return ComponentAccumulator for AFP digitization and Output"""
131 acc = ComponentAccumulator()
132 acc.merge(AFP_OverlayDigitizationBasicCfg(flags, **kwargs))
133 acc.merge(AFP_DigitizationOutputCfg(flags))
134
135 return acc
AFP_DigitizationToolCfg(flags, name="AFP_PileUpTool", **kwargs)
AFP_OverlayDigitizationToolCfg(flags, name="AFP_OverlayDigitizationTool", **kwargs)
AFP_TDPUXinfFolderCfg(flags, name="AFP_TDXinfFolder", **kwargs)
AFP_DigitizationBasicCfg(flags, **kwargs)
AFP_DigitizationOverlayCfg(flags, **kwargs)
AFP_SIDPUXinfFolderCfg(flags, name="AFP_SIDXinfFolder", **kwargs)
AFP_OverlayDigitizationBasicCfg(flags, **kwargs)