diff --git a/LumiBlock/LumiBlockComps/CMakeLists.txt b/LumiBlock/LumiBlockComps/CMakeLists.txt index 9da1ecb9e5bf843bae13bc0161b28c82de23f4ad..b820de377fbc592aa7b7d766e0eb42e1761f63a8 100644 --- a/LumiBlock/LumiBlockComps/CMakeLists.txt +++ b/LumiBlock/LumiBlockComps/CMakeLists.txt @@ -75,6 +75,10 @@ atlas_add_test( TrigLiveFractionCondAlgConfig_test SCRIPT python -m LumiBlockComps.TrigLiveFractionCondAlgConfig LOG_SELECT_PATTERN "ComponentAccumulator|^---|^IOVDbSvc" ) +atlas_add_test( LumiBlockMuWriterConfig_test + SCRIPT python -m LumiBlockComps.LumiBlockMuWriterConfig + LOG_SELECT_PATTERN "ComponentAccumulator|^---|^IOVDbSvc" ) + atlas_add_test( BunchCrossingCondAlg SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/python/BunchCrossingCondAlgTest.py diff --git a/LumiBlock/LumiBlockComps/python/LumiBlockMuWriterConfig.py b/LumiBlock/LumiBlockComps/python/LumiBlockMuWriterConfig.py new file mode 100644 index 0000000000000000000000000000000000000000..d11045f8bc4e7b7ec641a0560d87e9e95c62bd70 --- /dev/null +++ b/LumiBlock/LumiBlockComps/python/LumiBlockMuWriterConfig.py @@ -0,0 +1,50 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# +# File: LumiBlockComps/python/LumiBlockMuWriterConfig.py +# Created: May 2020, sss +# Purpose: Configure LumiBlockMuWriter. +# + + +from AthenaConfiguration.ComponentFactory import CompFactory +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator + + +def LumiBlockMuWriterCfg (configFlags, name = 'LumiBlockMuWriter'): + result = ComponentAccumulator() + + if configFlags.Beam.Type == 'cosmics': + condkey = '' + else: + from LumiBlockComps.LuminosityCondAlgConfig import LuminosityCondAlgCfg + result.merge (LuminosityCondAlgCfg (configFlags)) + condkey = result.getCondAlgo ('LuminosityCondAlg').LuminosityOutputKey + + LumiBlockMuWriter = CompFactory.LumiBlockMuWriter # LumiBlockComps + alg = LumiBlockMuWriter (name, LumiDataKey = condkey) + result.addCondAlgo (alg) + return result + + +if __name__ == "__main__": + from AthenaCommon.Configurable import Configurable + Configurable.configurableRun3Behavior=1 + from AthenaConfiguration.AllConfigFlags import ConfigFlags + from AthenaConfiguration.TestDefaults import defaultTestFiles + ConfigFlags.loadAllDynamicFlags() + + print ('--- collisions') + flags1 = ConfigFlags.clone() + flags1.Input.Files = defaultTestFiles.RAW + flags1.lock() + acc1 = LumiBlockMuWriterCfg (flags1) + acc1.printCondAlgs (summariseProps=True) + acc1.wasMerged() + + print ('--- cosmics') + flags2 = ConfigFlags.clone() + flags2.Beam.Type = 'cosmics' + flags2.lock() + acc2 = LumiBlockMuWriterCfg (flags2) + acc2.printCondAlgs (summariseProps=True) + acc2.wasMerged() diff --git a/LumiBlock/LumiBlockComps/python/LumiBlockMuWriterDefault.py b/LumiBlock/LumiBlockComps/python/LumiBlockMuWriterDefault.py new file mode 100644 index 0000000000000000000000000000000000000000..2dc94cbb4084be178ca2541608236490c045203e --- /dev/null +++ b/LumiBlock/LumiBlockComps/python/LumiBlockMuWriterDefault.py @@ -0,0 +1,60 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# +# File: LumiBlockComps/python/LumiBlockMuWriterDefault.py +# Created: May 2020, sss +# Purpose: Configure LumiBlockMuWriter. +# + + +from AthenaConfiguration.ComponentFactory import CompFactory +from AthenaCommon.BeamFlags import jobproperties + + +def LumiBlockMuWriterDefault (name = 'LumiBlockMuWriter'): + from AthenaCommon.AlgSequence import AthSequencer + from AthenaCommon.AlgSequence import AlgSequence + + condSeq = AthSequencer ('AthCondSeq') + topSequence = AlgSequence() + if hasattr (condSeq, name) or hasattr (topSequence, name): + return + + LumiBlockMuWriter = CompFactory.LumiBlockMuWriter # LumiBlockComps + if jobproperties.Beam.beamType() == 'cosmics': + condkey = '' + else: + from LumiBlockComps.LuminosityCondAlgDefault import LuminosityCondAlgDefault + condalg = LuminosityCondAlgDefault() + condkey = condalg.LuminosityOutputKey + + alg = LumiBlockMuWriter (name, LumiDataKey = condkey) + + cnvseq = None + cnvalg = getattr (condSeq, 'xAODMaker::EventInfoCnvAlg', None) + if cnvalg: + cnvseq = condSeq + else: + cnvalg = getattr (topSequence, 'xAODMaker::EventInfoCnvAlg', None) + if cnvalg: + cnvseq = topSequence + + # FIXME: If EventInfoCnvAlg is in topSequence, then this needs to come + # after it. Otherwise, schedule to condSeq so we'll be run early. + if cnvalg and cnvseq is topSequence: + topSequence += alg + else: + condSeq += alg + + from AthenaCommon.GlobalFlags import globalflags + from RecExConfig.ObjKeyStore import objKeyStore + + if (cnvalg and + not globalflags.InputFormat.is_bytestream() and + not objKeyStore.isInInput ("xAOD::EventInfo")): + sgil = getattr (topSequence, 'SGInputLoader', None) + if sgil: + for k in sgil.Load[:]: + if k[1].find ('EventInfo') >= 0: + sgil.Load.remove (k) + return + diff --git a/LumiBlock/LumiBlockComps/python/LuminosityCondAlgDefault.py b/LumiBlock/LumiBlockComps/python/LuminosityCondAlgDefault.py index 34efdbb5bcea863e8ca1ec46321171c5a83ea640..c7c87b4684bcd84a19e744f1bc5c061eb8a170aa 100644 --- a/LumiBlock/LumiBlockComps/python/LuminosityCondAlgDefault.py +++ b/LumiBlock/LumiBlockComps/python/LuminosityCondAlgDefault.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # # File: LumiBlockComps/python/LuminosityCondAlgDefault.py # Created: May 2019, sss, from existing LuminosityToolDefault. @@ -38,13 +38,13 @@ def LuminosityCondAlgDefault (name = 'LuminosityCondAlg', kwargs = {} from IOVDbSvc.CondDB import conddb - if isOnline: - kwargs = configureOnlineLuminosityCondAlg (name) - - elif conddb.isMC: + if conddb.isMC: mlog.info("LuminosityCondAlgDefault called for MC!") kwargs = configureLuminosityCondAlgMC (name) + elif isOnline: + kwargs = configureOnlineLuminosityCondAlg (name) + elif conddb.dbdata == "COMP200": kwargs = configureLuminosityCondAlgRun1 (name) diff --git a/LumiBlock/LumiBlockComps/share/LumiBlockMuWriterConfig_test.ref b/LumiBlock/LumiBlockComps/share/LumiBlockMuWriterConfig_test.ref new file mode 100644 index 0000000000000000000000000000000000000000..91beb8b7506454af7fdd7659166a8c3fb5d8b928 --- /dev/null +++ b/LumiBlock/LumiBlockComps/share/LumiBlockMuWriterConfig_test.ref @@ -0,0 +1,26 @@ +Py:Athena INFO using release [WorkDir-22.0.14] [x86_64-centos7-gcc8-opt] [atlas-work3/85ffba7a6ec] -- built on [2020-05-15T0253] +--- collisions +Py:AutoConfigFlags INFO Obtaining metadata of auto-configuration by peeking into /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1 +Py:MetaReader INFO Current mode used: peeker +Py:MetaReader INFO Current filenames: ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1'] +Py:LuminosityCondAlg INFO luminosityCondAlgRun2Config requested /TRIGGER/OFLLUMI/OflPrefLumi +Py:LuminosityCondAlg INFO Created Run2 LuminosityCondAlg using folder /TRIGGER/OFLLUMI/OflPrefLumi +Py:ComponentAccumulator INFO Condition Algorithms +Py:ComponentAccumulator INFO \__ CondInputLoader (cond alg) +Py:ComponentAccumulator INFO * Load: [['CondAttrListCollection', '/TRIGGER/OFLLUMI/OflPrefLumi'], ['CondAttrListCollection', '/TDAQ/OLC/CALIBRATIONS']] +Py:ComponentAccumulator INFO \__ OnlineLumiCalibrationCondAlg (cond alg) +Py:ComponentAccumulator INFO * CalibrationFolderInputKey: /TDAQ/OLC/CALIBRATIONS +Py:ComponentAccumulator INFO * LumiCalibOutputKey: OnlineLumiCalibrationCondData +Py:ComponentAccumulator INFO \__ LuminosityCondAlg (cond alg) +Py:ComponentAccumulator INFO * BunchGroupInputKey: +Py:ComponentAccumulator INFO * BunchLumisInputKey: +Py:ComponentAccumulator INFO * FillParamsInputKey: +Py:ComponentAccumulator INFO * LuminosityFolderInputKey: /TRIGGER/OFLLUMI/OflPrefLumi +Py:ComponentAccumulator INFO * LuminosityOutputKey: LuminosityCondData +Py:ComponentAccumulator INFO * OnlineLumiCalibrationInputKey: OnlineLumiCalibrationCondData +Py:ComponentAccumulator INFO \__ LumiBlockMuWriter (cond alg) +Py:ComponentAccumulator INFO * LumiDataKey: LuminosityCondData +--- cosmics +Py:ComponentAccumulator INFO Condition Algorithms +Py:ComponentAccumulator INFO \__ LumiBlockMuWriter (cond alg) +Py:ComponentAccumulator INFO * LumiDataKey: diff --git a/LumiBlock/LumiBlockComps/share/LumiBlockMuWriter_jobOptions.py b/LumiBlock/LumiBlockComps/share/LumiBlockMuWriter_jobOptions.py index 440c6bfa1a3df46d7abb914108d5639a71e8db1c..814024cd8a2eb4a4f279075585e412e4d1b8692c 100644 --- a/LumiBlock/LumiBlockComps/share/LumiBlockMuWriter_jobOptions.py +++ b/LumiBlock/LumiBlockComps/share/LumiBlockMuWriter_jobOptions.py @@ -1,12 +1,5 @@ """ Configuration for LumiBlockMuWriter to write mu into xAOD::EventInfo """ -from LumiBlockComps.LuminosityCondAlgDefault import LuminosityCondAlgDefault -condalg = LuminosityCondAlgDefault() - -from LumiBlockComps.LumiBlockCompsConf import LumiBlockMuWriter -muWriter = LumiBlockMuWriter("LumiBlockMuWriter",LumiDataKey=condalg.LuminosityOutputKey) - -from AthenaCommon.AlgSequence import AthSequencer -condSeq = AthSequencer("AthCondSeq") -condSeq += muWriter +from LumiBlockComps.LumiBlockMuWriterDefault import LumiBlockMuWriterDefault +LumiBlockMuWriterDefault() diff --git a/LumiBlock/LumiBlockComps/src/LumiBlockMuWriter.cxx b/LumiBlock/LumiBlockComps/src/LumiBlockMuWriter.cxx index 3f6decf3f3bd9cadf2202664e7a805de9383a9c7..99854b1abb697114400af524d91a59faf4817422 100644 --- a/LumiBlock/LumiBlockComps/src/LumiBlockMuWriter.cxx +++ b/LumiBlock/LumiBlockComps/src/LumiBlockMuWriter.cxx @@ -15,7 +15,7 @@ StatusCode LumiBlockMuWriter::initialize() { ATH_MSG_INFO("LumiBlockMuWriter::initialize()"); - ATH_CHECK(m_lumiDataKey.initialize()); + ATH_CHECK(m_lumiDataKey.initialize(SG::AllowEmpty)); ATH_CHECK(m_actIntPerXKey.initialize()); ATH_CHECK(m_aveIntPerXKey.initialize()); @@ -28,14 +28,18 @@ StatusCode LumiBlockMuWriter::execute(const EventContext& ctx) const float actualMu = 0.0; float muToLumi = 0.0; - SG::ReadCondHandle<LuminosityCondData> lumiData (m_lumiDataKey, ctx); - if (lumiData->lbAverageLuminosity() != 0 || - lumiData->lbAverageInteractionsPerCrossing() != 0) { - muToLumi = lumiData->muToLumi(); - if( std::abs( muToLumi ) > 0.00001 ) { - unsigned int bcid = ctx.eventID().bunch_crossing_id(); - actualMu = lumiData->lbLuminosityPerBCIDVector().at(bcid) / muToLumi; + float aveIntPerX = 0.0; + if (!m_lumiDataKey.empty()) { + SG::ReadCondHandle<LuminosityCondData> lumiData (m_lumiDataKey, ctx); + if (lumiData->lbAverageLuminosity() != 0 || + lumiData->lbAverageInteractionsPerCrossing() != 0) { + muToLumi = lumiData->muToLumi(); + if( std::abs( muToLumi ) > 0.00001 ) { + unsigned int bcid = ctx.eventID().bunch_crossing_id(); + actualMu = lumiData->lbLuminosityPerBCIDVector().at(bcid) / muToLumi; + } } + aveIntPerX = lumiData->lbAverageInteractionsPerCrossing(); } SG::WriteDecorHandle<xAOD::EventInfo,float> actIntPerXDecor(m_actIntPerXKey,ctx); @@ -43,14 +47,18 @@ StatusCode LumiBlockMuWriter::execute(const EventContext& ctx) const ATH_MSG_ERROR( "actIntPerXDecor.isPresent check fails" ); return StatusCode::FAILURE; } - actIntPerXDecor(0) = actualMu; + if (!actIntPerXDecor.isAvailable()) { + actIntPerXDecor(0) = actualMu; + } SG::WriteDecorHandle<xAOD::EventInfo,float> aveIntPerXDecor(m_aveIntPerXKey,ctx); if (!aveIntPerXDecor.isPresent()) { ATH_MSG_ERROR( "aveIntPerXDecor.isPresent check fails" ); return StatusCode::FAILURE; } - aveIntPerXDecor(0) = lumiData->lbAverageInteractionsPerCrossing(); + if (!aveIntPerXDecor.isAvailable()) { + aveIntPerXDecor(0) = aveIntPerX; + } return StatusCode::SUCCESS; } diff --git a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py index d2b6b134d25fe685f72906d0bb6a214293240fc4..071ecb68d6d36144fea86ddd11287580d0654ae9 100644 --- a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py +++ b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py @@ -599,7 +599,7 @@ if rec.doESD() and rec.readRDO(): if globalflags.DataSource()=='geant4': include_muwriter = hasattr( condSeq, "xAODMaker::EventInfoCnvAlg" ) else: - include_muwriter = jobproperties.Beam.beamType()=="collisions" and not athenaCommonFlags.isOnline() + include_muwriter = not athenaCommonFlags.isOnline() if include_muwriter: try: diff --git a/Trigger/TrigValidation/TriggerTest/share/testLVL1CTPAthenaTrigRDO.py b/Trigger/TrigValidation/TriggerTest/share/testLVL1CTPAthenaTrigRDO.py index fa219cefafd1ca2e91f772d75c007acfb5454004..75190797d1a6db70251484e2dda79e097a5e484b 100644 --- a/Trigger/TrigValidation/TriggerTest/share/testLVL1CTPAthenaTrigRDO.py +++ b/Trigger/TrigValidation/TriggerTest/share/testLVL1CTPAthenaTrigRDO.py @@ -65,6 +65,9 @@ GenerateMenu.overwriteSignaturesWith(L1Only) include("RecExCommon/RecExCommon_topOptions.py") #----------------------------------------------------------- +from LumiBlockComps.LumiBlockMuWriterDefault import LumiBlockMuWriterDefault +LumiBlockMuWriterDefault() + #------------------------------------------------------------ include("TriggerTest/TriggerTestCommon.py") #------------------------------------------------------------