diff --git a/Event/EventOverlay/EventOverlayJobTransforms/share/MuonOverlay_jobOptions.py b/Event/EventOverlay/EventOverlayJobTransforms/share/MuonOverlay_jobOptions.py index c2608fd0b0424945624676a952d3bfc8bd0b1eb5..06712206c31a681e0e2e1c60961219167d35fdd6 100644 --- a/Event/EventOverlay/EventOverlayJobTransforms/share/MuonOverlay_jobOptions.py +++ b/Event/EventOverlay/EventOverlayJobTransforms/share/MuonOverlay_jobOptions.py @@ -47,10 +47,7 @@ if DetFlags.overlay.MDT_on() or DetFlags.overlay.CSC_on() or DetFlags.overlay.RP job += CfgGetter.getAlgorithm("MdtDigitToMdtRDO") if DetFlags.overlay.sTGC_on(): - # As of July 2019, the input RDOs still hold a DigitContainer - # so no Need to run Rdo->Digit - # To be changed when we remove digitContainer from RDO - #job += CfgGetter.getAlgorithm("STGC_RdoToDigitAlg") + job += CfgGetter.getAlgorithm("STGC_RdoToDigitAlg") job += CfgGetter.getAlgorithm("STGC_OverlayDigitizer") job += CfgGetter.getAlgorithm("STGC_Overlay") if not overlayFlags.isDataOverlay(): @@ -58,10 +55,7 @@ if DetFlags.overlay.MDT_on() or DetFlags.overlay.CSC_on() or DetFlags.overlay.RP job += CfgGetter.getAlgorithm("STGC_DigitToRDO") if DetFlags.overlay.Micromegas_on(): - # As of July 2019, the input RDOs still hold a DigitContainer - # so no need to run Rdo->Digit - # To be changed when we remove digitContainer from RDO - #job += CfgGetter.getAlgorithm("MM_RdoToDigitAlg") + job += CfgGetter.getAlgorithm("MM_RdoToDigitAlg") job += CfgGetter.getAlgorithm("MM_OverlayDigitizer") job += CfgGetter.getAlgorithm("MM_Overlay") if not overlayFlags.isDataOverlay(): diff --git a/Event/EventOverlay/EventOverlayJobTransforms/share/OverlayOutput_jobOptions.py b/Event/EventOverlay/EventOverlayJobTransforms/share/OverlayOutput_jobOptions.py index e6115496c7f8de3e8de772eea7763ee2fba7a46b..18b581350dd14a339b4d72193272dc5d99a83d76 100644 --- a/Event/EventOverlay/EventOverlayJobTransforms/share/OverlayOutput_jobOptions.py +++ b/Event/EventOverlay/EventOverlayJobTransforms/share/OverlayOutput_jobOptions.py @@ -115,9 +115,11 @@ if DetFlags.overlay.TGC_on(): if DetFlags.overlay.sTGC_on(): outStream.ItemList += [ 'Muon::STGC_RawDataContainer#sTGCRDO' ] + outStream.ItemList += [ "sTgcDigitContainer#sTGC_DIGITS" ] if DetFlags.overlay.Micromegas_on(): outStream.ItemList += [ 'Muon::MM_RawDataContainer#MMRDO' ] + outStream.ItemList += [ "MmDigitContainer#MM_DIGITS" ] if DetFlags.overlay.LVL1_on(): if DetFlags.simulateLVL1.LAr_on(): diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_DigitizationTool.h b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_DigitizationTool.h index 908a10b8ebef21c5f38ed309c46862e537c7b88f..00f489ffabb54939df9a36c7c92b10e2b957cba0 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_DigitizationTool.h +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/MM_Digitization/MM_DigitizationTool.h @@ -113,7 +113,7 @@ class MM_DigitizationTool : public PileUpToolBase { private: /** Record MmDigitContainer and MuonSimDataCollection */ - StatusCode getNextEvent(); + StatusCode getNextEvent(const EventContext& ctx); StatusCode doDigitization(const EventContext& ctx); bool checkMMSimHit(const MMSimHit& /* hit */ ) const; diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/python/MM_DigitizationConfig.py b/MuonSpectrometer/MuonDigitization/MM_Digitization/python/MM_DigitizationConfig.py index de87d975364ebb5e9e73822dc1d82c302f24744a..6c28133e59cb8ba108899428cb537a007dbab33e 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/python/MM_DigitizationConfig.py +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/python/MM_DigitizationConfig.py @@ -60,6 +60,7 @@ def MM_Response_DigitTool(name="MM_Response_DigitTool",**kwargs): def MM_OverlayDigitizationTool(name="MM_OverlayDigitizationTool",**kwargs): from OverlayCommonAlgs.OverlayFlags import overlayFlags if overlayFlags.isOverlayMT(): + kwargs.setdefault("OnlyUseContainerName", False) kwargs.setdefault("OutputObjectName", overlayFlags.sigPrefix() + "MM_DIGITS") if not overlayFlags.isDataOverlay(): kwargs.setdefault("OutputSDOName", overlayFlags.sigPrefix() + "MM_SDO") diff --git a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_DigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_DigitizationTool.cxx index 9a20034e37996e5de92b9a3c11b77f278aafa667..2b7a70825b733755709013d706a2407dc52386d9 100644 --- a/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_DigitizationTool.cxx +++ b/MuonSpectrometer/MuonDigitization/MM_Digitization/src/MM_DigitizationTool.cxx @@ -328,7 +328,7 @@ StatusCode MM_DigitizationTool::processBunchXing(int bunchXing, } /*******************************************************************************/ -StatusCode MM_DigitizationTool::getNextEvent() { +StatusCode MM_DigitizationTool::getNextEvent(const EventContext& ctx) { // Get next event and extract collection of hit collections: // This is applicable to non-PileUp Event... @@ -338,6 +338,21 @@ StatusCode MM_DigitizationTool::getNextEvent() { // get the container(s) typedef PileUpMergeSvc::TimedList<MMSimHitCollection>::type TimedHitCollList; + // In case of single hits container just load the collection using read handles + if (!m_onlyUseContainerName) { + SG::ReadHandle<MMSimHitCollection> hitCollection(m_hitsContainerKey, ctx); + if (!hitCollection.isValid()) { + ATH_MSG_ERROR("Could not get MMSimHitCollection container " << hitCollection.name() << " from store " << hitCollection.store()); + return StatusCode::FAILURE; + } + + // create a new hits collection + m_timedHitCollection_MM = std::make_unique<TimedHitCollection<MMSimHit>>(1); + m_timedHitCollection_MM->insert(0, hitCollection.cptr()); + ATH_MSG_DEBUG("MMSimHitCollection found with " << hitCollection->size() << " hits"); + return StatusCode::SUCCESS; + } + //this is a list<info<time_t, DataLink<MMSimHitCollection> > > TimedHitCollList hitCollList; @@ -397,7 +412,7 @@ StatusCode MM_DigitizationTool::processAllSubEvents(const EventContext& ctx) { //merging of the hit collection in getNextEvent method - if (m_timedHitCollection_MM == nullptr) ATH_CHECK( getNextEvent() ); + if (m_timedHitCollection_MM == nullptr) ATH_CHECK( getNextEvent(ctx) ); ATH_CHECK( doDigitization(ctx) ); diff --git a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/python/sTGC_DigitizationConfig.py b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/python/sTGC_DigitizationConfig.py index 95da4c275dc0afa04cdba642bafb164a2fa9cb00..cf8758139fc3a585bc92626f63cd86263c30df83 100644 --- a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/python/sTGC_DigitizationConfig.py +++ b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/python/sTGC_DigitizationConfig.py @@ -47,6 +47,7 @@ def getSTGCRange(name="sTgcRange", **kwargs): def STGC_OverlayDigitizationTool(name="STGC_OverlayDigitizationTool",**kwargs): from OverlayCommonAlgs.OverlayFlags import overlayFlags if overlayFlags.isOverlayMT(): + kwargs.setdefault("OnlyUseContainerName", False) kwargs.setdefault("OutputObjectName", overlayFlags.sigPrefix() + "sTGC_DIGITS") if not overlayFlags.isDataOverlay(): kwargs.setdefault("OutputSDOName", overlayFlags.sigPrefix() + "sTGC_SDO") diff --git a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitizationTool.h b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitizationTool.h index 885cf8eca76329c62cd1b243172ae9e93dfff0df..3cb01a0e2039e114182a41a3cc5fb097074b26c7 100644 --- a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitizationTool.h +++ b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitizationTool.h @@ -98,7 +98,7 @@ private: CLHEP::HepRandomEngine* getRandomEngine(const std::string& streamName, const EventContext& ctx) const; /** Get next event and extract collection of hit collections */ - StatusCode getNextEvent(); + StatusCode getNextEvent(const EventContext& ctx); /** Core part of digitization use by mergeEvent (IPileUpTool) and digitize (IMuonDigitizationTool) */ StatusCode doDigitization(const EventContext& ctx); diff --git a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx index 1c702151c4ff77c256f24c5f979ff6f1d29f4c6a..7463d2b401185e73d4cbb469d958c5af0a9edcf7 100644 --- a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx +++ b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx @@ -216,12 +216,27 @@ StatusCode sTgcDigitizationTool::processBunchXing(int bunchXing, return StatusCode::SUCCESS; } /*******************************************************************************/ -StatusCode sTgcDigitizationTool::getNextEvent() { +StatusCode sTgcDigitizationTool::getNextEvent(const EventContext& ctx) { ATH_MSG_DEBUG ( "sTgcDigitizationTool::getNextEvent()" ); // get the container(s) typedef PileUpMergeSvc::TimedList<sTGCSimHitCollection>::type TimedHitCollList; + + // In case of single hits container just load the collection using read handles + if (!m_onlyUseContainerName) { + SG::ReadHandle<sTGCSimHitCollection> hitCollection(m_hitsContainerKey, ctx); + if (!hitCollection.isValid()) { + ATH_MSG_ERROR("Could not get sTGCSimHitCollection container " << hitCollection.name() << " from store " << hitCollection.store()); + return StatusCode::FAILURE; + } + + // create a new hits collection + m_thpcsTGC = std::make_unique<TimedHitCollection<sTGCSimHit>>(1); + m_thpcsTGC->insert(0, hitCollection.cptr()); + ATH_MSG_DEBUG("sTGCSimHitCollection found with " << hitCollection->size() << " hits"); + return StatusCode::SUCCESS; + } //this is a list<info<time_t, DataLink<sTGCSimHitCollection> > > TimedHitCollList hitCollList; @@ -288,7 +303,7 @@ StatusCode sTgcDigitizationTool::processAllSubEvents(const EventContext& ctx) { //merging of the hit collection in getNextEvent method if (m_thpcsTGC == nullptr) { - status = getNextEvent(); + status = getNextEvent(ctx); if (StatusCode::FAILURE == status) { ATH_MSG_INFO ( "There are no sTGC hits in this event" ); return status;