ATLAS Offline Software
Loading...
Searching...
No Matches
HGTD_DigitizationConfig.py
Go to the documentation of this file.
1"""Define methods to construct configured HGTD Digitization tools and algorithms
2
3Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4"""
5from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6from AthenaConfiguration.ComponentFactory import CompFactory
7from AthenaConfiguration.Enums import ProductionStep
8from DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
9from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
10from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
11from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
12from HGTD_Calibration.HGTD_CalibrationConfig import HGTD_TdcCalibrationToolCfg
13
14# The earliest bunch crossing time for which interactions will be sent
15# to the HGTD Digitization code.
17 return 0
18# The latest bunch crossing time for which interactions will be sent
19# to the HGTD Digitization code.
21 return 0
22# NOTE: related to 3BC mode?
23
24
25def HGTD_FrontEndToolCfg(flags, name="HGTD_FrontEndTool", **kwargs):
26 acc = ComponentAccumulator()
27
28 acc.setPrivateTools(CompFactory.HGTD_FrontEndTool(name, **kwargs))
29 return acc
30
31
32def HGTD_SurfaceChargesGeneratorCfg(flags, name="HGTD_SurfaceChargesGenerator", **kwargs):
33 acc = ComponentAccumulator()
34
35 from HGTD_Calibration.HGTD_CalibrationConfig import HGTD_TimeResolutionToolCfg
36
37 kwargs.setdefault("ActiveTimeWindow", 1.25)
38 kwargs.setdefault("SmearMeanTime", True)
39 kwargs.setdefault("TimeResolutionTool", acc.popToolsAndMerge(
40 HGTD_TimeResolutionToolCfg(flags)))
41 acc.setPrivateTools(CompFactory.HGTD_SurfaceChargesGenerator(name, **kwargs))
42 return acc
43
44
45def HGTD_DigitizationBasicToolCfg(flags, name="HGTD_DigitizationBasicTool", **kwargs):
46 """Return ComponentAccumulator with configured HGTD_DigitizationTool"""
47 if flags.HGTD.Geometry.useGeoModelXml:
48 from HGTD_GeoModelXml.HGTD_GeoModelConfig import HGTD_ReadoutGeometryCfg
49 else:
50 from HGTD_GeoModel.HGTD_GeoModelConfig import HGTD_ReadoutGeometryCfg
51 acc = HGTD_ReadoutGeometryCfg(flags)
52 # set up tool handles
53 kwargs.setdefault("FrontEnd", acc.popToolsAndMerge(HGTD_FrontEndToolCfg(flags)))
54 kwargs.setdefault("SurfaceChargesGenerator", acc.popToolsAndMerge(HGTD_SurfaceChargesGeneratorCfg(flags)))
55 kwargs.setdefault("HGTD_TdcCalibrationTool", acc.popToolsAndMerge(HGTD_TdcCalibrationToolCfg(flags)))
56 kwargs.setdefault("InputObjectName", "HGTD_Hits")
57 kwargs.setdefault("HGTDDetEleCollKey", "HGTD_DetectorElementCollection")
58 if flags.Digitization.DoXingByXingPileUp:
59 kwargs.setdefault("FirstXing", HGTD_FirstXing())
60 kwargs.setdefault("LastXing", HGTD_LastXing())
61 from RngComps.RngCompsConfig import AthRNGSvcCfg
62 kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
63
64 acc.setPrivateTools(CompFactory.HGTD_DigitizationTool(name, **kwargs))
65 return acc
66
67
68def HGTD_DigitizationToolCfg(flags, name="HGTD_DigitizationTool", **kwargs):
69 """Return ComponentAccumulator with configured HGTD_DigitizationBasicTool"""
70 acc = ComponentAccumulator()
71
72 if flags.Digitization.PileUp:
73 intervals = []
74 if not flags.Digitization.DoXingByXingPileUp:
75 intervals += [acc.popToolsAndMerge(HGTD_RangeCfg(flags))]
76 kwargs.setdefault("MergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
77 else:
78 kwargs.setdefault("MergeSvc", "")
79 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
80 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
81 if flags.HGTD.outputAltirocRDO:
82 kwargs.setdefault("AltirocOutputObject", f"{flags.Overlay.BkgPrefix}HGTD_ALTIROC_RDOs")
83 kwargs.setdefault("OutputObjectName", f"{flags.Overlay.BkgPrefix}HGTD_RDOs")
84 kwargs.setdefault("OutputSDOName", f"{flags.Overlay.BkgPrefix}HGTD_SDO_Map")
85 else:
86 if flags.HGTD.outputAltirocRDO:
87 kwargs.setdefault("AltirocOutputObject", "HGTD_ALTIROC_RDOs")
88 kwargs.setdefault("OutputObjectName", "HGTD_RDOs")
89 kwargs.setdefault("OutputSDOName", "HGTD_SDO_Map")
90 pileupTool = acc.popToolsAndMerge(HGTD_DigitizationBasicToolCfg(flags, name, **kwargs))
91 acc.setPrivateTools(pileupTool)
92 return acc
93
94
95def HGTD_OverlayDigitizationToolCfg(flags, name="HGTD_OverlayDigitizationTool", **kwargs):
96 """Return ComponentAccumulator with HGTD_DigitizationTool configured for overlay"""
97 kwargs.setdefault("OnlyUseContainerName", False)
98 kwargs.setdefault("OutputSDOName", f"{flags.Overlay.SigPrefix}HGTD_SDO_Map")
99 kwargs.setdefault("MergeSvc", "")
100 kwargs.setdefault("OutputObjectName", f"{flags.Overlay.SigPrefix}HGTD_RDOs")
101 if flags.HGTD.outputAltirocRDO:
102 kwargs.setdefault("AltirocOutputObject", f"{flags.Overlay.SigPrefix}HGTD_ALTIROC_RDOs")
103 return HGTD_DigitizationBasicToolCfg(flags, name, **kwargs)
104
105
106def HGTD_RangeCfg(flags, name="HGTD_Range", **kwargs):
107 """Return a configured PileUpXingFolder tool"""
108 kwargs.setdefault("FirstXing", HGTD_FirstXing())
109 kwargs.setdefault("LastXing", HGTD_LastXing())
110 kwargs.setdefault("CacheRefreshFrequency", 1.0) # default 0 no dataproxy reset
111 kwargs.setdefault("ItemList", ["SiHitCollection#HGTD_Hits"])
112 return PileUpXingFolderCfg(flags, name, **kwargs)
113
114
115def HGTD_OutputCfg(flags):
116 """Return ComponentAccumulator with Output for HGTD. Not standalone."""
117 acc = ComponentAccumulator()
118 if flags.Output.doWriteRDO:
119 ItemList = ["HGTD_RDO_Container#*"]
120 if flags.HGTD.outputAltirocRDO:
121 ItemList += ["HGTD_ALTIROC_RDO_Container#*"]
122 if flags.Digitization.EnableTruth:
123 ItemList += ["InDetSimDataCollection#*"]
124 acc.merge(TruthDigitizationOutputCfg(flags))
125 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
126 return acc
127
128
129def HGTD_DigitizationBasicCfg(flags, **kwargs):
130 """Return ComponentAccumulator for HGTD digitization"""
131 acc = ComponentAccumulator()
132 if "PileUpTools" not in kwargs:
133 kwargs["PileUpTools"] = acc.popToolsAndMerge(HGTD_DigitizationToolCfg(flags))
134 acc.merge(PileUpToolsCfg(flags, **kwargs))
135 return acc
136
137
139 """Return ComponentAccumulator with HGTD Overlay digitization"""
140 acc = ComponentAccumulator()
141 if flags.Common.ProductionStep != ProductionStep.FastChain:
142 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
143 acc.merge(SGInputLoaderCfg(flags, ["SiHitCollection#HGTD_Hits"]))
144
145 if "DigitizationTool" not in kwargs:
146 kwargs["DigitizationTool"] = acc.popToolsAndMerge(HGTD_OverlayDigitizationToolCfg(flags))
147
148 if flags.Concurrency.NumThreads > 0:
149 kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
150
151 # Set common overlay extra inputs
152 kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
153
154 acc.addEventAlgo(CompFactory.HGTD_Digitization(name="HGTD_OverlayDigitization", **kwargs))
155 return acc
156
157
158# with output defaults
159def HGTD_DigitizationCfg(flags, **kwargs):
160 """Return ComponentAccumulator for HGTD digitization and Output"""
161 acc = HGTD_DigitizationBasicCfg(flags, **kwargs)
162 acc.merge(HGTD_OutputCfg(flags))
163 return acc
HGTD_DigitizationBasicCfg(flags, **kwargs)
HGTD_SurfaceChargesGeneratorCfg(flags, name="HGTD_SurfaceChargesGenerator", **kwargs)
HGTD_FrontEndToolCfg(flags, name="HGTD_FrontEndTool", **kwargs)
HGTD_DigitizationToolCfg(flags, name="HGTD_DigitizationTool", **kwargs)
HGTD_RangeCfg(flags, name="HGTD_Range", **kwargs)
HGTD_OverlayDigitizationBasicCfg(flags, **kwargs)
HGTD_DigitizationBasicToolCfg(flags, name="HGTD_DigitizationBasicTool", **kwargs)
HGTD_OverlayDigitizationToolCfg(flags, name="HGTD_OverlayDigitizationTool", **kwargs)