diff --git a/Event/EventOverlay/EventOverlayJobTransforms/share/InnerDetectorOverlay_jobOptions.py b/Event/EventOverlay/EventOverlayJobTransforms/share/InnerDetectorOverlay_jobOptions.py index e6632595257ba83be88b6d9f649d002f7036c9d8..7487b652ad3490230c89dc5206e67a452dfcd922 100644 --- a/Event/EventOverlay/EventOverlayJobTransforms/share/InnerDetectorOverlay_jobOptions.py +++ b/Event/EventOverlay/EventOverlayJobTransforms/share/InnerDetectorOverlay_jobOptions.py @@ -59,14 +59,15 @@ if DetFlags.overlay.pixel_on() or DetFlags.overlay.SCT_on() or DetFlags.overlay. from TRT_ElectronPidTools.TRT_ElectronPidToolsConf import InDet__TRT_LocalOccupancy TRT_LocalOccupancy = InDet__TRT_LocalOccupancy(name="TRT_LocalOccupancy", isTrigger= False ) - ToolSvc += TRT_LocalOccupancy job += CfgGetter.getAlgorithm("TRT_OverlayDigitization") job += CfgGetter.getAlgorithm("TRTOverlay") - + job.TRTOverlay.TRT_LocalOccupancyTool = TRT_LocalOccupancy + from InDetRecExample.InDetJobProperties import InDetFlags include("InDetRecExample/InDetRecConditionsAccess.py") - + job.InDetTRTStrawStatusSummarySvc = InDetTRTStrawStatusSummarySvc + if overlayFlags.isDataOverlay(): job.InDetTRTRawDataProvider.RDOKey = overlayFlags.dataStore()+"+TRT_RDOs" #ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "TRT_RDO_Container/TRT_RDOs" ] diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/CMakeLists.txt b/InnerDetector/InDetRawAlgs/InDetOverlay/CMakeLists.txt index bfd79b079e996995f2a65398a9ab1a483ca3d3ac..7282308268c7020d5402f74199a6621ecb278b57 100644 --- a/InnerDetector/InDetRawAlgs/InDetOverlay/CMakeLists.txt +++ b/InnerDetector/InDetRawAlgs/InDetOverlay/CMakeLists.txt @@ -28,7 +28,7 @@ atlas_add_component( InDetOverlay src/*.cxx src/components/*.cxx INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps IDC_OverlayBase GaudiKernel InDetRawData StoreGateLib SGtests CxxUtils GeneratorObjects InDetIdentifier InDetSimData TrkTrack ) + LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaBaseComps IDC_OverlayBase GaudiKernel InDetRawData StoreGateLib SGtests CxxUtils GeneratorObjects InDetIdentifier InDetSimData TrkTrack TRT_ConditionsServicesLib) # Install files from the package: atlas_install_headers( InDetOverlay ) diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/InDetOverlay/TRTOverlay.h b/InnerDetector/InDetRawAlgs/InDetOverlay/InDetOverlay/TRTOverlay.h index b6f44e88087a94590a9cde55fbc3514b9fa1be4b..4bc4fba12cde89006cdc4a3b6c681638886c078f 100644 --- a/InnerDetector/InDetRawAlgs/InDetOverlay/InDetOverlay/TRTOverlay.h +++ b/InnerDetector/InDetRawAlgs/InDetOverlay/InDetOverlay/TRTOverlay.h @@ -12,6 +12,7 @@ #include "GaudiKernel/ServiceHandle.h" #include "InDetSimData/InDetSimDataCollection.h" #include "TRT_ElectronPidTools/ITRT_LocalOccupancy.h" +#include "TRT_ConditionsServices/ITRT_StrawStatusSummarySvc.h" class TRT_ID; @@ -63,6 +64,8 @@ private: double m_HTOccupancyCorrectionB_noE; double m_HTOccupancyCorrectionEC_noE; ToolHandle<InDet::ITRT_LocalOccupancy> m_TRT_LocalOccupancyTool; + ServiceHandle<ITRT_StrawStatusSummarySvc> m_TRTStrawSummarySvc; + }; #endif // INDETOVERLAY_TRTOVERLAY_H diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/python/InDetOverlayConfig.py b/InnerDetector/InDetRawAlgs/InDetOverlay/python/InDetOverlayConfig.py index ae56833b4415c0c019ac5e7863cd7d4b0a0775fc..46ea3c956e0541e7624184c7574e6def15c5add6 100644 --- a/InnerDetector/InDetRawAlgs/InDetOverlay/python/InDetOverlayConfig.py +++ b/InnerDetector/InDetRawAlgs/InDetOverlay/python/InDetOverlayConfig.py @@ -44,8 +44,10 @@ def getTRTOverlay(name="TRTOverlay", **kwargs): kwargs.setdefault("TRT_LocalOccupancyTool", "TRT_LocalOccupancy") # HT hit correction fraction - kwargs.setdefault("TRT_HT_OccupancyCorrectionBarrel", 0.160) - kwargs.setdefault("TRT_HT_OccupancyCorrectionEndcap", 0.130) + kwargs.setdefault("TRT_HT_OccupancyCorrectionBarrel", 0.110) + kwargs.setdefault("TRT_HT_OccupancyCorrectionEndcap", 0.090) + kwargs.setdefault("TRT_HT_OccupancyCorrectionBarrelNoE", 0.060) + kwargs.setdefault("TRT_HT_OccupancyCorrectionEndcapNoE", 0.050) return CfgMgr.TRTOverlay(name, **kwargs) diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/src/TRTOverlay.cxx b/InnerDetector/InDetRawAlgs/InDetOverlay/src/TRTOverlay.cxx index edd963f9abc12b18d2dcb36c3a010284657a2925..c4431e59184000f1e2520dd7051e5fd9c38afc41 100644 --- a/InnerDetector/InDetRawAlgs/InDetOverlay/src/TRTOverlay.cxx +++ b/InnerDetector/InDetRawAlgs/InDetOverlay/src/TRTOverlay.cxx @@ -70,17 +70,20 @@ TRTOverlay::TRTOverlay(const std::string &name, ISvcLocator *pSvcLocator) m_rndmSvc("AtRndmGenSvc",name), m_rndmEngineName("TRTOverlay"), m_rndmEngine(nullptr), - m_TRT_LocalOccupancyTool("TRT_LocalOccupancy") + m_TRT_LocalOccupancyTool("TRT_LocalOccupancy",this), + m_TRTStrawSummarySvc("TRT_StrawStatusSummarySvc","TRT_StrawStatusSummarySvc") { declareProperty("RndmSvc", m_rndmSvc, "Random Number Service"); declareProperty("RndmEngine", m_rndmEngineName, "Random engine name"); declareProperty("TRT_LocalOccupancyTool", m_TRT_LocalOccupancyTool); - declareProperty("TRT_HT_OccupancyCorrectionBarrel", m_HTOccupancyCorrectionB=0.160); - declareProperty("TRT_HT_OccupancyCorrectionEndcap", m_HTOccupancyCorrectionEC=0.130); - declareProperty("TRT_HT_OccupancyCorrectionBarrelNoE", m_HTOccupancyCorrectionB_noE=0.105); - declareProperty("TRT_HT_OccupancyCorrectionEndcapNoE", m_HTOccupancyCorrectionEC_noE=0.080); + declareProperty("TRT_HT_OccupancyCorrectionBarrel", m_HTOccupancyCorrectionB=0.110); + declareProperty("TRT_HT_OccupancyCorrectionEndcap", m_HTOccupancyCorrectionEC=0.090); + declareProperty("TRT_HT_OccupancyCorrectionBarrelNoE", m_HTOccupancyCorrectionB_noE=0.060); + declareProperty("TRT_HT_OccupancyCorrectionEndcapNoE", m_HTOccupancyCorrectionEC_noE=0.050); + + declareProperty("TRTStrawSummarySvc", m_TRTStrawSummarySvc); } StatusCode TRTOverlay::initialize() @@ -121,6 +124,17 @@ StatusCode TRTOverlay::initialize() // Retrieve TRT local occupancy tool CHECK(m_TRT_LocalOccupancyTool.retrieve()); + if (!m_TRTStrawSummarySvc.empty() && m_TRTStrawSummarySvc.retrieve().isFailure() ) { + ATH_MSG_ERROR ("Failed to retrieve StrawStatus Summary " << m_TRTStrawSummarySvc); + ATH_MSG_ERROR ("configure as 'None' to avoid its loading."); + return StatusCode::FAILURE; + } else { + if ( !m_TRTStrawSummarySvc.empty()) + ATH_MSG_INFO( "Retrieved tool " << m_TRTStrawSummarySvc ); + } + + + return StatusCode::SUCCESS; } @@ -335,6 +349,15 @@ void TRTOverlay::mergeTRTCollections(TRT_RDO_Collection *bkgCollection, } } + // Determine what type of straw was hit + bool isXenonStraw = false; + if (!m_TRTStrawSummarySvc.empty()) { + if (m_TRTStrawSummarySvc->getStatusHT(rdoId) == TRTCond::StrawStatus::Good) { + isXenonStraw = true; + } + } + + unsigned int newword = 0; //Get random number @@ -346,7 +369,7 @@ void TRTOverlay::mergeTRTCollections(TRT_RDO_Collection *bkgCollection, HTOccupancyCorrection = abs(det) > 1 ? m_HTOccupancyCorrectionEC_noE : m_HTOccupancyCorrectionB_noE; } - if( occupancy * HTOccupancyCorrection > CLHEP::RandFlat::shoot( m_rndmEngine, 0, 1) ) + if( isXenonStraw && occupancy * HTOccupancyCorrection > CLHEP::RandFlat::shoot( m_rndmEngine, 0, 1) ) newword += 1 << (26-9); // TRT_LoLumRawData newrdo( pr1->identify(), newword); @@ -364,3 +387,4 @@ void TRTOverlay::mergeTRTCollections(TRT_RDO_Collection *bkgCollection, outputCollection->push_back(p_rdo); } // <= while } +