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