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