Skip to content
Snippets Groups Projects
Commit 43a7b5f0 authored by Walter Lampl's avatar Walter Lampl
Browse files

improve error handling, avoid code-duplication

parent a365c0d9
No related branches found
No related tags found
No related merge requests found
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
from AthenaConfiguration.AthConfigFlags import AthConfigFlags
from AthenaCommon.Logging import logging
msg = logging.getLogger('BFieldConfigFlags')
#So far no attempt to auto-config field for MC or online-running
#
#The old-style config did auto-config the field for online based on IS
#(see https://gitlab.cern.ch/atlas/athena/-/blame/1802605a4ab69cab7ee3e53d75f162c7da99a944/Reconstruction/RecExample/RecExOnline/python/OnlineISConfiguration.py#L52)
#(see https://gitlab.cern.ch/atlas/athena/-/blob/1802605a4ab69cab7ee3e53d75f162c7da99a944/Reconstruction/RecExample/RecExOnline/python/OnlineISConfiguration.py#L52)
#
#The old-sytle config tried to auto-config the field based on in-file metadata, falling back to Geometry and Conditions tags. See
#(see https://gitlab.cern.ch/atlas/athena/-/blame/1802605a4ab69cab7ee3e53d75f162c7da99a944/Reconstruction/RecExample/RecExConfig/python/AutoConfiguration.py#L181
#(see https://gitlab.cern.ch/atlas/athena/-/blob/1802605a4ab69cab7ee3e53d75f162c7da99a944/Reconstruction/RecExample/RecExConfig/python/AutoConfiguration.py#L181
def _toroidFieldAutoCfg(prevFlags):
def _fieldAutoCfg(prevFlags):
if prevFlags.Input.isMC or prevFlags.Common.isOnline:
return True
return [True,True]
from CoolConvUtilities.MagFieldUtils import getFieldForRun
lbs=prevFlags.Input.LumiBlockNumbers
fieldStat=getFieldForRun(run=prevFlags.Input.RunNumbers[0],lumiblock=0 if len(lbs)==0 else lbs[0],quiet=True)
return (fieldStat.toroidCurrent()>1)
if fieldStat is None:
msg.error("Unable to get field status from DCS, assume both magnets ON")
return [True,True]
return [fieldStat.solenoidCurrent()>1, fieldStat.toroidCurrent()>1]
def _solenoidFieldAutoCfg(prevFlags):
if prevFlags.Input.isMC or prevFlags.Common.isOnline:
return True
from CoolConvUtilities.MagFieldUtils import getFieldForRun
lbs=prevFlags.Input.LumiBlockNumbers
fieldStat=getFieldForRun(run=prevFlags.Input.RunNumbers[0],lumiblock=0 if len(lbs)==0 else lbs[0],quiet=True)
return (fieldStat.solenoidCurrent()>1)
def createBFieldConfigFlags():
bcf=AthConfigFlags()
# True when solenoid is on
bcf.addFlag("BField.solenoidOn", _solenoidFieldAutoCfg)
bcf.addFlag("BField.solenoidOn", lambda prevFlags : _fieldAutoCfg(prevFlags)[0])
# True when barrel toroid is on
bcf.addFlag("BField.barrelToroidOn", _toroidFieldAutoCfg)
bcf.addFlag("BField.barrelToroidOn", lambda prevFlags : _fieldAutoCfg(prevFlags)[1])
# True when endcap toroid is on
bcf.addFlag("BField.endcapToroidOn", _toroidFieldAutoCfg)
bcf.addFlag("BField.endcapToroidOn", lambda prevFlags : _fieldAutoCfg(prevFlags)[1])
return bcf
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment