ATLAS Offline Software
RPC_DigitizationConfig.py
Go to the documentation of this file.
1 """Define methods to construct configured RPC Digitization tools and algorithms
2 
3 Copyright (C) 2002-2023 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 LHCPeriod, ProductionStep
8 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
9 from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
10 from MuonConfig.MuonByteStreamCnvTestConfig import RpcDigitToRpcRDOCfg
11 from MuonConfig.MuonByteStreamCnvTestConfig import NrpcDigitToNrpcRDOCfg
12 from MuonConfig.MuonCablingConfig import RPCCablingConfigCfg
13 from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
14 from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
15 from DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
16 
17 
18 # The earliest and last bunch crossing times for which interactions will be sent
19 # to the RpcDigitizationTool.
21  return -150
22 
23 
25  return 125
26 
27 
28 def RPC_RangeCfg(flags, name="RPC_Range", **kwargs):
29  """Return a PileUpXingFolder tool configured for RPC"""
30  kwargs.setdefault("FirstXing", RPC_FirstXing())
31  kwargs.setdefault("LastXing", RPC_LastXing())
32  kwargs.setdefault("CacheRefreshFrequency", 1.0)
33  kwargs.setdefault("ItemList", ["RPCSimHitCollection#RPC_Hits"])
34  return PileUpXingFolderCfg(flags, name, **kwargs)
35 
36 
37 def RPC_DigitizationToolCommonCfg(flags, name="RpcDigitizationTool", **kwargs):
38  """Return ComponentAccumulator with configured RpcDigitizationTool"""
39  acc = ComponentAccumulator()
40  if flags.GeoModel.Run < LHCPeriod.Run3: # Run 3 and later currently do not use conditions
41  from MuonConfig.MuonCondAlgConfig import RpcCondDbAlgCfg
42  acc.merge(RpcCondDbAlgCfg(flags))
43  if flags.Digitization.DoXingByXingPileUp:
44  kwargs.setdefault("FirstXing", RPC_FirstXing())
45  kwargs.setdefault("LastXing", RPC_LastXing())
46  kwargs.setdefault("OutputObjectName", "RPC_DIGITS")
47  if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
48  kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "RPC_SDO")
49  else:
50  kwargs.setdefault("OutputSDOName", "RPC_SDO")
51  # config
52  kwargs.setdefault("DeadTime", 100)
53  kwargs.setdefault("PatchForRpcTime", True)
54  # kwargs.setdefault("PatchForRpcTimeShift", 9.6875)
55  kwargs.setdefault("PatchForRpcTimeShift", 12.5)
56  kwargs.setdefault("turnON_efficiency", True)
57  kwargs.setdefault("turnON_clustersize", True)
58  kwargs.setdefault("ClusterSize1_2uncorr", False)
59  kwargs.setdefault("CutProjectedTracks", 100)
60  kwargs.setdefault("RPCInfoFromDb", True)
61  kwargs.setdefault("Efficiency_fromCOOL", True)
62  kwargs.setdefault("EfficiencyPatchForBMShighEta", False)
63  kwargs.setdefault("ClusterSize_fromCOOL", True)
64  kwargs.setdefault("IgnoreRunDependentConfig", False)
65  kwargs.setdefault("PhiAndEtaEff_A",[0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938])
66  kwargs.setdefault("OnlyPhiEff_A" ,[0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022])
67  kwargs.setdefault("OnlyEtaEff_A" ,[0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022])
68  kwargs.setdefault("PhiAndEtaEff_C",[0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938])
69  kwargs.setdefault("OnlyPhiEff_C" ,[0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022])
70  kwargs.setdefault("OnlyEtaEff_C" ,[0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022])
71  kwargs.setdefault("FracClusterSize1_A", [0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664])
72  kwargs.setdefault("FracClusterSize2_A", [0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986])
73  kwargs.setdefault("FracClusterSizeTail_A",[0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035 ])
74  kwargs.setdefault("MeanClusterSizeTail_A",[0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598])
75  kwargs.setdefault("FracClusterSize1_C", [0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664])
76  kwargs.setdefault("FracClusterSize2_C", [0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986])
77  kwargs.setdefault("FracClusterSizeTail_C",[0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035 ])
78  kwargs.setdefault("MeanClusterSizeTail_C",[0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598])
79  from RngComps.RngCompsConfig import AthRNGSvcCfg
80  kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name)
81  RpcDigitizationTool = CompFactory.RpcDigitizationTool(name, **kwargs)
82  acc.setPrivateTools(RpcDigitizationTool)
83  return acc
84 
85 
86 def RPC_DigitizationToolCfg(flags, name="RpcDigitizationTool", **kwargs):
87  """Return ComponentAccumulator with configured RpcDigitizationTool"""
88  acc = ComponentAccumulator()
89  if flags.Digitization.PileUp:
90  intervals = []
91  if not flags.Digitization.DoXingByXingPileUp:
92  intervals += [acc.popToolsAndMerge(RPC_RangeCfg(flags))]
93  kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)).name)
94  else:
95  kwargs.setdefault("PileUpMergeSvc", '')
96  kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
97  kwargs.setdefault("OutputObjectName", "RPC_DIGITS")
98  if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
99  kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "RPC_SDO")
100  else:
101  kwargs.setdefault("OutputSDOName", "RPC_SDO")
102  tool = acc.popToolsAndMerge(RPC_DigitizationToolCommonCfg(flags, name, **kwargs))
103  acc.setPrivateTools(tool)
104  return acc
105 
106 
107 def RPC_OverlayDigitizationToolCfg(flags, name="Rpc_OverlayDigitizationTool", **kwargs):
108  """Return ComponentAccumulator with RpcDigitizationTool configured for Overlay"""
109  kwargs.setdefault("OnlyUseContainerName", False)
110  kwargs.setdefault("OutputObjectName", flags.Overlay.SigPrefix + "RPC_DIGITS")
111  kwargs.setdefault("OutputSDOName", flags.Overlay.SigPrefix + "RPC_SDO")
112  kwargs.setdefault("PileUpMergeSvc", '')
113  return RPC_DigitizationToolCommonCfg(flags, name, **kwargs)
114 
115 
116 def RPC_OutputCfg(flags):
117  """Return ComponentAccumulator with Output for RPC. Not standalone."""
118  acc = ComponentAccumulator()
119  if flags.Output.doWriteRDO:
120  ItemList = ["RpcPadContainer#*"]
121  if flags.Muon.enableNRPC:
122  ItemList += [ 'xAOD::NRPCRDOContainer#*' , 'xAOD::NRPCRDOAuxContainer#*' ]
123  if flags.Digitization.EnableTruth:
124  ItemList += ["MuonSimDataCollection#*"]
125  acc.merge(TruthDigitizationOutputCfg(flags))
126  acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
127  return acc
128 
129 
130 def RPC_DigitizationBasicCfg(flags, **kwargs):
131  """Return ComponentAccumulator for RPC digitization"""
132  acc = MuonGeoModelCfg(flags)
133  if "PileUpTools" not in kwargs:
134  PileUpTools = acc.popToolsAndMerge(RPC_DigitizationToolCfg(flags))
135  kwargs["PileUpTools"] = PileUpTools
136  acc.merge(PileUpToolsCfg(flags, **kwargs))
137  return acc
138 
139 
140 def RPC_OverlayDigitizationBasicCfg(flags, **kwargs):
141  """Return ComponentAccumulator with RPC Overlay digitization"""
142  acc = MuonGeoModelCfg(flags)
143 
144  if flags.Common.ProductionStep != ProductionStep.FastChain:
145  from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
146  acc.merge(SGInputLoaderCfg(flags, ["RPCSimHitCollection#RPC_Hits"]))
147 
148  kwargs.setdefault("DigitizationTool", acc.popToolsAndMerge(RPC_OverlayDigitizationToolCfg(flags)))
149 
150  if flags.Concurrency.NumThreads > 0:
151  kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
152 
153  # Set common overlay extra inputs
154  kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
155 
156  the_alg = CompFactory.MuonDigitizer(name="RPC_OverlayDigitizer", **kwargs)
157  acc.addEventAlgo(the_alg)
158  return acc
159 
160 
161 # with output defaults
162 def RPC_DigitizationCfg(flags, **kwargs):
163  """Return ComponentAccumulator for RPC digitization and Output"""
164  acc = RPC_DigitizationBasicCfg(flags, **kwargs)
165  acc.merge(RPC_OutputCfg(flags))
166  return acc
167 
168 
170  """Return ComponentAccumulator with RPC digitization and Digit to RPCPAD RDO"""
171  acc = RPC_DigitizationCfg(flags)
172  acc.merge(RPCCablingConfigCfg(flags))
173  acc.merge(RpcDigitToRpcRDOCfg(flags))
174  if flags.Muon.enableNRPC:
175  acc.merge(NrpcDigitToNrpcRDOCfg(flags))
176  return acc
177 
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
python.TruthDigitizationOutputConfig.TruthDigitizationOutputCfg
def TruthDigitizationOutputCfg(flags)
Definition: TruthDigitizationOutputConfig.py:9
python.RPC_DigitizationConfig.RPC_OutputCfg
def RPC_OutputCfg(flags)
Definition: RPC_DigitizationConfig.py:116
python.MuonCondAlgConfig.RpcCondDbAlgCfg
def RpcCondDbAlgCfg(flags, **kwargs)
Definition: MuonCondAlgConfig.py:78
python.MuonByteStreamCnvTestConfig.RpcDigitToRpcRDOCfg
def RpcDigitToRpcRDOCfg(flags, name="RpcDigitToRpcRDO", **kwargs)
Definition: MuonByteStreamCnvTestConfig.py:144
python.RPC_DigitizationConfig.RPC_OverlayDigitizationToolCfg
def RPC_OverlayDigitizationToolCfg(flags, name="Rpc_OverlayDigitizationTool", **kwargs)
Definition: RPC_DigitizationConfig.py:107
SGInputLoaderConfig.SGInputLoaderCfg
def SGInputLoaderCfg(flags, Load=None, **kwargs)
Definition: SGInputLoaderConfig.py:7
python.RPC_DigitizationConfig.RPC_DigitizationCfg
def RPC_DigitizationCfg(flags, **kwargs)
Definition: RPC_DigitizationConfig.py:162
python.RPC_DigitizationConfig.RPC_DigitizationToolCfg
def RPC_DigitizationToolCfg(flags, name="RpcDigitizationTool", **kwargs)
Definition: RPC_DigitizationConfig.py:86
python.PileUpToolsConfig.PileUpToolsCfg
def PileUpToolsCfg(flags, **kwargs)
Definition: PileUpToolsConfig.py:14
python.RPC_DigitizationConfig.RPC_OverlayDigitizationBasicCfg
def RPC_OverlayDigitizationBasicCfg(flags, **kwargs)
Definition: RPC_DigitizationConfig.py:140
python.MuonByteStreamCnvTestConfig.NrpcDigitToNrpcRDOCfg
def NrpcDigitToNrpcRDOCfg(flags, name="NrpcDigitToNrpcRDO", **kwargs)
Definition: MuonByteStreamCnvTestConfig.py:161
python.RPC_DigitizationConfig.RPC_RangeCfg
def RPC_RangeCfg(flags, name="RPC_Range", **kwargs)
Definition: RPC_DigitizationConfig.py:28
python.MuonCablingConfig.RPCCablingConfigCfg
def RPCCablingConfigCfg(flags)
Definition: MuonCablingConfig.py:26
python.MuonGeometryConfig.MuonGeoModelCfg
def MuonGeoModelCfg(flags)
Definition: MuonGeometryConfig.py:28
python.RPC_DigitizationConfig.RPC_LastXing
def RPC_LastXing()
Definition: RPC_DigitizationConfig.py:24
python.RPC_DigitizationConfig.RPC_DigitizationBasicCfg
def RPC_DigitizationBasicCfg(flags, **kwargs)
Definition: RPC_DigitizationConfig.py:130
python.PileUpMergeSvcConfig.PileUpXingFolderCfg
def PileUpXingFolderCfg(flags, name="PileUpXingFolder", **kwargs)
Definition: PileUpMergeSvcConfig.py:35
python.RPC_DigitizationConfig.RPC_DigitizationDigitToRDOCfg
def RPC_DigitizationDigitToRDOCfg(flags)
Definition: RPC_DigitizationConfig.py:169
python.RPC_DigitizationConfig.RPC_DigitizationToolCommonCfg
def RPC_DigitizationToolCommonCfg(flags, name="RpcDigitizationTool", **kwargs)
Definition: RPC_DigitizationConfig.py:37
python.RPC_DigitizationConfig.RPC_FirstXing
def RPC_FirstXing()
Definition: RPC_DigitizationConfig.py:20
python.PileUpMergeSvcConfig.PileUpMergeSvcCfg
def PileUpMergeSvcCfg(flags, name="PileUpMergeSvc", Intervals=[], **kwargs)
Definition: PileUpMergeSvcConfig.py:10
RngCompsConfig.AthRNGSvcCfg
def AthRNGSvcCfg(flags, name="AthRNGSvc")
Definition: RngCompsConfig.py:51