From a7a771e43f4006e1feb0cb68089df02b9af7dad1 Mon Sep 17 00:00:00 2001 From: Tadej Novak <tadej.novak@cern.ch> Date: Wed, 19 Aug 2020 12:51:16 +0200 Subject: [PATCH] Add BeamSpotFixerAlg for non-MT pile-up digi --- Control/PileUpComps/src/PileUpToolsAlg.cxx | 12 ++- Control/PileUpComps/src/PileUpToolsAlg.h | 13 ++-- .../share/ConfiguredOverlay_jobOptions.py | 5 +- .../share/OverlayOutputItemList_jobOptions.py | 2 +- .../BeamEffects/python/BeamEffectsConfig.py | 14 +++- .../BeamEffects/python/BeamEffectsConfigDb.py | 3 +- .../BeamEffects/src/BeamSpotFixerAlg.cxx | 76 +++++++++++++++++++ Simulation/BeamEffects/src/BeamSpotFixerAlg.h | 50 ++++++++++++ .../src/components/BeamEffects_entries.cxx | 4 +- .../Digitization/python/DigiAlgConfig.py | 5 ++ Simulation/Digitization/python/DigiOutput.py | 6 +- .../Digitization/python/PileUpConfig.py | 5 +- Simulation/Digitization/share/BeamSpot.py | 21 +++++ .../share/DetectorDigitization.py | 4 + .../test/test_MC16a_Digi_tf_configuration.py | 12 +-- .../share/skeleton_LegacyOverlay.py | 3 + 16 files changed, 211 insertions(+), 24 deletions(-) create mode 100644 Simulation/BeamEffects/src/BeamSpotFixerAlg.cxx create mode 100644 Simulation/BeamEffects/src/BeamSpotFixerAlg.h create mode 100644 Simulation/Digitization/share/BeamSpot.py diff --git a/Control/PileUpComps/src/PileUpToolsAlg.cxx b/Control/PileUpComps/src/PileUpToolsAlg.cxx index 8517c60abdf..38d571797a7 100644 --- a/Control/PileUpComps/src/PileUpToolsAlg.cxx +++ b/Control/PileUpComps/src/PileUpToolsAlg.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // Class header @@ -20,6 +20,8 @@ StatusCode PileUpToolsAlg::initialize() ATH_MSG_DEBUG ("Initializing " << name() << " - package version " << PACKAGE_VERSION); //locate the pu tools and initialize them ATH_CHECK(m_puTools.retrieve()); + // initialise read handle keys + ATH_CHECK(m_eventInfoKey.initialize()); return StatusCode::SUCCESS; } @@ -38,8 +40,12 @@ StatusCode PileUpToolsAlg::execute() ///////////////////////////////////////////////////////////////////// // Get the overlaid event header, print out event and run number - const xAOD::EventInfo *evt(nullptr); //FIXME should we use a read-handle here? - ATH_CHECK_RECOVERABLE(evtStore()->retrieve(evt)); + SG::ReadHandle<xAOD::EventInfo> evt(m_eventInfoKey); + if (!evt.isValid()) { + ATH_MSG_ERROR("Could not get xAOD::EventInfo " << evt.name() << " from store " << evt.store()); + return StatusCode::FAILURE; + } + ATH_MSG_INFO ("Hard-scatter xAOD::EventInfo : " << " event: " << evt->eventNumber() << " run: " << evt->runNumber()); // access the sub events... diff --git a/Control/PileUpComps/src/PileUpToolsAlg.h b/Control/PileUpComps/src/PileUpToolsAlg.h index 86b2e63bad6..0cf68bb442b 100644 --- a/Control/PileUpComps/src/PileUpToolsAlg.h +++ b/Control/PileUpComps/src/PileUpToolsAlg.h @@ -1,7 +1,7 @@ /* -*- C++ -*- */ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef PILEUPCOMPS_PILEUPTOOLSALG_H @@ -22,17 +22,20 @@ ///////////////////////////////////////////////////////////////////////////// -class PileUpToolsAlg: public AthAlgorithm { +class PileUpToolsAlg : public AthAlgorithm +{ public: PileUpToolsAlg(const std::string& name, ISvcLocator* pSvcLocator); - StatusCode initialize(); - StatusCode execute(); - StatusCode finalize(); + virtual StatusCode initialize() override; + virtual StatusCode execute() override; + virtual StatusCode finalize() override; private: StatusCode clearXing(SubEventIterator& fEvt, const SubEventIterator& lEvt); ToolHandleArray<IPileUpTool> m_puTools{this,"PileUpTools",{},"IPileUpTools to be run for each event"}; + + SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{ this, "EventInfoKey", "EventInfo", "ReadHandleKey for xAOD::EventInfo" }; }; diff --git a/Event/EventOverlay/EventOverlayJobTransforms/share/ConfiguredOverlay_jobOptions.py b/Event/EventOverlay/EventOverlayJobTransforms/share/ConfiguredOverlay_jobOptions.py index c948168df05..5da0e56c03d 100644 --- a/Event/EventOverlay/EventOverlayJobTransforms/share/ConfiguredOverlay_jobOptions.py +++ b/Event/EventOverlay/EventOverlayJobTransforms/share/ConfiguredOverlay_jobOptions.py @@ -13,6 +13,9 @@ topSequence = job if not overlayFlags.isDataOverlay(): job += CfgGetter.getAlgorithm("CopyTimings") +# Always schedule beam spot conditions for overlay +include( "Digitization/BeamSpot.py" ) + #======================================================================= from AthenaCommon.AppMgr import ServiceMgr from PileUpComps.PileUpCompsConf import PileUpEventLoopMgr @@ -25,7 +28,7 @@ from StoreGate.StoreGateConf import StoreGateSvc from Digitization.DigitizationFlags import digitizationFlags from OverlayCommonAlgs.OverlayFlags import overlayFlags -pileUpEventLoopMgr = PileUpEventLoopMgr() +pileUpEventLoopMgr = PileUpEventLoopMgr(EventInfoName="Input_EventInfo") pileUpEventLoopMgr.OutStreamType = "AthenaOutputStream" printfunc ("================ DetFlags ================ ") diff --git a/Event/EventOverlay/EventOverlayJobTransforms/share/OverlayOutputItemList_jobOptions.py b/Event/EventOverlay/EventOverlayJobTransforms/share/OverlayOutputItemList_jobOptions.py index 249880a477c..4d6d45eb66c 100644 --- a/Event/EventOverlay/EventOverlayJobTransforms/share/OverlayOutputItemList_jobOptions.py +++ b/Event/EventOverlay/EventOverlayJobTransforms/share/OverlayOutputItemList_jobOptions.py @@ -12,7 +12,7 @@ outStream = AthenaPoolOutputStream( "StreamRDO", athenaCommonFlags.PoolRDOOutput outStream.Store = ServiceMgr.StoreGateSvc # overlay output stream -outStream.ItemList += [ "xAOD::EventInfo#*", "xAOD::EventAuxInfo#*" ] +outStream.ItemList += [ "xAOD::EventInfo#EventInfo", "xAOD::EventAuxInfo#EventInfoAux." ] outStream.ItemList += [ "xAOD::EventInfoContainer#*", "xAOD::EventInfoAuxContainer#*" ] outStream.ItemList += [ "LumiBlockCollection#*" ] diff --git a/Simulation/BeamEffects/python/BeamEffectsConfig.py b/Simulation/BeamEffects/python/BeamEffectsConfig.py index 23a6f351f7e..c8faecaff5d 100644 --- a/Simulation/BeamEffects/python/BeamEffectsConfig.py +++ b/Simulation/BeamEffects/python/BeamEffectsConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ Configurations for classes in BeamEffects package @@ -135,3 +135,15 @@ def getBeamEffectsAlg(name="BeamEffectsAlg", **kwargs): manipulatorList += ["GenEventBeamEffectBooster"] kwargs.setdefault("GenEventManipulators", manipulatorList) return CfgMgr.Simulation__BeamEffectsAlg(name, **kwargs) + +def getBeamSpotFixerAlg(name="BeamSpotFixerAlg", **kwargs): + kwargs.setdefault('InputKey', 'Input_EventInfo') + + from Digitization.DigitizationFlags import digitizationFlags + if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi(): + from OverlayCommonAlgs.OverlayFlags import overlayFlags + kwargs.setdefault('OutputKey', overlayFlags.bkgPrefix() + 'EventInfo') + else: + kwargs.setdefault('OutputKey', 'EventInfo') + + return CfgMgr.Simulation__BeamSpotFixerAlg(name, **kwargs) diff --git a/Simulation/BeamEffects/python/BeamEffectsConfigDb.py b/Simulation/BeamEffects/python/BeamEffectsConfigDb.py index 5ccdb068257..2456328eb71 100644 --- a/Simulation/BeamEffects/python/BeamEffectsConfigDb.py +++ b/Simulation/BeamEffects/python/BeamEffectsConfigDb.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon.CfgGetter import addTool, addAlgorithm ## Lorentz Vector Generators @@ -14,4 +14,5 @@ addTool("BeamEffects.BeamEffectsConfig.getGenEventBeamEffectBooster", "G addTool("BeamEffects.BeamEffectsConfig.getGenEventRotator", "GenEventRotator") ## Algorithms addAlgorithm("BeamEffects.BeamEffectsConfig.getBeamEffectsAlg", "BeamEffectsAlg") +addAlgorithm("BeamEffects.BeamEffectsConfig.getBeamSpotFixerAlg", "BeamSpotFixerAlg") diff --git a/Simulation/BeamEffects/src/BeamSpotFixerAlg.cxx b/Simulation/BeamEffects/src/BeamSpotFixerAlg.cxx new file mode 100644 index 00000000000..8c8e0cd28cc --- /dev/null +++ b/Simulation/BeamEffects/src/BeamSpotFixerAlg.cxx @@ -0,0 +1,76 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/// @author Tadej Novak <tadej@cern.ch> + +#include <StoreGate/ReadCondHandle.h> +#include <StoreGate/ReadHandle.h> +#include <StoreGate/WriteHandle.h> +#include <xAODEventInfo/EventAuxInfo.h> + +#include "BeamSpotFixerAlg.h" + +namespace Simulation +{ + + BeamSpotFixerAlg::BeamSpotFixerAlg( const std::string& name, ISvcLocator* pSvcLocator ) + : AthReentrantAlgorithm( name, pSvcLocator ) + { + } + + /** Athena algorithm's interface method initialize() */ + StatusCode BeamSpotFixerAlg::initialize() + { + ATH_CHECK(m_beamSpotKey.initialize()); + + ATH_CHECK( m_inputKey.initialize() ); + ATH_MSG_VERBOSE("Initialized ReadHandleKey: " << m_inputKey); + ATH_CHECK( m_outputKey.initialize() ); + ATH_MSG_VERBOSE("Initialized WriteHandleKey: " << m_outputKey); + + return StatusCode::SUCCESS; + } + + StatusCode BeamSpotFixerAlg::execute(const EventContext& ctx) const + { + SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx }; + if (!beamSpotHandle.isValid()) { + ATH_MSG_ERROR("Beam spot information not valid"); + return StatusCode::FAILURE; + } + + SG::ReadHandle<xAOD::EventInfo> inputEventInfo(m_inputKey, ctx); + if (!inputEventInfo.isValid()) { + ATH_MSG_ERROR("Could not get input xAOD::EventInfo " << inputEventInfo.name() << " from store " << inputEventInfo.store()); + return StatusCode::FAILURE; + } + ATH_MSG_DEBUG("Found input xAOD::EventInfo " << inputEventInfo.name() << " in store " << inputEventInfo.store()); + + SG::WriteHandle<xAOD::EventInfo> eventInfo(m_outputKey, ctx); + ATH_CHECK(eventInfo.record(std::make_unique<xAOD::EventInfo>(), std::make_unique<xAOD::EventAuxInfo>())); + if (!eventInfo.isValid()) { + ATH_MSG_ERROR("Could not record output xAOD::EventInfo " << eventInfo.name() << " to store " << eventInfo.store()); + return StatusCode::FAILURE; + } + ATH_MSG_DEBUG("Recorded output xAOD::EventInfo " << eventInfo.name() << " in store " << eventInfo.store()); + + // Copy the eventInfo data + *eventInfo = *inputEventInfo; + + // Copy the beamspot info + eventInfo->setBeamPos( beamSpotHandle->beamPos()[ Amg::x ], + beamSpotHandle->beamPos()[ Amg::y ], + beamSpotHandle->beamPos()[ Amg::z ] ); + eventInfo->setBeamPosSigma( beamSpotHandle->beamSigma( 0 ), + beamSpotHandle->beamSigma( 1 ), + beamSpotHandle->beamSigma( 2 ) ); + eventInfo->setBeamPosSigmaXY( beamSpotHandle->beamSigmaXY() ); + eventInfo->setBeamTiltXZ( beamSpotHandle->beamTilt( 0 ) ); + eventInfo->setBeamTiltYZ( beamSpotHandle->beamTilt( 1 ) ); + eventInfo->setBeamStatus( beamSpotHandle->beamStatus() ); + + return StatusCode::SUCCESS; + } + +} // namespace Simulation diff --git a/Simulation/BeamEffects/src/BeamSpotFixerAlg.h b/Simulation/BeamEffects/src/BeamSpotFixerAlg.h new file mode 100644 index 00000000000..522ce986f2e --- /dev/null +++ b/Simulation/BeamEffects/src/BeamSpotFixerAlg.h @@ -0,0 +1,50 @@ +// Dear emacs, this is -*- C++ -*- + +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/// @author Tadej Novak <tadej@cern.ch> + +#ifndef BEAMEFFECTS_BEAMSPOTFIXERALG_H +#define BEAMEFFECTS_BEAMSPOTFIXERALG_H + +#include <AthenaBaseComps/AthReentrantAlgorithm.h> +#include <StoreGate/ReadCondHandleKey.h> +#include <StoreGate/ReadHandleKey.h> +#include <StoreGate/WriteHandleKey.h> + +#include <BeamSpotConditionsData/BeamSpotData.h> +#include <xAODEventInfo/EventInfo.h> + +namespace Simulation +{ + + /** @class BeamSpotFixerAlg + An algorithm to fix beam spot information in xAOD::EventInfo + */ + class BeamSpotFixerAlg : public AthReentrantAlgorithm + { + public: + //** Constructor with parameters */ + BeamSpotFixerAlg( const std::string& name, ISvcLocator* pSvcLocator ); + + /** Destructor */ + virtual ~BeamSpotFixerAlg() = default; + + /** Athena algorithm's interface method initialize() */ + virtual StatusCode initialize() override final; + + /** Athena algorithm's interface method execute() */ + virtual StatusCode execute(const EventContext& ctx) const override final; + + private: + SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }; + + SG::ReadHandleKey<xAOD::EventInfo> m_inputKey{ this, "InputKey", "Input_EventInfo", "ReadHandleKey for Input xAOD::EventInfo" }; + SG::WriteHandleKey<xAOD::EventInfo> m_outputKey{ this, "OutputKey", "EventInfo", "WriteHandleKey for Output xAOD::EventInfo" }; + }; + +} + +#endif // BEAMEFFECTS_BEAMSPOTFIXERALG_H diff --git a/Simulation/BeamEffects/src/components/BeamEffects_entries.cxx b/Simulation/BeamEffects/src/components/BeamEffects_entries.cxx index 9ed156c684d..3ed6c64863f 100644 --- a/Simulation/BeamEffects/src/components/BeamEffects_entries.cxx +++ b/Simulation/BeamEffects/src/components/BeamEffects_entries.cxx @@ -8,7 +8,9 @@ #include "../GenEventBeamEffectBooster.h" #include "../GenEventRotator.h" #include "../BeamEffectsAlg.h" +#include "../BeamSpotFixerAlg.h" #include "../BeamSpotReweightingAlg.h" + DECLARE_COMPONENT( Simulation::ZeroLifetimePositioner ) DECLARE_COMPONENT( Simulation::GenEventValidityChecker ) DECLARE_COMPONENT( Simulation::GenEventVertexPositioner ) @@ -19,5 +21,5 @@ DECLARE_COMPONENT( Simulation::VertexPositionFromFile ) DECLARE_COMPONENT( Simulation::GenEventBeamEffectBooster ) DECLARE_COMPONENT( Simulation::GenEventRotator ) DECLARE_COMPONENT( Simulation::BeamEffectsAlg ) +DECLARE_COMPONENT( Simulation::BeamSpotFixerAlg ) DECLARE_COMPONENT( Simulation::BeamSpotReweightingAlg ) - diff --git a/Simulation/Digitization/python/DigiAlgConfig.py b/Simulation/Digitization/python/DigiAlgConfig.py index 561a10c8fb8..f40254bc552 100644 --- a/Simulation/Digitization/python/DigiAlgConfig.py +++ b/Simulation/Digitization/python/DigiAlgConfig.py @@ -481,6 +481,11 @@ def getStandardPileUpToolsAlg(name="StandardPileUpToolsAlg", **kwargs): kwargs.setdefault('ExtraInputs', [('xAOD::EventInfo', 'EventInfo')]) from Digitization.DigitizationFlags import digitizationFlags if digitizationFlags.doXingByXingPileUp(): + if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi(): + from OverlayCommonAlgs.OverlayFlags import overlayFlags + kwargs.setdefault('EventInfoKey', overlayFlags.bkgPrefix() + 'EventInfo') + else: + kwargs.setdefault('EventInfoKey', 'EventInfo') return CfgMgr.PileUpToolsAlg(name, **kwargs) else: return CfgMgr.DigitizationAlg(name, **kwargs) diff --git a/Simulation/Digitization/python/DigiOutput.py b/Simulation/Digitization/python/DigiOutput.py index 92e67613c8a..262ed87cc51 100644 --- a/Simulation/Digitization/python/DigiOutput.py +++ b/Simulation/Digitization/python/DigiOutput.py @@ -64,8 +64,12 @@ def getStreamRDO_ItemList(log): if DetFlags.pileup.any_on() or digitizationFlags.doXingByXingPileUp(): if DetFlags.writeRDOPool.any_on(): + outputKey = 'EventInfo' + if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi(): + from OverlayCommonAlgs.OverlayFlags import overlayFlags + outputKey = overlayFlags.bkgPrefix() + 'EventInfo' #add to output stream - StreamRDO_ItemList += [ "xAOD::EventInfo#*", "xAOD::EventAuxInfo#*" ] + StreamRDO_ItemList += [ "xAOD::EventInfo#" + outputKey, "xAOD::EventAuxInfo#" + outputKey + "Aux."] StreamRDO_ItemList += [ "xAOD::EventInfoContainer#*", "xAOD::EventInfoAuxContainer#*"] # Set up for cosmics digitization from AthenaCommon.BeamFlags import jobproperties diff --git a/Simulation/Digitization/python/PileUpConfig.py b/Simulation/Digitization/python/PileUpConfig.py index acfe41b7ac2..5afe5d8744f 100644 --- a/Simulation/Digitization/python/PileUpConfig.py +++ b/Simulation/Digitization/python/PileUpConfig.py @@ -258,9 +258,6 @@ def getPileUpEventLoopMgr(name="PileUpEventLoopMgr", **kwargs): kwargs.setdefault('BeamLuminosity', noProfileSvc) ServiceMgr += noProfileSvc - # Special case for pre-mixing - if digitizationFlags.PileUpPremixing and 'OverlayMT' in digitizationFlags.experimentalDigi(): - from OverlayCommonAlgs.OverlayFlags import overlayFlags - kwargs.setdefault('EventInfoName', overlayFlags.bkgPrefix() + 'EventInfo') + kwargs.setdefault('EventInfoName', 'Input_EventInfo') # for beam spot fix return CfgMgr.PileUpEventLoopMgr(name, **kwargs) diff --git a/Simulation/Digitization/share/BeamSpot.py b/Simulation/Digitization/share/BeamSpot.py new file mode 100644 index 00000000000..45cb1457939 --- /dev/null +++ b/Simulation/Digitization/share/BeamSpot.py @@ -0,0 +1,21 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +# Always schedule beam spot conditions for digi +from AthenaCommon.AlgSequence import AthSequencer +condSeq = AthSequencer("AthCondSeq") +if not hasattr(condSeq, "BeamSpotCondAlg"): + from IOVDbSvc.CondDB import conddb + conddb.addFolderSplitOnline("INDET", "/Indet/Onl/Beampos", "/Indet/Beampos", className="AthenaAttributeList") + from BeamSpotConditions.BeamSpotConditionsConf import BeamSpotCondAlg + condSeq += BeamSpotCondAlg("BeamSpotCondAlg") + +# Add beam spot fixer +from AthenaCommon import CfgGetter +from AthenaCommon.DetFlags import DetFlags +from AthenaCommon.GlobalFlags import globalflags +from Digitization.DigitizationFlags import digitizationFlags +from OverlayCommonAlgs.OverlayFlags import overlayFlags +if (DetFlags.pileup.any_on() or digitizationFlags.doXingByXingPileUp()) or (globalflags.isOverlay() and not overlayFlags.isOverlayMT()): + from AthenaCommon.AlgSequence import AlgSequence + job = AlgSequence() + job += CfgGetter.getAlgorithm("BeamSpotFixerAlg") diff --git a/Simulation/Digitization/share/DetectorDigitization.py b/Simulation/Digitization/share/DetectorDigitization.py index 820e1b04ac2..c801261154a 100755 --- a/Simulation/Digitization/share/DetectorDigitization.py +++ b/Simulation/Digitization/share/DetectorDigitization.py @@ -41,6 +41,10 @@ if 'LegacyEventInfo' in digitizationFlags.experimentalDigi() and \ from xAODEventInfoCnv.xAODEventInfoCnvAlgDefault import xAODEventInfoCnvAlgDefault xAODEventInfoCnvAlgDefault (sequence = job) +# Beam spot +include( "Digitization/BeamSpot.py" ) + +# Configure main algorithm job += CfgGetter.getAlgorithm(digitizationFlags.digiSteeringConf.get_Value(), tryDefaultConfigurable=True) if 'doFastPixelDigi' in digitizationFlags.experimentalDigi() or 'doFastSCT_Digi' in digitizationFlags.experimentalDigi() or 'doFastTRT_Digi' in digitizationFlags.experimentalDigi(): print ("WARNING Setting doFastPixelDigi ,doFastSCT_Digi or doFastTRT_Digi in digitizationFlags.experimentalDigi no longer overrides digitizationFlags.digiSteeringConf.") diff --git a/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py b/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py index 850c6f54371..99c84a4c704 100755 --- a/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py +++ b/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py @@ -155,18 +155,18 @@ class TestDigitizationMC16a(unittest.TestCase): expected_Property) - def test___PileUpToolsAlg_is_second_in_AthAlgSeq(self): - expected_AlgSequence = ['TimingAlg/DigiTimerBegin', 'PileUpToolsAlg/StandardSignalOnlyTruthPileUpToolsAlg', 'LArRawChannelBuilderAlg/LArRawChannelBuilder', 'LArDigitThinner/LArDigitThinner', 'TileDigitsMaker/TileDigitsMaker', 'TileDQstatusAlg/TileDQstatusAlg', 'TileRawChannelMaker/TileRChMaker', 'TileRawChannelToL2/TileRawChannelToL2', 'CscDigitToCscRDO/CscDigitToCscRDO', 'MdtDigitToMdtRDO/MdtDigitToMdtRDO', 'RpcDigitToRpcRDO/RpcDigitToRpcRDO', 'TgcDigitToTgcRDO/TgcDigitToTgcRDO', 'LArTTL1Maker/LArTTL1Maker', 'TileHitToTTL1/TileHitToTTL1', 'TilePulseForTileMuonReceiver/TilePulseForTileMuonReceiver', 'TileMuonReceiverDecision/TileMuonReceiverDecision'] + def test___PileUpToolsAlg_is_third_in_AthAlgSeq(self): + expected_AlgSequence = ['TimingAlg/DigiTimerBegin', 'Simulation::BeamSpotFixerAlg/BeamSpotFixerAlg', 'PileUpToolsAlg/StandardSignalOnlyTruthPileUpToolsAlg', 'LArRawChannelBuilderAlg/LArRawChannelBuilder', 'LArDigitThinner/LArDigitThinner', 'TileDigitsMaker/TileDigitsMaker', 'TileDQstatusAlg/TileDQstatusAlg', 'TileRawChannelMaker/TileRChMaker', 'TileRawChannelToL2/TileRawChannelToL2', 'CscDigitToCscRDO/CscDigitToCscRDO', 'MdtDigitToMdtRDO/MdtDigitToMdtRDO', 'RpcDigitToRpcRDO/RpcDigitToRpcRDO', 'TgcDigitToTgcRDO/TgcDigitToTgcRDO', 'LArTTL1Maker/LArTTL1Maker', 'TileHitToTTL1/TileHitToTTL1', 'TilePulseForTileMuonReceiver/TilePulseForTileMuonReceiver', 'TileMuonReceiverDecision/TileMuonReceiverDecision'] ignore_Algs = ['EventInfoTagBuilder/EventInfoTagBuilder'] ath_alg_seqence_as_str = self._job_config_dict['AthAlgSeq']['Members'] # need to evaluate to obtain actual Python object ath_alg_seqence_list = [ alg for alg in eval(ath_alg_seqence_as_str) if alg not in ignore_Algs ] - actual_2nd_ath_alg_sequence_entry = ath_alg_seqence_list[1] + actual_3rd_ath_alg_sequence_entry = ath_alg_seqence_list[2] print(ath_alg_seqence_list) - expected_2nd_ath_alg_sequence_entry = "PileUpToolsAlg/StandardSignalOnlyTruthPileUpToolsAlg" - self.assertEqual(expected_2nd_ath_alg_sequence_entry, - actual_2nd_ath_alg_sequence_entry) + expected_3rd_ath_alg_sequence_entry = "PileUpToolsAlg/StandardSignalOnlyTruthPileUpToolsAlg" + self.assertEqual(expected_3rd_ath_alg_sequence_entry, + actual_3rd_ath_alg_sequence_entry) self.assertEqual(expected_AlgSequence, ath_alg_seqence_list) diff --git a/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py b/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py index 63e701386fd..f9ccd52afcc 100644 --- a/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py +++ b/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py @@ -216,6 +216,9 @@ include('EventOverlayJobTransforms/ConfiguredOverlayMT_jobOptions.py') # noqa F # load the input properly include('EventOverlayJobTransforms/OverlayInput_jobOptions.py') # noqa F821 +# Always schedule beam spot conditions for overlay +include('Digitization/BeamSpot.py') # noqa F821 + if DetFlags.overlay.Truth_on(): include('EventOverlayJobTransforms/TruthOverlay_jobOptions.py') # noqa F821 -- GitLab