ATLAS Offline Software
L1CaloFEXSimCfg.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2002-2025 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  doV6Mapping=False # latome fex input mapping if different between v5 and v6 ... for now only switching to v6 in data
112  if not flags.Input.isMC and len(flags.Input.RunNumbers)>0: # in HLT reprocessing jobs, the runNumbers list will be empty ... have to default to v5 for now for these jobs
113  from LArConditionsCommon.LArRunFormat import getLArDTInfoForRun
114  runinfo = getLArDTInfoForRun(flags.Input.RunNumbers[0], connstring="COOLONL_LAR/CONDBR2")
115  doV6Mapping = (runinfo.FWversion()==6)
116 
117  if doV6Mapping and len(flags.Input.RunNumbers)>0:
118  # add required dbOverride (don't do in athena HLT where we will rely on LAr/LATOME to have set it to the right thing)
119  from IOVDbSvc.IOVDbSvcConfig import addOverride
120  acc.merge( addOverride(flags,folder="/LAR/Identifier/LatomeMapping",tag="LARIdentifierLatomeMapping-fw6") )
121 
122 
123  if flags.Trigger.L1.doeFex:
124  if 'L1_eFexEmulatedTowers' in eFexTowerInputs and "L1_eFexEmulatedTowers" not in flags.Input.Collections:
125  builderAlg = CompFactory.LVL1.eFexTowerBuilder("L1_eFexEmulatedTowers",UseLATOMEv6Mapping=doV6Mapping,
126  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
127  if flags.Input.isMC: builderAlg.LArLatomeHeaderKey=""
128  elif doV6Mapping or len(flags.Input.RunNumbers)==0:
129  builderAlg.MappingFile='' # need to regenerate mapping on-the-fly for v6 or in athena hlt jobs
130  # if regenerating mapping file and this is data, we will need the LATOME headers, otherwise don't use them
131  from LArByteStream.LArRawSCDataReadingConfig import LArRawSCDataReadingCfg
132  acc.merge(LArRawSCDataReadingCfg(flags))
133 
134  acc.addEventAlgo( builderAlg )
135 
136  if eFexTowerInputs==[]:
137  # no input specified, so use the old eTowerMaker
138  eFEXInputs = CompFactory.LVL1.eTowerMakerFromSuperCells('eTowerMakerFromSuperCells',
139  eSuperCellTowerMapperTool = CompFactory.LVL1.eSuperCellTowerMapper('eSuperCellTowerMapper', SCell=sCellType))
140  else:
141  # if primary is DataTowers, check that caloInputs are enabled (if data towers not already available). If it isn't then skip this
142  if (not flags.Trigger.L1.doCaloInputs) and eFexTowerInputs[0] == "L1_eFexDataTowers" and ("L1_eFexDataTowers" not in flags.Input.Collections):
143  if len(eFexTowerInputs)==1:
144  log.fatal("Requested L1_eFexDataTowers but Trigger.L1.doCaloInputs is False, but not secondary collection given")
145  import sys
146  sys.exit(1)
147  log.warning("Requested L1_eFexDataTowers but Trigger.L1.doCaloInputs is False, falling back to secondary")
148  eFexTowerInputs[0] = eFexTowerInputs[1]
149  eFexTowerInputs[1] = ""
150  eFEXInputs = CompFactory.LVL1.eTowerMakerFromEfexTowers('eTowerMakerFromEfexTowers')
151  eFEXInputs.InputTowers = eFexTowerInputs[0]
152  eFEXInputs.SecondaryInputTowers = eFexTowerInputs[1] if len(eFexTowerInputs) > 1 else ""
153 
154  eFEX = CompFactory.LVL1.eFEXDriver('eFEXDriver')
155  eFEX.eFEXSysSimTool = CompFactory.LVL1.eFEXSysSim('eFEXSysSimTool')
156  eFEX.eFEXSysSimTool.eFEXSimTool = CompFactory.LVL1.eFEXSim('eFEXSimTool')
157  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool = CompFactory.LVL1.eFEXFPGA('eFEXFPGATool')
158 
159  # read algoVersions from menu and configure the algo tools
160  from TrigConfigSvc.TriggerConfigAccess import getL1MenuAccess
161  L1_menu = getL1MenuAccess(flags)
162 
163  em_algoVersion = L1_menu.thresholdExtraInfo("eEM").get("algoVersion", 0)
164  tau_algoVersion = L1_menu.thresholdExtraInfo("eTAU").get("algoVersion", 0)
165 
166  from PathResolver import PathResolver
167  bdtConfigJsonPath = PathResolver.FindCalibFile("Run3L1CaloSimulation/L1CaloFEXSim/eTAU/" + ("bdt_config_v17.json" if tau_algoVersion==2 else "bdt_config_v16.json"))
168 
169  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXegAlgoTool = CompFactory.LVL1.eFEXegAlgo('eFEXegAlgoTool',algoVersion=em_algoVersion,dmCorr=deadMaterialCorrections) # only dmCorrections in data for now
170  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXtauAlgoTool = CompFactory.LVL1.eFEXtauAlgo("eFEXtauAlgo") # heuristic algorithm
171  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXtauBDTAlgoTool = CompFactory.LVL1.eFEXtauBDTAlgo("eFEXtauBDTAlgo", BDTJsonConfigPath=bdtConfigJsonPath)
172  # To dump supercells as a decorator to the tau TOB, set
173  # eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXtauAlgoTool.DumpSuperCells = True
174  # and/or
175  # eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXtauBDTAlgoTool.DumpSuperCells = True
176 
177 
178 
179 
180  # load noise cuts and dm corrections when running on data
181  from IOVDbSvc.IOVDbSvcConfig import addFolders#, addFoldersSplitOnline
182 
183  acc.merge(addFolders(flags,"/TRIGGER/L1Calo/V1/Calibration/EfexNoiseCuts","TRIGGER_OFL" if flags.Input.isMC else "TRIGGER_ONL",className="CondAttrListCollection"))
184  eFEXInputs.NoiseCutsKey = "/TRIGGER/L1Calo/V1/Calibration/EfexNoiseCuts"
185  acc.merge(addFolders(flags,"/TRIGGER/L1Calo/V1/Calibration/EfexEnergyCalib","TRIGGER_OFL" if flags.Input.isMC else "TRIGGER_ONL",className="CondAttrListCollection")) # dmCorr from DB!
186  eFEX.eFEXSysSimTool.eFEXSimTool.eFEXFPGATool.eFEXegAlgoTool.DMCorrectionsKey = "/TRIGGER/L1Calo/V1/Calibration/EfexEnergyCalib"
187 
188  acc.addEventAlgo(eFEXInputs)
189  acc.addEventAlgo(eFEX)
190 
191  if simulateAltTau:
192  eFEX.eFEXSysSimTool.Key_eFexAltTauOutputContainer="L1_eTauRoIAlt"
193  eFEX.eFEXSysSimTool.Key_eFexAltTauxTOBOutputContainer="L1_eTauxRoIAlt"
194 
195 
196  if flags.Trigger.L1.dojFex:
197 
198  if flags.Input.Format is not Format.POOL:
199  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import jFexInputByteStreamToolCfg
200  inputjFexTool = acc.popToolsAndMerge(jFexInputByteStreamToolCfg(flags, 'jFexInputBSDecoderTool'))
201 
202  maybeMissingRobs = []
203  decoderTools = []
204 
205  for module_id in inputjFexTool.ROBIDs:
206  maybeMissingRobs.append(module_id)
207 
208  decoderTools += [inputjFexTool]
209  decoderAlg = CompFactory.L1TriggerByteStreamDecoderAlg(name="L1TriggerByteStreamDecoder", DecoderTools=[inputjFexTool], MaybeMissingROBs=maybeMissingRobs)
210  acc.addEventAlgo(decoderAlg)
211 
212  if "L1_jFexEmulatedTowers" not in flags.Input.Collections:
213  from L1CaloFEXAlgos.FexEmulatedTowersConfig import jFexEmulatedTowersCfg
214  acc.merge(jFexEmulatedTowersCfg(flags))
215 
216  from L1CaloFEXCond.L1CaloFEXCondConfig import jFexDBConfig
217  acc.merge(jFexDBConfig(flags))
218 
219  jFEXInputs = CompFactory.LVL1.jTowerMakerFromJfexTowers('jTowerMakerFromJfexTowers')
220  jFEXInputs.IsMC = flags.Input.isMC
221  jFEXInputs.jSuperCellTowerMapperTool = CompFactory.LVL1.jSuperCellTowerMapper('jSuperCellTowerMapper', SCell=sCellType)
222  jFEXInputs.jSuperCellTowerMapperTool.SCellMasking = not flags.Input.isMC
223  # need to set an IsMC property on a tool deep inside the toolstack:
224  jFEX = CompFactory.LVL1.jFEXDriver('jFEXDriver',jFEXSysSimTool=CompFactory.LVL1.jFEXSysSim(
225  'jFEXSysSimTool',jFEXSimTool=CompFactory.LVL1.jFEXSim(
226  'LVL1::jFEXSim',jFEXFPGATool=CompFactory.LVL1.jFEXFPGA(
227  'LVL1::jFEXFPGA',jFEXLargeRJetAlgoTool="", # disables jLJ algorithm - will produce empty container
228  IjFEXFormTOBsTool=CompFactory.LVL1.jFEXFormTOBs(
229  'LVL1::jFEXFormTOBs',IsMC=flags.Input.isMC)))))
230  acc.addEventAlgo(jFEXInputs)
231  acc.addEventAlgo(jFEX)
232 
233 
234  if flags.Trigger.L1.dogFex:
235 
236  if flags.Input.Format is not Format.POOL:
237  from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import gFexInputByteStreamToolCfg
238  inputgFexTool = acc.popToolsAndMerge(gFexInputByteStreamToolCfg(flags, 'gFexInputBSDecoderTool'))
239 
240  maybeMissingRobs = []
241  decoderTools = []
242 
243  for module_id in inputgFexTool.ROBIDs:
244  maybeMissingRobs.append(module_id)
245 
246  decoderTools += [inputgFexTool]
247  decoderAlg = CompFactory.L1TriggerByteStreamDecoderAlg(name="L1TriggerByteStreamDecoder", DecoderTools=[inputgFexTool], MaybeMissingROBs=maybeMissingRobs)
248  acc.addEventAlgo(decoderAlg)
249 
250  from L1CaloFEXAlgos.FexEmulatedTowersConfig import gFexEmulatedTowersCfg
251  acc.merge(gFexEmulatedTowersCfg(flags,name="L1_gFexEmulatedTowers"))
252 
253  gFEXTowerSummer = CompFactory.LVL1.gFexTowerSummer('gFexTowerSummer')
254  gFEXTowerSummer.gFexDataTowers = "L1_gFexEmulatedTowers" if flags.Input.isMC else "L1_gFexDataTowers"
255  gFEXTowerSummer.gTowers200WriteKey = "L1_gFexEmulatedTowers200" if flags.Input.isMC else "L1_gFexDataTowers200"
256  gFEXTowerSummer.gTowers50WriteKey = "L1_gFexEmulatedTowers50" if flags.Input.isMC else "L1_gFexDataTowers50"
257  gFEXTowerSummer.gTowersEMWriteKey = ""
258  gFEXTowerSummer.gTowersHADWriteKey = ""
259  acc.addEventAlgo(gFEXTowerSummer)
260 
261  gFEXInputs = CompFactory.LVL1.gTowerMakerFromGfexTowers('gTowerMakerFromGfexTowers')
262  gFEXInputs.InputDataTowers = "L1_gFexEmulatedTowers200" if flags.Input.isMC else "L1_gFexDataTowers200"
263  gFEXInputs.MyGTowers = "gTowerContainer"
264 
265  gFEXInputs50 = CompFactory.LVL1.gTowerMakerFromGfexTowers('gTowerMakerFromGfexTowers50')
266  gFEXInputs50.InputDataTowers = "L1_gFexEmulatedTowers50" if flags.Input.isMC else "L1_gFexDataTowers50"
267  gFEXInputs50.MyGTowers = "gTower50Container"
268 
269  from L1CaloFEXCond.L1CaloFEXCondConfig import gFexDBConfig
270  acc.merge(gFexDBConfig(flags))
271 
272  gFEX = CompFactory.LVL1.gFEXDriver('gFEXDriver')
273  gFEX.gFEXSysSimTool = CompFactory.LVL1.gFEXSysSim('gFEXSysSimTool')
274  acc.addEventAlgo(gFEXInputs)
275  acc.addEventAlgo(gFEXInputs50)
276  acc.addEventAlgo(gFEX)
277 
278  if flags.Trigger.doHLT:
279  # This will be the case when the offline simulation is actually being run as part of MC
280  # as opposed to running another pass of the simulation on either an MC or data file (e.g in DAOD)
281  # Check the RoI EDM containers are registered in HLT outputs
282  from TrigEDMConfig.TriggerEDM import recordable
283  def check(key):
284  assert key==recordable(key), f'recordable() check failed for {key}'
285  if flags.Trigger.L1.doeFex:
286  check(eFEX.eFEXSysSimTool.Key_eFexEMOutputContainer)
287  check(eFEX.eFEXSysSimTool.Key_eFexTauOutputContainer)
288  if (simulateAltTau):
289  check(eFEX.eFEXSysSimTool.Key_eFexAltTauOutputContainer)
290  if flags.Trigger.L1.dojFex:
291  check(jFEX.jFEXSysSimTool.Key_jFexSRJetOutputContainer)
292  check(jFEX.jFEXSysSimTool.Key_jFexLRJetOutputContainer)
293  check(jFEX.jFEXSysSimTool.Key_jFexTauOutputContainer)
294  check(jFEX.jFEXSysSimTool.Key_jFexSumETOutputContainer)
295  check(jFEX.jFEXSysSimTool.Key_jFexMETOutputContainer)
296  check(jFEX.jFEXSysSimTool.Key_jFexFwdElOutputContainer)
297  if flags.Trigger.L1.dogFex:
298  check(gFEX.gFEXSysSimTool.Key_gFexSRJetOutputContainer)
299  check(gFEX.gFEXSysSimTool.Key_gFexLRJetOutputContainer)
300  check(gFEX.gFEXSysSimTool.Key_gFexRhoOutputContainer)
301  check(gFEX.gFEXSysSimTool.Key_gScalarEJwojOutputContainer)
302  check(gFEX.gFEXSysSimTool.Key_gMETComponentsJwojOutputContainer)
303  check(gFEX.gFEXSysSimTool.Key_gMHTComponentsJwojOutputContainer)
304  check(gFEX.gFEXSysSimTool.Key_gMSTComponentsJwojOutputContainer)
305  check(gFEX.gFEXSysSimTool.Key_gMETComponentsNoiseCutOutputContainer)
306  check(gFEX.gFEXSysSimTool.Key_gMETComponentsRmsOutputContainer)
307  check(gFEX.gFEXSysSimTool.Key_gScalarENoiseCutOutputContainer)
308  check(gFEX.gFEXSysSimTool.Key_gScalarERmsOutputContainer)
309  else:
310  # Rename outputs for monitoring resimulation to avoid clash with standard SG keys
311  def getSimHandle(key):
312  """
313  Add 'Sim' to the standard handle path and include user-specified suffix
314  """
315  key += outputSuffix
316  if not key.endswith("Sim"): key += "Sim"
317  return key
318 
319  if flags.Trigger.L1.doeFex:
320  eFEX.eFEXSysSimTool.Key_eFexEMOutputContainer=getSimHandle("L1_eEMRoI")
321  eFEX.eFEXSysSimTool.Key_eFexTauOutputContainer=getSimHandle("L1_eTauRoI")
322  eFEX.eFEXSysSimTool.Key_eFexEMxTOBOutputContainer=getSimHandle("L1_eEMxRoI")
323  eFEX.eFEXSysSimTool.Key_eFexTauxTOBOutputContainer=getSimHandle("L1_eTauxRoI")
324  if simulateAltTau:
325  eFEX.eFEXSysSimTool.Key_eFexAltTauOutputContainer=getSimHandle("L1_eTauRoIAlt")
326  eFEX.eFEXSysSimTool.Key_eFexAltTauxTOBOutputContainer=getSimHandle("L1_eTauxRoIAlt")
327 
328  if flags.Trigger.L1.dojFex:
329  jFEX.jFEXSysSimTool.Key_jFexSRJetOutputContainer=getSimHandle("L1_jFexSRJetRoI")
330  jFEX.jFEXSysSimTool.Key_jFexLRJetOutputContainer=getSimHandle("L1_jFexLRJetRoI")
331  jFEX.jFEXSysSimTool.Key_jFexTauOutputContainer=getSimHandle("L1_jFexTauRoI")
332  jFEX.jFEXSysSimTool.Key_jFexSumETOutputContainer=getSimHandle("L1_jFexSumETRoI")
333  jFEX.jFEXSysSimTool.Key_jFexMETOutputContainer=getSimHandle("L1_jFexMETRoI")
334  jFEX.jFEXSysSimTool.Key_jFexFwdElOutputContainer=getSimHandle("L1_jFexFwdElRoI")
335  jFEX.jFEXSysSimTool.Key_xTobOutKey_jJ=getSimHandle("L1_jFexSRJetxRoI")
336  jFEX.jFEXSysSimTool.Key_xTobOutKey_jLJ=getSimHandle("L1_jFexLRJetxRoI")
337  jFEX.jFEXSysSimTool.Key_xTobOutKey_jTau=getSimHandle("L1_jFexTauxRoI")
338  jFEX.jFEXSysSimTool.Key_xTobOutKey_jEM=getSimHandle("L1_jFexFwdElxRoI")
339  if flags.Trigger.L1.dogFex:
340  gFEX.gFEXSysSimTool.Key_gFexSRJetOutputContainer=getSimHandle("L1_gFexSRJetRoI")
341  gFEX.gFEXSysSimTool.Key_gFexLRJetOutputContainer=getSimHandle("L1_gFexLRJetRoI")
342  gFEX.gFEXSysSimTool.Key_gFexRhoOutputContainer=getSimHandle("L1_gFexRhoRoI")
343  gFEX.gFEXSysSimTool.Key_gScalarEJwojOutputContainer=getSimHandle("L1_gScalarEJwoj")
344  gFEX.gFEXSysSimTool.Key_gMETComponentsJwojOutputContainer=getSimHandle("L1_gMETComponentsJwoj")
345  gFEX.gFEXSysSimTool.Key_gMHTComponentsJwojOutputContainer=getSimHandle("L1_gMHTComponentsJwoj")
346  gFEX.gFEXSysSimTool.Key_gMSTComponentsJwojOutputContainer=getSimHandle("L1_gMSTComponentsJwoj")
347  gFEX.gFEXSysSimTool.Key_gMETComponentsNoiseCutOutputContainer=getSimHandle("L1_gMETComponentsNoiseCut")
348  gFEX.gFEXSysSimTool.Key_gMETComponentsRmsOutputContainer=getSimHandle("L1_gMETComponentsRms")
349  gFEX.gFEXSysSimTool.Key_gScalarENoiseCutOutputContainer=getSimHandle("L1_gScalarENoiseCut")
350  gFEX.gFEXSysSimTool.Key_gScalarERmsOutputContainer=getSimHandle("L1_gScalarERms")
351 
352  return acc
353 
354 
355 if __name__ == '__main__':
356 
359  import argparse
360  p = argparse.ArgumentParser()
361  p.add_argument('-i', '--input',
362  metavar='KEY',
363  default='ttbar',
364  help='Key of the input from TrigValInputs to be used, default=%(default)s')
365  p.add_argument('-e', '--execute',
366  action='store_true',
367  help='After building the configuration, also process a few events')
368  p.add_argument('-n', '--nevents',
369  metavar='N',
370  type=int,
371  default=25,
372  help='Number of events to process if --execute is used, default=%(default)s')
373  p.add_argument('-d', '--efexdebug',
374  action='store_true',
375  help='Activate DEBUG mode for eFEX driver .. this option is required by a unit test')
376 
377  args = p.parse_args()
378 
379 
382  from AthenaConfiguration.AllConfigFlags import initConfigFlags
383  from TrigValTools.TrigValSteering import Input
384  import os
385 
386  flags = initConfigFlags()
387  flags.Common.isOnline = True
388  flags.Input.Files = [args.input] if os.path.isfile(args.input) else Input.get_input(args.input).paths
389  if not flags.Input.isMC:
390  from AthenaConfiguration.TestDefaults import defaultGeometryTags
391  flags.GeoModel.AtlasVersion = defaultGeometryTags.autoconfigure(flags)
392  from AthenaConfiguration.Enums import LHCPeriod
393  flags.IOVDb.GlobalTag = 'CONDBR2-HLTP-2023-01' if flags.GeoModel.Run is LHCPeriod.Run3 else 'CONDBR2-HLTP-2018-04'
394  else:
395  from AthenaConfiguration.TestDefaults import defaultConditionsTags
396  flags.IOVDb.GlobalTag = defaultConditionsTags.RUN3_MC
397  flags.Output.AODFileName = 'AOD.pool.root'
398  flags.Exec.MaxEvents = args.nevents
399  flags.Concurrency.NumThreads = 1
400  flags.Concurrency.NumConcurrentEvents = 1
401  flags.Scheduler.ShowDataDeps = True
402  flags.Scheduler.CheckDependencies = True
403  flags.Scheduler.ShowDataFlow = True
404  flags.Trigger.EDMVersion = 3
405  flags.Trigger.doLVL1 = True
406  flags.Trigger.enableL1CaloPhase1 = True
407  flags.Trigger.triggerConfig = 'FILE'
408 
409  # Enable only calo for this test
410  from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
411  setupDetectorFlags(flags, ['LAr','Tile','MBTS'], toggle_geometry=True)
412 
413  flags.lock()
414 
415 
418  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
419  acc = MainServicesCfg(flags)
420 
421  from AthenaConfiguration.Enums import Format
422  if flags.Input.Format == Format.POOL:
423  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
424  acc.merge(PoolReadCfg(flags))
425  else:
426  from TriggerJobOpts.TriggerByteStreamConfig import ByteStreamReadCfg
427  acc.merge(ByteStreamReadCfg(flags))
428 
429  from TrigConfigSvc.TrigConfigSvcCfg import L1ConfigSvcCfg, generateL1Menu, createL1PrescalesFileFromMenu
430  generateL1Menu(flags)
432  acc.merge(L1ConfigSvcCfg(flags))
433 
434  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
435  FexEDMList = [
436  'xAOD::eFexEMRoIContainer#L1_eEMRoI','xAOD::eFexEMRoIAuxContainer#L1_eEMRoIAux.',
437  'xAOD::eFexTauRoIContainer#L1_eTauRoI','xAOD::eFexTauRoIAuxContainer#L1_eTauRoIAux.',
438  'xAOD::jFexTauRoIContainer#L1_jFexTauRoI','xAOD::jFexTauRoIAuxContainer#L1_jFexTauRoIAux.',
439  'xAOD::jFexSRJetRoIContainer#L1_jFexSRJetRoI','xAOD::jFexSRJetRoIAuxContainer#L1_jFexSRJetRoIAux.',
440  'xAOD::jFexLRJetRoIContainer#L1_jFexLRJetRoI','xAOD::jFexLRJetRoIAuxContainer#L1_jFexLRJetRoIAux.',
441  'xAOD::jFexMETRoIContainer#L1_jFexMETRoI','xAOD::jFexMETRoIAuxContainer#L1_jFexMETRoIAux.',
442  'xAOD::jFexSumETRoIContainer#L1_jFexSumETRoI','xAOD::jFexSumETRoIAuxContainer#L1_jFexSumETRoIAux.',
443  'xAOD::gFexJetRoIContainer#L1_gFexSRJetRoI','xAOD::gFexJetRoIAuxContainer#L1_gFexSRJetRoIAux.',
444  'xAOD::gFexJetRoIContainer#L1_gFexLRJetRoI','xAOD::gFexJetRoIAuxContainer#L1_gFexLRJetRoIAux.',
445  'xAOD::gFexJetRoIContainer#L1_gFexRhoRoI','xAOD::gFexJetRoIAuxContainer#L1_gFexRhoRoIAux.',
446  'xAOD::gFexGlobalRoIContainer#L1_gScalarEJwoj','xAOD::gFexGlobalRoIAuxContainer#L1_gScalarEJwojAux.',
447  'xAOD::gFexGlobalRoIContainer#L1_gMETComponentsJwoj','xAOD::gFexGlobalRoIAuxContainer#L1_gMETComponentsJwojAux.',
448  'xAOD::gFexGlobalRoIContainer#L1_gMHTComponentsJwoj','xAOD::gFexGlobalRoIAuxContainer#L1_gMHTComponentsJwojAux.',
449  'xAOD::gFexGlobalRoIContainer#L1_gMSTComponentsJwoj','xAOD::gFexGlobalRoIAuxContainer#L1_gMSTComponentsJwojAux.',
450  'xAOD::gFexGlobalRoIContainer#L1_gMETComponentsNoiseCut','xAOD::gFexGlobalRoIAuxContainer#L1_gMETComponentsNoiseCutAux.',
451  'xAOD::gFexGlobalRoIContainer#L1_gMETComponentsRms','xAOD::gFexGlobalRoIAuxContainer#L1_gMETComponentsRmsAux.',
452  'xAOD::gFexGlobalRoIContainer#L1_gScalarENoiseCut','xAOD::gFexGlobalRoIAuxContainer#L1_gScalarENoiseCutAux.',
453  'xAOD::gFexGlobalRoIContainer#L1_gScalarERms','xAOD::gFexGlobalRoIAuxContainer#L1_gScalarERmsAux.',
454 
455  ]
456  acc.merge(OutputStreamCfg(flags, 'AOD', ItemList=FexEDMList))
457 
458 
461  acc.merge(L1CaloFEXSimCfg(flags))
462  if args.efexdebug:
463  from AthenaCommon.Constants import DEBUG
464  acc.getEventAlgo("eFEXDriver").OutputLevel = DEBUG
465 
466 
469  with open("L1Sim.pkl", "wb") as f:
470  acc.store(f)
471  f.close()
472 
473  if args.execute:
474  sc = acc.run()
475  if sc.isFailure():
476  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:63
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
gridSubmitIDTPM.check
check
Definition: gridSubmitIDTPM.py:45
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.LArRunFormat.getLArDTInfoForRun
def getLArDTInfoForRun(run, quiet=False, connstring="COOLONL_LAR/CONDBR2")
Definition: LArRunFormat.py:152
LArRunFormat
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
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:86
calibdata.exit
exit
Definition: calibdata.py:235
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:292
L1CaloFEXSimCfg.ReadSCellFromPoolFileCfg
def ReadSCellFromPoolFileCfg(flags, key='SCell')
Definition: L1CaloFEXSimCfg.py:8
L1CaloFEXByteStreamConfig.gFexInputByteStreamToolCfg
def gFexInputByteStreamToolCfg(flags, name, *writeBS=False)
Definition: L1CaloFEXByteStreamConfig.py:275
python.IOVDbSvcConfig.addOverride
def addOverride(flags, folder, tag, tagType="tag", db=None)
Definition: IOVDbSvcConfig.py:238
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:24
L1CaloFEXCondConfig.gFexDBConfig
def gFexDBConfig(flags, name="gFEXCondAlgo")
Definition: L1CaloFEXCondConfig.py:34
python.TriggerEDM.recordable
def recordable(arg, runVersion=3)
Definition: TriggerEDM.py:37
FexEmulatedTowersConfig.gFexEmulatedTowersCfg
def gFexEmulatedTowersCfg(flags, name="L1_gFexEmulatedTowers", writeKey="L1_gFexEmulatedTowers")
Definition: FexEmulatedTowersConfig.py:9
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:71
python.LArRawSCDataReadingConfig.LArRawSCDataReadingCfg
def LArRawSCDataReadingCfg(configFlags, ROBList=None, name="LArRawSCDataReadingAlg", **kwargs)
Definition: LArRawSCDataReadingConfig.py:8
L1CaloFEXSimCfg
Definition: L1CaloFEXSimCfg.py:1
TileGMConfig.TileGMCfg
def TileGMCfg(flags)
Definition: TileGMConfig.py:7