diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/SCT_Digitization/SCT_DigitizationTool.h b/InnerDetector/InDetDigitization/SCT_Digitization/SCT_Digitization/SCT_DigitizationTool.h index 398e6863abebb757aa3e80595d5f4c2eb27f8f1c..2ceb2e7d4b9cc05e761bc214ff4e2e855299c544 100644 --- a/InnerDetector/InDetDigitization/SCT_Digitization/SCT_Digitization/SCT_DigitizationTool.h +++ b/InnerDetector/InDetDigitization/SCT_Digitization/SCT_Digitization/SCT_DigitizationTool.h @@ -141,6 +141,7 @@ private: std::vector<SiHitCollection*> m_hitCollPtrs; + SG::ReadHandleKey<SiHitCollection> m_hitsContainerKey{this, "InputSingleHitsName", "", "Input Single HITS name"}; SG::WriteHandleKey<SCT_RDO_Container> m_rdoContainerKey{this, "OutputObjectName", "SCT_RDOs", "Output Object name"}; SG::WriteHandle<SCT_RDO_Container> m_rdoContainer; //!< RDO container handle SG::WriteHandleKey<InDetSimDataCollection> m_simDataCollMapKey{this, "OutputSDOName", "SCT_SDO_Map", "Output SDO container name"}; diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py index b78f88d810cdea3623e8daa4275c68764967916d..71ac7a7aecc3ca86a6eb11f00d2fb00f0f720d0d 100644 --- a/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py +++ b/InnerDetector/InDetDigitization/SCT_Digitization/python/SCT_DigitizationConfig.py @@ -258,9 +258,13 @@ def SCT_DigitizationToolSplitNoMergePU(name="SCT_DigitizationToolSplitNoMergePU" def SCT_OverlayDigitizationTool(name="SCT_OverlayDigitizationTool",**kwargs): from OverlayCommonAlgs.OverlayFlags import overlayFlags - kwargs.setdefault("EvtStore", overlayFlags.evtStore()) - kwargs.setdefault("OutputObjectName", overlayFlags.evtStore() + "+SCT_RDOs") - kwargs.setdefault("OutputSDOName", overlayFlags.evtStore() + "+SCT_SDO_Map") + if overlayFlags.isOverlayMT(): + kwargs.setdefault("InputSingleHitsName", "SCT_Hits") + kwargs.setdefault("OutputObjectName", "StoreGateSvc+" + overlayFlags.sigPrefix() + "SCT_RDOs") + kwargs.setdefault("OutputSDOName", "StoreGateSvc+" + overlayFlags.sigPrefix() + "SCT_SDO_Map") + else: + kwargs.setdefault("OutputObjectName", overlayFlags.evtStore() + "+SCT_RDOs") + kwargs.setdefault("OutputSDOName", overlayFlags.evtStore() + "+SCT_SDO_Map") kwargs.setdefault("HardScatterSplittingMode", 0) return commonSCT_DigitizationConfig(name,**kwargs) diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_DigitizationTool.cxx b/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_DigitizationTool.cxx index 8234473e0e1f3267f55425c8a1d5e687769e535e..c97b07dc860a6152bbbc43fda4943c9a9f5260b4 100644 --- a/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_DigitizationTool.cxx +++ b/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_DigitizationTool.cxx @@ -107,6 +107,12 @@ StatusCode SCT_DigitizationTool::initialize() { } else { m_sct_RandomDisabledCellGenerator.disable(); } + + // Initialize ReadHandleKey + if (!m_hitsContainerKey.key().empty()) { + ATH_MSG_INFO("Loading single input HITS"); + } + ATH_CHECK(m_hitsContainerKey.initialize(!m_hitsContainerKey.key().empty())); // +++ Initialize WriteHandleKey ATH_CHECK(m_rdoContainerKey.initialize()); @@ -748,6 +754,23 @@ StatusCode SCT_DigitizationTool::getNextEvent() { // get the container(s) typedef PileUpMergeSvc::TimedList<SiHitCollection>::type TimedHitCollList; // this is a list<pair<time_t, DataLink<SiHitCollection> > + + // In case of single hits container just load the collection using read handles + if (!m_hitsContainerKey.key().empty()) { + SG::ReadHandle<SiHitCollection> hitCollection(m_hitsContainerKey); + if (!hitCollection.isValid()) { + ATH_MSG_ERROR("Could not get SCT SiHitCollection container " << hitCollection.name() << " from store " << hitCollection.store()); + return StatusCode::FAILURE; + } + + // create a new hits collection + m_thpcsi = new TimedHitCollection<SiHit>{1}; + m_thpcsi->insert(0, hitCollection.cptr()); + ATH_MSG_DEBUG("SiHitCollection found with " << hitCollection->size() << " hits"); + + return StatusCode::SUCCESS; + } + TimedHitCollList hitCollList; unsigned int numberOfSiHits{0}; if (not (m_mergeSvc->retrieveSubEvtsData(m_inputObjectName, hitCollList, numberOfSiHits).isSuccess()) and hitCollList.size() == 0) { @@ -775,7 +798,7 @@ StatusCode SCT_DigitizationTool::getNextEvent() { } const SiHitCollection* p_collection{iColl->second}; m_thpcsi->insert(iColl->first, p_collection); - ATH_MSG_DEBUG("SiTrackerHitCollection found with" << p_collection->size() << " hits"); // loop on the hit collections + ATH_MSG_DEBUG("SiTrackerHitCollection found with " << p_collection->size() << " hits"); // loop on the hit collections } return StatusCode::SUCCESS; }