Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
L1CaloFEXSimCfg.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 #
4 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
5 from AthenaConfiguration.ComponentFactory import CompFactory
6 from AthenaCommon.Logging import logging
7 
8 def ReadSCellFromPoolFileCfg(flags, key='SCell'):
9  '''Configure reading SCell container from a Pool file like RDO or ESD'''
10  acc = ComponentAccumulator()
11 
12  # Ensure SCell container is in the input file
13  # TODO this needs to be uncommented once all MC files used in tests contain SCells
14  # e.g. test_trig_mc_v1DevHI_build.py
15  # assert key in flags.Input.Collections or not flags.Input.Collections, 'MC input file is required to contain SCell container'
16 
17  # Need geometry and conditions for the SCell converter from POOL
18  from LArGeoAlgsNV.LArGMConfig import LArGMCfg
19  acc.merge(LArGMCfg(flags))
20 
21  return acc
22 
23 
24 def ReadSCellFromByteStreamCfg(flags, key='SCell', SCmask=True):
26 
27  # Geometry, conditions and cabling setup
28  from TileGeoModel.TileGMConfig import TileGMCfg
29  from LArGeoAlgsNV.LArGMConfig import LArGMCfg
30  from LArCabling.LArCablingConfig import LArLATOMEMappingCfg
31  from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
32  from LArCellRec.LArRAWtoSuperCellConfig import LArRAWtoSuperCellCfg
33  acc.merge(TileGMCfg(flags))
34  acc.merge(LArGMCfg(flags))
35  acc.merge(LArLATOMEMappingCfg(flags))
36  acc.merge(LArOnOffIdMappingSCCfg(flags))
37 
38  # Conversion from ByteStream to LArRawSCContainer
39  decoderTool = CompFactory.LArLATOMEDecoder('LArLATOMEDecoder', ProtectSourceId = True)
40  decoderAlg = CompFactory.LArRawSCDataReadingAlg('LArRawSCDataReadingAlg', LATOMEDecoder=decoderTool)
41  acc.addEventAlgo(decoderAlg)
42 
43  acc.merge(LArRAWtoSuperCellCfg(flags,mask=SCmask, SCellContainerOut=key) )
44 
45  return acc
46 
47 def eFEXTOBEtToolCfg(flags):
48  """
49  Configure the eFEX TOB Et Tool which recalculates isolation variables
50  The tool requires eTowers as inputs (add eTowerMaker algorithm)
51  """
52  acc = ComponentAccumulator()
53 
54  # had to comment this out for now, because it causes a clash with the eTowerMakerFromEfexTowers algorithm
55  # if that gets scheduled
56  #eTowerMakerAlg = CompFactory.LVL1.eTowerMakerFromSuperCells('eTowerMakerFromSuperCells')
57  #acc.addEventAlgo(eTowerMakerAlg)
58 
59  eFEXTOBEtTool = CompFactory.LVL1.eFEXTOBEtTool
60  acc.setPrivateTools(eFEXTOBEtTool())
61 
62  return acc
63 
65  '''Configuration to provide TriggerTowers as input to the Fex simulation'''
66  from AthenaConfiguration.Enums import Format
67  if flags.Input.Format is Format.POOL:
68  # For POOL files produce TT with R2TTMaker
69  from TrigT1CaloSim.TrigT1CaloSimRun2Config import Run2TriggerTowerMakerCfg
70  return Run2TriggerTowerMakerCfg(flags)
71  else:
72  # For RAW decode TT from ByteStream
73  from TrigT1CaloByteStream.LVL1CaloRun2ByteStreamConfig import LVL1CaloRun2ReadBSCfg
74  return LVL1CaloRun2ReadBSCfg(flags)
75 
76 def L1CaloFEXSimCfg(flags, eFexTowerInputs = ["L1_eFexDataTowers","L1_eFexEmulatedTowers"],deadMaterialCorrections=True, outputSuffix="", simulateAltTau=False):
77  from AthenaConfiguration.Enums import Format
78 
79  if not simulateAltTau and flags.DQ.Environment == "tier0":
80  simulateAltTau = True # require alt RoI at tier0 while validating new BDT alg against heuristic
81 
82  acc = ComponentAccumulator()
83 
84  log = logging.getLogger('L1CaloFEXSimCfg')
85 
86 
87  # Configure SCell inputs
88  sCellType = flags.Trigger.L1.L1CaloSuperCellContainerName
89  if flags.Input.Format is Format.POOL:
90  # Read SCell directly from input RDO file unless not necessary
91  if 'L1_eFexEmulatedTowers' in eFexTowerInputs and "L1_eFexEmulatedTowers" not in flags.Input.Collections:
92  acc.merge(ReadSCellFromPoolFileCfg(flags,sCellType))
93  if flags.Input.isMC:
94  # wont have eFexDataTowers available so remove that if it appears in input list
95  eFexTowerInputs = [l for l in eFexTowerInputs if l != "L1_eFexDataTowers"]
96  else:
97  from AthenaConfiguration.Enums import LHCPeriod
98  if flags.GeoModel.Run is LHCPeriod.Run2:
99  # Run-2 data inputs, emulate SCells
100  from TrigT1CaloFexPerf.EmulationConfig import emulateSC_Cfg
101  acc.merge(emulateSC_Cfg(flags))
102  else:
103  # Run-3+ data inputs, decode SCells from ByteStream if needed
104  if 'L1_eFexEmulatedTowers' in eFexTowerInputs and "L1_eFexEmulatedTowers" not in flags.Input.Collections:
105  acc.merge(ReadSCellFromByteStreamCfg(flags,key=sCellType))
106 
107  # Need also TriggerTowers as input .. so reconstruct if not in input collections already
108  if "xAODTriggerTowers" not in flags.Input.Collections:
109  acc.merge(TriggerTowersInputCfg(flags))
110 
111  if 'L1_eFexEmulatedTowers' in eFexTowerInputs and "L1_eFexEmulatedTowers" not in flags.Input.Collections:
112  acc.addEventAlgo( CompFactory.LVL1.eFexTowerBuilder("L1_eFexEmulatedTowers",CaloCellContainerReadKey=sCellType,ApplyMasking=not flags.Input.isMC) ) # builds the emulated towers to use as secondary input to eTowerMaker - name has to match what it gets called in other places to avoid conflict
113 
114  if flags.Trigger.L1.doeFex:
115  if eFexTowerInputs==[]:
116  # no input specified, so use the old eTowerMaker
117  eFEXInputs = CompFactory.LVL1.eTowerMakerFromSuperCells('eTowerMakerFromSuperCells',
118  eSuperCellTowerMapperTool = CompFactory.LVL1.eSuperCellTowerMapper('eSuperCellTowerMapper', SCell=sCellType))
119  else:
120  # if primary is DataTowers, check that caloInputs are enabled (if data towers not already available). If it isn't then skip this
121  if (not flags.Trigger.L1.doCaloInputs) and eFexTowerInputs[0] == "L1_eFexDataTowers" and ("L1_eFexDataTowers" not in flags.Input.Collections):
122  if len(eFexTowerInputs)==1:
123  log.fatal("Requested L1_eFexDataTowers but Trigger.L1.doCaloInputs is False, but not secondary collection given")
124  import sys
125  sys.exit(1)
126  log.warning("Requested L1_eFexDataTowers but Trigger.L1.doCaloInputs is False, falling back to secondary")
127  eFexTowerInputs[0] = eFexTowerInputs[1]
128  eFexTowerInputs[1] = ""
129  eFEXInputs = CompFactory.LVL1.eTowerMakerFromEfexTowers('eTowerMakerFromEfexTowers')
130  eFEXInputs.InputTowers = eFexTowerInputs[0]
131  eFEXInputs.SecondaryInputTowers = eFexTowerInputs[1] if len(eFexTowerInputs) > 1 else ""
132 
133  eFEX = CompFactory.LVL1.eFEXDriver('eFEXDriver')
134  eFEX.eFEXSysSimTool = CompFactory.LVL1.eFEXSysSim('eFEXSysSimTool')
135  eFEX.eFEXSysSimTool.eFEXSimTool = CompFactory.LVL1.eFEXSim('eFEXSimTool')
136  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool = CompFactory.LVL1.eFEXFPGA('eFEXFPGATool')
137 
138  # read algoVersions from menu and configure the algo tools
139  from TrigConfigSvc.TriggerConfigAccess import getL1MenuAccess
140  L1_menu = getL1MenuAccess(flags)
141 
142  em_algoVersion = L1_menu.thresholdExtraInfo("eEM").get("algoVersion", 0)
143  tau_algoVersion = L1_menu.thresholdExtraInfo("eTAU").get("algoVersion", 0)
144 
145  from PathResolver import PathResolver
146  bdtConfigJsonPath = PathResolver.FindCalibFile("Run3L1CaloSimulation/L1CaloFEXSim/eTAU/" + ("bdt_config_v17.json" if tau_algoVersion==2 else "bdt_config_v16.json"))
147 
148  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXegAlgoTool = CompFactory.LVL1.eFEXegAlgo('eFEXegAlgoTool',algoVersion=em_algoVersion,dmCorr=deadMaterialCorrections) # only dmCorrections in data for now
149  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXtauAlgoTool = CompFactory.LVL1.eFEXtauAlgo("eFEXtauAlgo") # heuristic algorithm
150  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXtauBDTAlgoTool = CompFactory.LVL1.eFEXtauBDTAlgo("eFEXtauBDTAlgo", BDTJsonConfigPath=bdtConfigJsonPath)
151  # To dump supercells as a decorator to the tau TOB, set
152  # eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXtauAlgoTool.DumpSuperCells = True
153  # and/or
154  # eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXtauBDTAlgoTool.DumpSuperCells = True
155 
156 
157 
158 
159  # load noise cuts and dm corrections when running on data
160  from IOVDbSvc.IOVDbSvcConfig import addFolders#, addFoldersSplitOnline
161 
162  acc.merge(addFolders(flags,"/TRIGGER/L1Calo/V1/Calibration/EfexNoiseCuts","TRIGGER_OFL" if flags.Input.isMC else "TRIGGER_ONL",className="CondAttrListCollection"))
163  eFEXInputs.NoiseCutsKey = "/TRIGGER/L1Calo/V1/Calibration/EfexNoiseCuts"
164  acc.merge(addFolders(flags,"/TRIGGER/L1Calo/V1/Calibration/EfexEnergyCalib","TRIGGER_OFL" if flags.Input.isMC else "TRIGGER_ONL",className="CondAttrListCollection")) # dmCorr from DB!
165  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXegAlgoTool.DMCorrectionsKey = "/TRIGGER/L1Calo/V1/Calibration/EfexEnergyCalib"
166 
167  acc.addEventAlgo(eFEXInputs)
168  acc.addEventAlgo(eFEX)
169 
170  if simulateAltTau:
171  eFEX.eFEXSysSimTool.Key_eFexAltTauOutputContainer="L1_eTauRoIAlt"
172  eFEX.eFEXSysSimTool.Key_eFexAltTauxTOBOutputContainer="L1_eTauxRoIAlt"
173 
174 
175  if flags.Trigger.L1.dojFex:
176 
177  if flags.Input.Format is not Format.POOL:
178  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import jFexInputByteStreamToolCfg
179  inputjFexTool = acc.popToolsAndMerge(jFexInputByteStreamToolCfg(flags, 'jFexInputBSDecoderTool'))
180 
181  maybeMissingRobs = []
182  decoderTools = []
183 
184  for module_id in inputjFexTool.ROBIDs:
185  maybeMissingRobs.append(module_id)
186 
187  decoderTools += [inputjFexTool]
188  decoderAlg = CompFactory.L1TriggerByteStreamDecoderAlg(name="L1TriggerByteStreamDecoder", DecoderTools=[inputjFexTool], MaybeMissingROBs=maybeMissingRobs)
189  acc.addEventAlgo(decoderAlg)
190 
191  if "L1_jFexEmulatedTowers" not in flags.Input.Collections:
192  from L1CaloFEXAlgos.FexEmulatedTowersConfig import jFexEmulatedTowersCfg
193  acc.merge(jFexEmulatedTowersCfg(flags))
194 
195  from L1CaloFEXCond.L1CaloFEXCondConfig import jFexDBConfig
196  acc.merge(jFexDBConfig(flags))
197 
198  jFEXInputs = CompFactory.LVL1.jTowerMakerFromJfexTowers('jTowerMakerFromJfexTowers')
199  jFEXInputs.IsMC = flags.Input.isMC
200  jFEXInputs.jSuperCellTowerMapperTool = CompFactory.LVL1.jSuperCellTowerMapper('jSuperCellTowerMapper', SCell=sCellType)
201  jFEXInputs.jSuperCellTowerMapperTool.SCellMasking = not flags.Input.isMC
202  # need to set an IsMC property on a tool deep inside the toolstack:
203  jFEX = CompFactory.LVL1.jFEXDriver('jFEXDriver',jFEXSysSimTool=CompFactory.LVL1.jFEXSysSim(
204  'jFEXSysSimTool',jFEXSimTool=CompFactory.LVL1.jFEXSim(
205  'LVL1::jFEXSim',jFEXFPGATool=CompFactory.LVL1.jFEXFPGA(
206  'LVL1::jFEXFPGA',IjFEXFormTOBsTool=CompFactory.LVL1.jFEXFormTOBs(
207  'LVL1::jFEXFormTOBs',IsMC=flags.Input.isMC)))))
208  acc.addEventAlgo(jFEXInputs)
209  acc.addEventAlgo(jFEX)
210 
211 
212  if flags.Trigger.L1.dogFex:
213 
214  if flags.Input.Format is not Format.POOL:
215  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import gFexInputByteStreamToolCfg
216  inputgFexTool = acc.popToolsAndMerge(gFexInputByteStreamToolCfg(flags, 'gFexInputBSDecoderTool'))
217 
218  maybeMissingRobs = []
219  decoderTools = []
220 
221  for module_id in inputgFexTool.ROBIDs:
222  maybeMissingRobs.append(module_id)
223 
224  decoderTools += [inputgFexTool]
225  decoderAlg = CompFactory.L1TriggerByteStreamDecoderAlg(name="L1TriggerByteStreamDecoder", DecoderTools=[inputgFexTool], MaybeMissingROBs=maybeMissingRobs)
226  acc.addEventAlgo(decoderAlg)
227 
228  gFEXInputs = CompFactory.LVL1.gTowerMakerFromGfexTowers('gTowerMakerFromGfexTowers')
229  gFEXInputs.IsMC = flags.Input.isMC
230  gFEXInputs.gSuperCellTowerMapperTool = CompFactory.LVL1.gSuperCellTowerMapper('gSuperCellTowerMapper', SCell=sCellType)
231  gFEXInputs.gSuperCellTowerMapperTool.SCellMasking = not flags.Input.isMC
232 
233  gFEXInputs50 = CompFactory.LVL1.gTowerMakerFromGfexTowers('gTowerMakerFromGfexTowers50')
234  gFEXInputs50.InputDataTowers = "L1_gFexDataTowers50"
235  gFEXInputs50.MyGTowers = "gTower50Container"
236  gFEXInputs50.IsMC = flags.Input.isMC
237  gFEXInputs50.gSuperCellTowerMapperTool = CompFactory.LVL1.gSuperCellTowerMapper('gSuperCellTowerMapper50', SCell=sCellType)
238  gFEXInputs50.gSuperCellTowerMapperTool.SCellMasking = not flags.Input.isMC
239 
240  from L1CaloFEXCond.L1CaloFEXCondConfig import gFexDBConfig
241  acc.merge(gFexDBConfig(flags))
242 
243  gFEX = CompFactory.LVL1.gFEXDriver('gFEXDriver')
244  gFEX.gFEXSysSimTool = CompFactory.LVL1.gFEXSysSim('gFEXSysSimTool')
245  acc.addEventAlgo(gFEXInputs)
246  acc.addEventAlgo(gFEXInputs50)
247  acc.addEventAlgo(gFEX)
248 
249  if flags.Trigger.doHLT:
250  # This will be the case when the offline simulation is actually being run as part of MC
251  # as opposed to running another pass of the simulation on either an MC or data file (e.g in DAOD)
252  # Check the RoI EDM containers are registered in HLT outputs
253  from TrigEDMConfig.TriggerEDM import recordable
254  def check(key):
255  assert key==recordable(key), f'recordable() check failed for {key}'
256  if flags.Trigger.L1.doeFex:
257  check(eFEX.eFEXSysSimTool.Key_eFexEMOutputContainer)
258  check(eFEX.eFEXSysSimTool.Key_eFexTauOutputContainer)
259  if (simulateAltTau):
260  check(eFEX.eFEXSysSimTool.Key_eFexAltTauOutputContainer)
261  if flags.Trigger.L1.dojFex:
262  check(jFEX.jFEXSysSimTool.Key_jFexSRJetOutputContainer)
263  check(jFEX.jFEXSysSimTool.Key_jFexLRJetOutputContainer)
264  check(jFEX.jFEXSysSimTool.Key_jFexTauOutputContainer)
265  check(jFEX.jFEXSysSimTool.Key_jFexSumETOutputContainer)
266  check(jFEX.jFEXSysSimTool.Key_jFexMETOutputContainer)
267  check(jFEX.jFEXSysSimTool.Key_jFexFwdElOutputContainer)
268  if flags.Trigger.L1.dogFex:
269  check(gFEX.gFEXSysSimTool.Key_gFexSRJetOutputContainer)
270  check(gFEX.gFEXSysSimTool.Key_gFexLRJetOutputContainer)
271  check(gFEX.gFEXSysSimTool.Key_gFexRhoOutputContainer)
272  check(gFEX.gFEXSysSimTool.Key_gScalarEJwojOutputContainer)
273  check(gFEX.gFEXSysSimTool.Key_gMETComponentsJwojOutputContainer)
274  check(gFEX.gFEXSysSimTool.Key_gMHTComponentsJwojOutputContainer)
275  check(gFEX.gFEXSysSimTool.Key_gMSTComponentsJwojOutputContainer)
276  check(gFEX.gFEXSysSimTool.Key_gMETComponentsNoiseCutOutputContainer)
277  check(gFEX.gFEXSysSimTool.Key_gMETComponentsRmsOutputContainer)
278  check(gFEX.gFEXSysSimTool.Key_gScalarENoiseCutOutputContainer)
279  check(gFEX.gFEXSysSimTool.Key_gScalarERmsOutputContainer)
280  else:
281  # Rename outputs for monitoring resimulation to avoid clash with standard SG keys
282  def getSimHandle(key):
283  """
284  Add 'Sim' to the standard handle path and include user-specified suffix
285  """
286  key += outputSuffix
287  if not key.endswith("Sim"): key += "Sim"
288  return key
289 
290  if flags.Trigger.L1.doeFex:
291  eFEX.eFEXSysSimTool.Key_eFexEMOutputContainer=getSimHandle("L1_eEMRoI")
292  eFEX.eFEXSysSimTool.Key_eFexTauOutputContainer=getSimHandle("L1_eTauRoI")
293  eFEX.eFEXSysSimTool.Key_eFexEMxTOBOutputContainer=getSimHandle("L1_eEMxRoI")
294  eFEX.eFEXSysSimTool.Key_eFexTauxTOBOutputContainer=getSimHandle("L1_eTauxRoI")
295  if simulateAltTau:
296  eFEX.eFEXSysSimTool.Key_eFexAltTauOutputContainer=getSimHandle("L1_eTauRoIAlt")
297  eFEX.eFEXSysSimTool.Key_eFexAltTauxTOBOutputContainer=getSimHandle("L1_eTauxRoIAlt")
298 
299  if flags.Trigger.L1.dojFex:
300  jFEX.jFEXSysSimTool.Key_jFexSRJetOutputContainer=getSimHandle("L1_jFexSRJetRoI")
301  jFEX.jFEXSysSimTool.Key_jFexLRJetOutputContainer=getSimHandle("L1_jFexLRJetRoI")
302  jFEX.jFEXSysSimTool.Key_jFexTauOutputContainer=getSimHandle("L1_jFexTauRoI")
303  jFEX.jFEXSysSimTool.Key_jFexSumETOutputContainer=getSimHandle("L1_jFexSumETRoI")
304  jFEX.jFEXSysSimTool.Key_jFexMETOutputContainer=getSimHandle("L1_jFexMETRoI")
305  jFEX.jFEXSysSimTool.Key_jFexFwdElOutputContainer=getSimHandle("L1_jFexFwdElRoI")
306  jFEX.jFEXSysSimTool.Key_xTobOutKey_jJ=getSimHandle("L1_jFexSRJetxRoI")
307  jFEX.jFEXSysSimTool.Key_xTobOutKey_jLJ=getSimHandle("L1_jFexLRJetxRoI")
308  jFEX.jFEXSysSimTool.Key_xTobOutKey_jTau=getSimHandle("L1_jFexTauxRoI")
309  jFEX.jFEXSysSimTool.Key_xTobOutKey_jEM=getSimHandle("L1_jFexFwdElxRoI")
310  if flags.Trigger.L1.dogFex:
311  gFEX.gFEXSysSimTool.Key_gFexSRJetOutputContainer=getSimHandle("L1_gFexSRJetRoI")
312  gFEX.gFEXSysSimTool.Key_gFexLRJetOutputContainer=getSimHandle("L1_gFexLRJetRoI")
313  gFEX.gFEXSysSimTool.Key_gFexRhoOutputContainer=getSimHandle("L1_gFexRhoRoI")
314  gFEX.gFEXSysSimTool.Key_gScalarEJwojOutputContainer=getSimHandle("L1_gScalarEJwoj")
315  gFEX.gFEXSysSimTool.Key_gMETComponentsJwojOutputContainer=getSimHandle("L1_gMETComponentsJwoj")
316  gFEX.gFEXSysSimTool.Key_gMHTComponentsJwojOutputContainer=getSimHandle("L1_gMHTComponentsJwoj")
317  gFEX.gFEXSysSimTool.Key_gMSTComponentsJwojOutputContainer=getSimHandle("L1_gMSTComponentsJwoj")
318  gFEX.gFEXSysSimTool.Key_gMETComponentsNoiseCutOutputContainer=getSimHandle("L1_gMETComponentsNoiseCut")
319  gFEX.gFEXSysSimTool.Key_gMETComponentsRmsOutputContainer=getSimHandle("L1_gMETComponentsRms")
320  gFEX.gFEXSysSimTool.Key_gScalarENoiseCutOutputContainer=getSimHandle("L1_gScalarENoiseCut")
321  gFEX.gFEXSysSimTool.Key_gScalarERmsOutputContainer=getSimHandle("L1_gScalarERms")
322 
323  return acc
324 
325 
326 if __name__ == '__main__':
327 
330  import argparse
331  p = argparse.ArgumentParser()
332  p.add_argument('-i', '--input',
333  metavar='KEY',
334  default='ttbar',
335  help='Key of the input from TrigValInputs to be used, default=%(default)s')
336  p.add_argument('-e', '--execute',
337  action='store_true',
338  help='After building the configuration, also process a few events')
339  p.add_argument('-n', '--nevents',
340  metavar='N',
341  type=int,
342  default=25,
343  help='Number of events to process if --execute is used, default=%(default)s')
344  p.add_argument('-d', '--efexdebug',
345  action='store_true',
346  help='Activate DEBUG mode for eFEX driver .. this option is required by a unit test')
347 
348  args = p.parse_args()
349 
350 
353  from AthenaConfiguration.AllConfigFlags import initConfigFlags
354  from TrigValTools.TrigValSteering import Input
355  import os
356 
357  flags = initConfigFlags()
358  flags.Common.isOnline = True
359  flags.Input.Files = [args.input] if os.path.isfile(args.input) else Input.get_input(args.input).paths
360  if not flags.Input.isMC:
361  from AthenaConfiguration.TestDefaults import defaultGeometryTags
362  flags.GeoModel.AtlasVersion = defaultGeometryTags.autoconfigure(flags)
363  from AthenaConfiguration.Enums import LHCPeriod
364  flags.IOVDb.GlobalTag = 'CONDBR2-HLTP-2023-01' if flags.GeoModel.Run is LHCPeriod.Run3 else 'CONDBR2-HLTP-2018-04'
365  else:
366  from AthenaConfiguration.TestDefaults import defaultConditionsTags
367  flags.IOVDb.GlobalTag = defaultConditionsTags.RUN3_MC
368  flags.Output.AODFileName = 'AOD.pool.root'
369  flags.Exec.MaxEvents = args.nevents
370  flags.Concurrency.NumThreads = 1
371  flags.Concurrency.NumConcurrentEvents = 1
372  flags.Scheduler.ShowDataDeps = True
373  flags.Scheduler.CheckDependencies = True
374  flags.Scheduler.ShowDataFlow = True
375  flags.Trigger.EDMVersion = 3
376  flags.Trigger.doLVL1 = True
377  flags.Trigger.enableL1CaloPhase1 = True
378  flags.Trigger.triggerConfig = 'FILE'
379 
380  # Enable only calo for this test
381  from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
382  setupDetectorFlags(flags, ['LAr','Tile','MBTS'], toggle_geometry=True)
383 
384  flags.lock()
385 
386 
389  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
390  acc = MainServicesCfg(flags)
391 
392  from AthenaConfiguration.Enums import Format
393  if flags.Input.Format == Format.POOL:
394  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
395  acc.merge(PoolReadCfg(flags))
396  else:
397  from TriggerJobOpts.TriggerByteStreamConfig import ByteStreamReadCfg
398  acc.merge(ByteStreamReadCfg(flags))
399 
400  from TrigConfigSvc.TrigConfigSvcCfg import L1ConfigSvcCfg, generateL1Menu, createL1PrescalesFileFromMenu
401  generateL1Menu(flags)
403  acc.merge(L1ConfigSvcCfg(flags))
404 
405  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
406  FexEDMList = [
407  'xAOD::eFexEMRoIContainer#L1_eEMRoI','xAOD::eFexEMRoIAuxContainer#L1_eEMRoIAux.',
408  'xAOD::eFexTauRoIContainer#L1_eTauRoI','xAOD::eFexTauRoIAuxContainer#L1_eTauRoIAux.',
409  'xAOD::jFexTauRoIContainer#L1_jFexTauRoI','xAOD::jFexTauRoIAuxContainer#L1_jFexTauRoIAux.',
410  'xAOD::jFexSRJetRoIContainer#L1_jFexSRJetRoI','xAOD::jFexSRJetRoIAuxContainer#L1_jFexSRJetRoIAux.',
411  'xAOD::jFexLRJetRoIContainer#L1_jFexLRJetRoI','xAOD::jFexLRJetRoIAuxContainer#L1_jFexLRJetRoIAux.',
412  'xAOD::jFexMETRoIContainer#L1_jFexMETRoI','xAOD::jFexMETRoIAuxContainer#L1_jFexMETRoIAux.',
413  'xAOD::jFexSumETRoIContainer#L1_jFexSumETRoI','xAOD::jFexSumETRoIAuxContainer#L1_jFexSumETRoIAux.',
414  'xAOD::gFexJetRoIContainer#L1_gFexSRJetRoI','xAOD::gFexJetRoIAuxContainer#L1_gFexSRJetRoIAux.',
415  'xAOD::gFexJetRoIContainer#L1_gFexLRJetRoI','xAOD::gFexJetRoIAuxContainer#L1_gFexLRJetRoIAux.',
416  'xAOD::gFexJetRoIContainer#L1_gFexRhoRoI','xAOD::gFexJetRoIAuxContainer#L1_gFexRhoRoIAux.',
417  'xAOD::gFexGlobalRoIContainer#L1_gScalarEJwoj','xAOD::gFexGlobalRoIAuxContainer#L1_gScalarEJwojAux.',
418  'xAOD::gFexGlobalRoIContainer#L1_gMETComponentsJwoj','xAOD::gFexGlobalRoIAuxContainer#L1_gMETComponentsJwojAux.',
419  'xAOD::gFexGlobalRoIContainer#L1_gMHTComponentsJwoj','xAOD::gFexGlobalRoIAuxContainer#L1_gMHTComponentsJwojAux.',
420  'xAOD::gFexGlobalRoIContainer#L1_gMSTComponentsJwoj','xAOD::gFexGlobalRoIAuxContainer#L1_gMSTComponentsJwojAux.',
421  'xAOD::gFexGlobalRoIContainer#L1_gMETComponentsNoiseCut','xAOD::gFexGlobalRoIAuxContainer#L1_gMETComponentsNoiseCutAux.',
422  'xAOD::gFexGlobalRoIContainer#L1_gMETComponentsRms','xAOD::gFexGlobalRoIAuxContainer#L1_gMETComponentsRmsAux.',
423  'xAOD::gFexGlobalRoIContainer#L1_gScalarENoiseCut','xAOD::gFexGlobalRoIAuxContainer#L1_gScalarENoiseCutAux.',
424  'xAOD::gFexGlobalRoIContainer#L1_gScalarERms','xAOD::gFexGlobalRoIAuxContainer#L1_gScalarERmsAux.',
425 
426  ]
427  acc.merge(OutputStreamCfg(flags, 'AOD', ItemList=FexEDMList))
428 
429 
432  acc.merge(L1CaloFEXSimCfg(flags))
433  if args.efexdebug:
434  from AthenaCommon.Constants import DEBUG
435  acc.getEventAlgo("eFEXDriver").OutputLevel = DEBUG
436 
437 
440  with open("L1Sim.pkl", "wb") as f:
441  acc.store(f)
442  f.close()
443 
444  if args.execute:
445  sc = acc.run()
446  if sc.isFailure():
447  exit(1)
L1CaloFEXSimCfg.ReadSCellFromByteStreamCfg
def ReadSCellFromByteStreamCfg(flags, key='SCell', SCmask=True)
Definition: L1CaloFEXSimCfg.py:24
L1CaloFEXCondConfig.jFexDBConfig
def jFexDBConfig(flags, name="jFEXCondAlgo")
Definition: L1CaloFEXCondConfig.py:8
PathResolver::FindCalibFile
static std::string FindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.h:108
L1CaloFEXSimCfg.TriggerTowersInputCfg
def TriggerTowersInputCfg(flags)
Definition: L1CaloFEXSimCfg.py:64
LArCablingConfig.LArOnOffIdMappingSCCfg
def LArOnOffIdMappingSCCfg(configFlags)
Definition: LArCablingConfig.py:65
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
FEXReprocessingRun3.getSimHandle
def getSimHandle(key)
Definition: FEXReprocessingRun3.py:87
python.EmulationConfig.emulateSC_Cfg
def emulateSC_Cfg(flags, CellsIn="SeedLessFS", CellsOut="")
Definition: EmulationConfig.py:3
LArRAWtoSuperCellConfig.LArRAWtoSuperCellCfg
def LArRAWtoSuperCellCfg(flags, name="LArRAWtoSuperCell", mask=True, SCellContainerOut="", SCIn="", doReco=False, bcidShift=0)
Definition: LArRAWtoSuperCellConfig.py:8
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, keepProvenanceTagsRegEx=None, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:16
python.TrigConfigSvcCfg.generateL1Menu
def generateL1Menu(flags)
Definition: TrigConfigSvcCfg.py:189
L1CaloFEXSimCfg.L1CaloFEXSimCfg
def L1CaloFEXSimCfg(flags, eFexTowerInputs=["L1_eFexDataTowers","L1_eFexEmulatedTowers"], deadMaterialCorrections=True, outputSuffix="", simulateAltTau=False)
Definition: L1CaloFEXSimCfg.py:76
python.ByteStreamConfig.ByteStreamReadCfg
def ByteStreamReadCfg(flags, type_names=None)
Definition: Event/ByteStreamCnvSvc/python/ByteStreamConfig.py:25
LVL1CaloRun2ByteStreamConfig.LVL1CaloRun2ReadBSCfg
def LVL1CaloRun2ReadBSCfg(flags, forRoIBResultToxAOD=False)
Definition: LVL1CaloRun2ByteStreamConfig.py:121
L1CaloFEXByteStreamConfig.jFexInputByteStreamToolCfg
def jFexInputByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:232
LArCablingConfig.LArLATOMEMappingCfg
def LArLATOMEMappingCfg(configFlags)
Definition: LArCablingConfig.py:95
python.TriggerConfigAccess.getL1MenuAccess
L1MenuAccess getL1MenuAccess(flags=None)
Definition: TriggerConfigAccess.py:129
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:260
Constants
some useful constants -------------------------------------------------—
python.IOVDbSvcConfig.addFolders
def addFolders(flags, folderStrings, detDb=None, className=None, extensible=False, tag=None, db=None, modifiers='')
Definition: IOVDbSvcConfig.py:81
calibdata.exit
exit
Definition: calibdata.py:236
L1CaloFEXSimCfg.eFEXTOBEtToolCfg
def eFEXTOBEtToolCfg(flags)
Definition: L1CaloFEXSimCfg.py:47
LArGMConfig.LArGMCfg
def LArGMCfg(flags)
Definition: LArGMConfig.py:8
python.DetectorConfigFlags.setupDetectorFlags
def setupDetectorFlags(flags, custom_list=None, use_metadata=False, toggle_geometry=False, validate_only=False, keep_beampipe=False)
Definition: DetectorConfigFlags.py:291
L1CaloFEXSimCfg.ReadSCellFromPoolFileCfg
def ReadSCellFromPoolFileCfg(flags, key='SCell')
Definition: L1CaloFEXSimCfg.py:8
L1CaloFEXByteStreamConfig.gFexInputByteStreamToolCfg
def gFexInputByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:275
LArNewCalib_Delay_OFC_Cali.check
check
Definition: LArNewCalib_Delay_OFC_Cali.py:267
python.TrigConfigSvcCfg.L1ConfigSvcCfg
def L1ConfigSvcCfg(flags)
Definition: TrigConfigSvcCfg.py:203
Trk::open
@ open
Definition: BinningType.h:40
python.TrigConfigSvcCfg.createL1PrescalesFileFromMenu
def createL1PrescalesFileFromMenu(flags, Optional[dict[str, float]] prescales=None)
Definition: TrigConfigSvcCfg.py:165
TrigT1CaloSimRun2Config.Run2TriggerTowerMakerCfg
def Run2TriggerTowerMakerCfg(flags, name='Run2TriggerTowerMaker25ns')
Definition: TrigT1CaloSimRun2Config.py:10
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
FexEmulatedTowersConfig.jFexEmulatedTowersCfg
def jFexEmulatedTowersCfg(flags, name="jFexEmulatedTowerMaker", writeKey="L1_jFexEmulatedTowers")
Definition: FexEmulatedTowersConfig.py:9
L1CaloFEXCondConfig.gFexDBConfig
def gFexDBConfig(flags, name="gFEXCondAlgo")
Definition: L1CaloFEXCondConfig.py:34
python.TriggerEDM.recordable
def recordable(arg, runVersion=3)
Definition: TriggerEDM.py:34
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
L1CaloFEXSimCfg
Definition: L1CaloFEXSimCfg.py:1
TileGMConfig.TileGMCfg
def TileGMCfg(flags)
Definition: TileGMConfig.py:7