From fbc96a81e5df5648132a2707cdfdb412df746054 Mon Sep 17 00:00:00 2001 From: Peter Hansen <hansenph@lxplus054.cern.ch> Date: Tue, 26 Jun 2018 20:32:38 +0200 Subject: [PATCH] Remove beginRun incidents and IOVCALLBACKs --- .../TRT_CalibAlgs/share/CollisionTemplate.py | 4 +- .../TRT_CalibAlgs/share/ESDCalibTemplate.py | 3 +- .../TRT_CalibAlgs/share/ESDTemplate.py | 3 +- .../TRT_CalibAlgs/share/joboptionsFullReco.py | 8 + .../share/joboptionsRefitting.py | 3 +- .../share/InDetDxAOD.py | 7 + .../share/ConfiguredInDetPreProcessingTRT.py | 12 +- .../share/InDetMonitoringTRT.py | 6 + .../share/InDetRecConditionsAccess.py | 5 +- .../share/InDetRecLoadTools.py | 10 + .../python/InDetTrigCommonTools.py | 21 +- .../python/InDetTrigConfigConditions.py | 9 +- .../ITRT_DriftFunctionTool.h | 4 +- .../TRT_DriftFunctionTool.h | 31 +- .../src/TRT_DriftFunctionTool.cxx | 296 +++++++----------- .../python/EMBremCollectionBuilder.py | 12 +- 16 files changed, 210 insertions(+), 224 deletions(-) diff --git a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/CollisionTemplate.py b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/CollisionTemplate.py index 9ecf0a2894b..e8687aaa900 100644 --- a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/CollisionTemplate.py +++ b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/CollisionTemplate.py @@ -222,9 +222,11 @@ from TRT_ConditionsServices.TRT_ConditionsServicesConf import TRT_CalDbSvc TRTCalibDBSvc=TRT_CalDbSvc() ServiceMgr += TRTCalibDBSvc + from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTRT_DriftFunctionTool", - TRTCalDbTool=TRTCalibDBSvc ) + TRTCalDbTool=TRTCalibDBSvc, + IsMC=(globalflags.DataSource == 'geant4')) ToolSvc += InDetTRT_DriftFunctionTool print InDetTRT_DriftFunctionTool diff --git a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/ESDCalibTemplate.py b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/ESDCalibTemplate.py index 0f6b04163ff..dba6aed353b 100644 --- a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/ESDCalibTemplate.py +++ b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/ESDCalibTemplate.py @@ -241,7 +241,8 @@ from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionToo InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTRT_DriftFunctionTool", AllowDataMCOverride = True, TRTCalDbTool=TRTCalSvc, - ForceData = True) + ForceData = True, + IsMC=(globalflags.DataSource == 'geant4')) ToolSvc += InDetTRT_DriftFunctionTool print InDetTRT_DriftFunctionTool diff --git a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/ESDTemplate.py b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/ESDTemplate.py index 1c77bf70406..e31436751c9 100644 --- a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/ESDTemplate.py +++ b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/ESDTemplate.py @@ -296,7 +296,8 @@ from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionToo InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTRT_DriftFunctionTool", AllowDataMCOverride = True, TRTCalDbTool=TRTCalSvc, - ForceData = True) + ForceData = True, + IsMC=(globalflags.DataSource == 'geant4')) ToolSvc += InDetTRT_DriftFunctionTool print InDetTRT_DriftFunctionTool diff --git a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/joboptionsFullReco.py b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/joboptionsFullReco.py index fa7162ef210..f47740da292 100755 --- a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/joboptionsFullReco.py +++ b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/joboptionsFullReco.py @@ -234,6 +234,14 @@ FillAlignTrkInfo = FillAlignTrkInfo ( name = 'FillAlignTrkInfo', ToolSvc += FillAlignTrkInfo print FillAlignTrkInfo +from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool +InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTRT_DriftFunctionTool", + TRTCalDbTool=TRTCalibDBSvc, + IsMC=(globalflags.DataSource == 'geant4')) + +ToolSvc += InDetTRT_DriftFunctionTool +print InDetTRT_DriftFunctionTool + from TRT_CalibTools.TRT_CalibToolsConf import FillAlignTRTHits FillAlignTRTHits = FillAlignTRTHits ( name = 'FillAlignTRTHits', minTimebinsOverThreshold=0, diff --git a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/joboptionsRefitting.py b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/joboptionsRefitting.py index 4de2facdd7d..b6727028a5e 100644 --- a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/joboptionsRefitting.py +++ b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/share/joboptionsRefitting.py @@ -208,7 +208,8 @@ ServiceMgr += TRTCalibDBSvc from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTRT_DriftFunctionTool", - TRTCalDbTool=TRTCalibDBSvc ) + TRTCalDbTool=TRTCalibDBSvc, + IsMC=(globalflags.DataSource == 'geant4')) ToolSvc += InDetTRT_DriftFunctionTool print InDetTRT_DriftFunctionTool diff --git a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py index 58b7eceedce..2b65c65247d 100644 --- a/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py +++ b/InnerDetector/InDetEventCnv/InDetPrepRawDataToxAOD/share/InDetDxAOD.py @@ -341,9 +341,16 @@ if DRAWZSel: ################# if dumpTrtInfo: + + from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool + InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTRT_DriftFunctionTool", + IsMC = isIdTrkDxAODSimulation) + from InDetPrepRawDataToxAOD.InDetPrepRawDataToxAODConf import TRT_PrepDataToxAOD xAOD_TRT_PrepDataToxAOD = TRT_PrepDataToxAOD( name = "xAOD_TRT_PrepDataToxAOD") + ## Content steering Properties (default value shown as comment) + xAOD_TRT_PrepDataToxAOD.TRTDriftFunctionTool = InDetTRT_DriftFunctionTool xAOD_TRT_PrepDataToxAOD.OutputLevel=INFO xAOD_TRT_PrepDataToxAOD.UseTruthInfo = dumpTruthInfo #xAOD_TRT_PrepDataToxAOD.WriteSDOs = True diff --git a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredInDetPreProcessingTRT.py b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredInDetPreProcessingTRT.py index bd2b994de89..48146a3c538 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredInDetPreProcessingTRT.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredInDetPreProcessingTRT.py @@ -40,6 +40,8 @@ class ConfiguredInDetPreProcessingTRT: # # --- TRT_DriftFunctionTool # + + from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = prefix+"DriftFunctionTool", TRTCalDbTool = InDetTRTCalDbSvc) @@ -47,6 +49,13 @@ class ConfiguredInDetPreProcessingTRT: if (not useTimeInfo) or InDetFlags.noTRTTiming(): InDetTRT_DriftFunctionTool.DummyMode = True InDetTRT_DriftFunctionTool.UniversalError = 1.15 + + # --- set Data/MC flag + if(globalflags.DataSource != 'geant4') : + InDetTRT_DriftFunctionTool.IsMC = False + else : + InDetTRT_DriftFunctionTool.IsMC = True + # --- overwrite for calibration of MC if usePhase and jobproperties.Beam.beamType()=='cosmics' and globalflags.DataSource == "geant4": InDetTRT_DriftFunctionTool.AllowDigiVersionOverride = True @@ -154,7 +163,8 @@ class ConfiguredInDetPreProcessingTRT: if InDetFlags.doTRTGlobalOccupancy(): from TRT_ElectronPidTools.TRT_ElectronPidToolsConf import InDet__TRT_LocalOccupancy InDetTRT_LocalOccupancy = InDet__TRT_LocalOccupancy( name = "InDet_TRT_LocalOccupancy", - isTrigger = False + isTrigger = False, + TRTDriftFunctionTool = InDetTRT_DriftFunctionTool ) ToolSvc += InDetTRT_LocalOccupancy diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py index 293e278eb60..d76b4f72ba6 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py @@ -3,6 +3,7 @@ #-------------------------------------------------------------- from AthenaMonitoring.DQMonFlags import DQMonFlags from AthenaCommon.AthenaCommonFlags import athenaCommonFlags +from AthenaCommon.GlobalFlags import globalflags from AthenaCommon.AppMgr import ServiceMgr as svcMgr from AthenaCommon.BeamFlags import jobproperties from AthenaCommon.DetFlags import DetFlags @@ -29,11 +30,16 @@ else: # no track quality cuts for cosmics or single beams #------------------------------------------------------------- # Barrel Monitoring #------------------------------------------------------------- +from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool +InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTRT_DriftFunctionTool", + IsMC = (globalflags.DataSource == 'geant4')) + from TRT_Monitoring.TRT_MonitoringConf import TRT_Monitoring_Tool InDetTRT_Monitoring_Tool = TRT_Monitoring_Tool (name = "TRT_Monitoring_Tool", TRTRawDataObjectName = InDetKeys.TRT_RDOs(), NumberOfEvents = -1, TRTTracksObjectName = InDetKeys.UnslimmedTracks(), + DriftFunctionTool = InDetTRT_DriftFunctionTool, TrkSummaryTool = InDetTrackSummaryTool, Map_Path = "../maps/", # obsolete LE_TimeWindow_MIN = 0, # can be 0,1,or 2 diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py index edf3c492405..3cb69cd9134 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py @@ -404,10 +404,11 @@ if DetFlags.haveRIO.TRT_on(): TRTSlopesFolder = conddb.addFolderSplitOnline ("TRT","/TRT/Onl/Calib/slopes","/TRT/Calib/slopes",className='TRTCond::RtRelationMultChanContainer') if not conddb.folderRequested('/TRT/Calib/ToTCalib'): - conddb.addFolderSplitOnline("TRT","/TRT/Onl/Calib/ToTCalib","/TRT/Calib/ToTCalib") + conddb.addFolderSplitOnline("TRT","/TRT/Onl/Calib/ToTCalib","/TRT/Calib/ToTCalib",className='CondAttrListCollection') if not conddb.folderRequested('/TRT/Calib/HTCalib'): - conddb.addFolderSplitOnline("TRT","/TRT/Onl/Calib/HTCalib","/TRT/Calib/HTCalib") + conddb.addFolderSplitOnline("TRT","/TRT/Onl/Calib/HTCalib","/TRT/Calib/HTCalib",className='CondAttrListCollection') + # Calibration DB Service from TRT_ConditionsServices.TRT_ConditionsServicesConf import TRT_CalDbSvc diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py index 79407bab96e..7b4aab95c85 100755 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py @@ -902,9 +902,19 @@ if InDetFlags.loadSummaryTool(): if DetFlags.haveRIO.TRT_on() and not InDetFlags.doSLHC() and not InDetFlags.doHighPileup() \ and not InDetFlags.useExistingTracksAsInput(): # TRT_RDOs (used byt the TRT_LocalOccupancy tool) are not present in ESD + isMC = False + if globalflags.DataSource == "geant4" : + isMC = True + + from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool + InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool( name = "InDetTRT_DriftFunctionTool", + IsMC = isMC ) + ToolSvc += InDetTRT_DriftFunctionTool + from TRT_ElectronPidTools.TRT_ElectronPidToolsConf import InDet__TRT_LocalOccupancy InDetTRT_LocalOccupancy = InDet__TRT_LocalOccupancy( name ="InDet_TRT_LocalOccupancy", isTrigger = False, + TRTDriftFunctionTool = InDetTRT_DriftFunctionTool ) ToolSvc += InDetTRT_LocalOccupancy if (InDetFlags.doPrintConfigurables()): diff --git a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigCommonTools.py b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigCommonTools.py index de73afab5a8..ef65af23e24 100644 --- a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigCommonTools.py +++ b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigCommonTools.py @@ -11,23 +11,30 @@ ___version___ = "$Id: $" from InDetTrigRecExample.InDetTrigConditionsAccess import TRT_ConditionsSetup from AthenaCommon.AppMgr import ToolSvc +from AthenaCommon.GlobalFlags import globalflags + +# TRT_DriftFunctionTool +isMC = False +if globalflags.DataSource == "geant4" : + isMC = True from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool + InDetTrigTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTrigTRT_DriftFunctionTool", AllowDataMCOverride = True, - ForceData = True ) + ForceData = True, + IsMC = isMC, + TRTCalDbTool = "TRT_CalDbSvc/TRT_CalDbSvc" ) -# +ToolSvc += InDetTrigTRT_DriftFunctionTool + +# TRT_RodDecoder from TRT_RawDataByteStreamCnv.TRT_RawDataByteStreamCnvConf import TRT_RodDecoder -from AthenaCommon.GlobalFlags import globalflags + InDetTrigTRTRodDecoder = TRT_RodDecoder(name = "InDetTrigTRTRodDecoder", LoadCompressTableDB = (globalflags.DataSource() != 'geant4')) ToolSvc += InDetTrigTRTRodDecoder -#InDetTrigTRT_DriftFunctionTool.TRTCalDbTool='TRT_CalDbSvc/'+TRT_ConditionsSetup.instanceName("TRT_CalDbSvc") -InDetTrigTRT_DriftFunctionTool.TRTCalDbTool='TRT_CalDbSvc/TRT_CalDbSvc' -ToolSvc += InDetTrigTRT_DriftFunctionTool - # TRT_DriftCircleTool from TRT_DriftCircleTool.TRT_DriftCircleToolConf import InDet__TRT_DriftCircleTool #these settings offline keeps for MC diff --git a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py index 27271e0e57b..979617ef773 100644 --- a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py +++ b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py @@ -551,11 +551,12 @@ class TRTConditionsServicesSetup: conddb.addFolderSplitOnline ("TRT","/TRT/Onl/Calib/errors","/TRT/Calib/errors",className='TRTCond::RtRelationMultChanContainer') # not needed anymore conddb.addOverride('/TRT/Onl/Calib/errors','TrtCalibErrorsOnl-ErrorVal-00-00') - if not (conddb.folderRequested('/TRT/Calib/ToTCalib') or conddb.folderRequested('/TRT/Onl/Calib/ToTCalib')): - conddb.addFolderSplitOnline("TRT","/TRT/Onl/Calib/ToTCalib","/TRT/Calib/ToTCalib") + if not conddb.folderRequested('/TRT/Calib/ToTCalib'): + conddb.addFolderSplitOnline("TRT","/TRT/Onl/Calib/ToTCalib","/TRT/Calib/ToTCalib",className='CondAttrListCollection') + + if not conddb.folderRequested('/TRT/Calib/HTCalib'): + conddb.addFolderSplitOnline("TRT","/TRT/Onl/Calib/HTCalib","/TRT/Calib/HTCalib",className='CondAttrListCollection') - if not (conddb.folderRequested('/TRT/Calib/HTCalib') or conddb.folderRequested('/TRT/Onl/Calib/HTCalib')): - conddb.addFolderSplitOnline("TRT","/TRT/Onl/Calib/HTCalib","/TRT/Calib/HTCalib") # Calibration DB Service from AthenaCommon.AppMgr import ServiceMgr diff --git a/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/TRT_DriftFunctionTool/ITRT_DriftFunctionTool.h b/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/TRT_DriftFunctionTool/ITRT_DriftFunctionTool.h index 5fa1d42faac..00a8e0f702f 100755 --- a/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/TRT_DriftFunctionTool/ITRT_DriftFunctionTool.h +++ b/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/TRT_DriftFunctionTool/ITRT_DriftFunctionTool.h @@ -37,9 +37,9 @@ class ITRT_DriftFunctionTool : virtual public IAlgTool { virtual double errorOfDriftRadius(double drifttime, Identifier id, float mu = -10, unsigned int word=0) const = 0; - virtual double driftTimeToTCorrection(double tot, Identifier id) const = 0; + virtual double driftTimeToTCorrection(double tot, Identifier id) = 0; - virtual double driftTimeHTCorrection(Identifier id) const = 0; + virtual double driftTimeHTCorrection(Identifier id) = 0; }; diff --git a/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/TRT_DriftFunctionTool/TRT_DriftFunctionTool.h b/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/TRT_DriftFunctionTool/TRT_DriftFunctionTool.h index 3befff3330d..63b14710885 100755 --- a/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/TRT_DriftFunctionTool/TRT_DriftFunctionTool.h +++ b/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/TRT_DriftFunctionTool/TRT_DriftFunctionTool.h @@ -21,11 +21,18 @@ class ITRT_CalDbSvc; class TRT_ID; -class IIncidentSvc; + #include "InDetReadoutGeometry/TRT_DetectorManager.h" -#include "GaudiKernel/IIncidentListener.h" #include "GaudiKernel/ServiceHandle.h" +#include "GaudiKernel/ICondSvc.h" +#include "StoreGate/ReadCondHandleKey.h" +#include "StoreGate/DataHandle.h" +// AttributeList +#include "CoralBase/Attribute.h" +#include "CoralBase/AttributeListSpecification.h" +#include "AthenaPoolUtilities/AthenaAttributeList.h" +#include "AthenaPoolUtilities/CondAttrListCollection.h" /** @class TRT_DriftFunctionTool @@ -34,8 +41,7 @@ class IIncidentSvc; */ class TRT_DriftFunctionTool: public AthAlgTool, - virtual public ITRT_DriftFunctionTool, - virtual public IIncidentListener { + virtual public ITRT_DriftFunctionTool{ public: /** Constructor */ @@ -82,34 +88,34 @@ public: double errorOfDriftRadius(double drifttime, Identifier id, float mu = -10, unsigned int word=0) const; /** Returns time over threshold correction to the drift time (ns) */ - double driftTimeToTCorrection(double tot, Identifier id) const; + double driftTimeToTCorrection(double tot, Identifier id); /** Returns high threshold correction to the drift time (ns) */ - double driftTimeHTCorrection(Identifier id) const; + double driftTimeHTCorrection(Identifier id); /** Initialise Rt relation in data */ void setupRtRelationData(); /** Initialise Rt relation in MC */ void setupRtRelationMC(); - /** handle BeginRun incidents */ - void handle(const Incident& inc); private: - // Update of database entries. - StatusCode update( IOVSVC_CALLBACK_ARGS ); /** Tool to fetch data from database */ ServiceHandle< ITRT_CalDbSvc > m_TRTCalDbSvc; ServiceHandle< ITRT_CalDbSvc > m_TRTCalDbSvc2; - /** Service to report incidents (begin run, begin event) */ - ServiceHandle< IIncidentSvc > m_IncidentSvc; /** DetectorManager and helper */ const InDetDD::TRT_DetectorManager* m_manager; const TRT_ID* m_trtid; + bool m_setupToT; //!< true at first call + bool m_setupHT; //!< true at first call + // ReadHandle keys + SG::ReadCondHandleKey<CondAttrListCollection> m_ToTkey{this,"ToTKeyName","/TRT/Calib/ToTCalib","ToTCalib in-key"}; + SG::ReadCondHandleKey<CondAttrListCollection> m_HTkey{this,"HTKeyName","/TRT/Calib/HTCalib","HTCalib in-key"}; + double m_drifttimeperbin; //!< 3.125ns double m_error; //!< universal error @@ -145,6 +151,7 @@ private: double m_t0_shift; //!< digiversion dependent t0 shift float m_tot_corrections[2][20]; //!< ToT corrections for 20 ToT bins in barrel and endcap double m_ht_corrections[2]; //!< HT corrections for barrel and endcap + mutable std::mutex m_cacheMutex; }; inline bool TRT_DriftFunctionTool::isValidTime(double drifttime) const diff --git a/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/src/TRT_DriftFunctionTool.cxx b/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/src/TRT_DriftFunctionTool.cxx index 102121dd4d5..3f21e776150 100755 --- a/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/src/TRT_DriftFunctionTool.cxx +++ b/InnerDetector/InDetRecTools/TRT_DriftFunctionTool/src/TRT_DriftFunctionTool.cxx @@ -14,19 +14,15 @@ #include "TRT_DriftFunctionTool/TRT_DriftFunctionTool.h" +#include "StoreGate/StoreGateSvc.h" +#include "GaudiKernel/IToolSvc.h" #include "GeoModelInterfaces/IGeoModelSvc.h" #include "GeoModelUtilities/DecodeVersionKey.h" #include "InDetIdentifier/TRT_ID.h" #include "InDetReadoutGeometry/TRT_DetectorManager.h" #include "InDetReadoutGeometry/TRT_Numerology.h" #include "InDetReadoutGeometry/Version.h" - - -#include "GaudiKernel/IIncidentSvc.h" -#include "EventInfo/EventIncident.h" -#include "EventInfo/EventInfo.h" -#include "EventInfo/EventType.h" - +#include "StoreGate/ReadCondHandle.h" #include "TRT_ConditionsServices/ITRT_CalDbSvc.h" #include "CLHEP/Units/SystemOfUnits.h" @@ -41,10 +37,13 @@ TRT_DriftFunctionTool::TRT_DriftFunctionTool(const std::string& type, const std::string& name, const IInterface* parent) - : AthAlgTool(type, name, parent), + : AthAlgTool(type, name, parent), m_TRTCalDbSvc("TRT_CalDbSvc",name), m_TRTCalDbSvc2("",name), - m_IncidentSvc("IncidentSvc",name), + m_setupToT(true), + m_setupHT(true), + m_ToTkey("/TRT/Calib/ToTCalib"), + m_HTkey("/TRT/Calib/HTCalib"), m_drifttimeperbin(3.125 * CLHEP::ns), m_error(0.17), m_drifttimeperhalfbin(0.), // set later @@ -67,9 +66,8 @@ TRT_DriftFunctionTool::TRT_DriftFunctionTool(const std::string& type, { declareInterface<ITRT_DriftFunctionTool>(this); - declareProperty("IncidentService",m_IncidentSvc); m_drifttimeperhalfbin = m_drifttimeperbin/2.; - declareProperty("TRT_Calibration",m_isdata); + declareProperty("IsMC",m_ismc); declareProperty("AllowDigiVersionOverride",m_allow_digi_version_override); declareProperty("ForcedDigiVersion",m_forced_digiversion); declareProperty("AllowDataMCOverride",m_allow_data_mc_override); @@ -165,16 +163,6 @@ StatusCode TRT_DriftFunctionTool::initialize() ATH_MSG_INFO(" Drift time information ignored "); } - //Incident service (to check for MC/data and setup accordingly) - if ( m_IncidentSvc.retrieve().isFailure() ) { - ATH_MSG_FATAL("Failed to retrieve service " << m_IncidentSvc); - return StatusCode::FAILURE; - } else - ATH_MSG_DEBUG("Retrieved service " << m_IncidentSvc); - - // call handle in case of BeginRun - m_IncidentSvc->addListener( this, std::string("BeginRun")); - // Retrieve TRT_DetectorManager and helper sc = AthAlgTool::detStore()->retrieve(m_manager, m_trt_mgr_location); if (sc.isFailure() || !m_manager) @@ -208,21 +196,52 @@ StatusCode TRT_DriftFunctionTool::initialize() DecodeVersionKey versionKey(geomodel,"TRT"); m_key=versionKey.tag(); + ATH_CHECK( m_ToTkey.initialize() ); + ATH_CHECK( m_HTkey.initialize() ); + + int numB = m_manager->getNumerology()->getNBarrelPhi(); + ATH_MSG_DEBUG(" Number of Barrel elements "<< numB); + + if (numB==2) { + m_istestbeam = true; + } else { + m_istestbeam = false; + } - // Register callback function for cache updates - ToT: - const DataHandle<CondAttrListCollection> aptr; - if (StatusCode::SUCCESS == detStore()->regFcn(&TRT_DriftFunctionTool::update,this, aptr, "/TRT/Calib/ToTCalib" )) { - ATH_MSG_INFO ("Registered callback for TRT_DriftFunctionTool - ToT Correction."); + + bool choosedata = false; + bool choosemc = false; + + if(m_ismc) { + ATH_MSG_INFO(" TRT_DriftFunctionTool initialized for simulation"); + choosemc = true; + m_isdata=false; } else { - ATH_MSG_ERROR ("Callback registration failed for TRT_DriftFunctionTool - ToT! Using default correction values."); + ATH_MSG_INFO(" TRT_DriftFunctionTool initialized for data"); + choosedata = true; + m_isdata=true; + } + + if(m_allow_data_mc_override) { + choosedata = false; + choosemc = false; + if (m_forcedata) { + ATH_MSG_INFO(" Constants will be read from conddb "); + choosedata=true; + } else { + ATH_MSG_INFO(" Constants will be read from code "); + choosemc=true; + } } - // Register callback function for cache updates - HT: - const DataHandle<CondAttrListCollection> aptrHT; - if (StatusCode::SUCCESS == detStore()->regFcn(&TRT_DriftFunctionTool::update,this, aptrHT, "/TRT/Calib/HTCalib" )) { - ATH_MSG_INFO ("Registered callback for TRT_DriftFunctionTool - HT Correction."); + if(choosemc&&choosedata) ATH_MSG_FATAL("Trying to init MC and data setup both!"); + if(!choosemc&&!choosedata) ATH_MSG_FATAL("Neither MC nor data setup selected!"); + if(choosemc) { + m_isdata=false; + setupRtRelationMC(); } else { - ATH_MSG_ERROR ("Callback registration failed for TRT_DriftFunctionTool - HT! Using default correction values."); + m_isdata=true; + setupRtRelationData(); } return sc; @@ -236,78 +255,6 @@ StatusCode TRT_DriftFunctionTool::finalize() return sc; } -// -// handle BeginRun incidents------------------------------------------------ -void TRT_DriftFunctionTool::handle(const Incident& inc) -{ - - //Find out what type of run - if (inc.type() == "BeginRun") - { - const EventInfo* pevt = 0; // pointer for the event - StatusCode status = evtStore()->retrieve(pevt); // retrieve the pointer to the event - if(!status.isSuccess() || pevt==0) { - ATH_MSG_FATAL("Couldn't get EventInfo object from StoreGate"); - return; - } - - int numB = m_manager->getNumerology()->getNBarrelPhi(); - ATH_MSG_DEBUG(" Number of Barrel elements "<< numB); - - if (numB==2) { - m_istestbeam = true; - } else { - m_istestbeam = false; - } - - if(pevt->event_type()->test(EventType::IS_CALIBRATION)) - { - ATH_MSG_DEBUG("Run reports itself as calibration"); - } else { - ATH_MSG_DEBUG("Run reports itself as physics"); - } - - bool choosedata = false; - bool choosemc = false; - - if(pevt->event_type()->test(EventType::IS_SIMULATION)) - { - ATH_MSG_DEBUG("Run reports itself as simulation"); - choosemc = true; - m_ismc=true; - } else { - ATH_MSG_DEBUG("Run reports itself as data"); - choosedata = true; - m_ismc=false; - } - - if(m_allow_data_mc_override) - { - choosedata = false; - choosemc = false; - if (m_forcedata) - { - ATH_MSG_INFO(" Constants will be read from conddb "); - choosedata=true; - } else { - ATH_MSG_INFO(" Constants will be read from code "); - choosemc=true; - } - } - - if(choosemc&&choosedata) ATH_MSG_FATAL("Trying to init MC and data setup both!"); - if(!choosemc&&!choosedata) ATH_MSG_FATAL("Neither MC nor data setup selected!"); - if(choosemc) - { - m_isdata=false; - setupRtRelationMC(); - } else { - m_isdata=true; - setupRtRelationData(); - } - } - return; -} // Drift time in ns for any non negative drift radius; Not calibrated for // individual straws and run range, but otherwise adapted to any // setup. @@ -479,9 +426,37 @@ double TRT_DriftFunctionTool::errorOfDriftRadius(double drifttime, Identifier id // // returns the time over threshold correction in ns -double TRT_DriftFunctionTool::driftTimeToTCorrection(double tot, Identifier id) const +double TRT_DriftFunctionTool::driftTimeToTCorrection(double tot, Identifier id) { + if(m_setupToT) { + std::lock_guard<std::mutex> lock(m_cacheMutex); + const CondAttrListCollection* atrlistcol; + SG::ReadCondHandle<CondAttrListCollection> rch(m_ToTkey); + atrlistcol=*rch; + if(!atrlistcol) ATH_MSG_ERROR ("Problem reading condDB ToT correction constants."); + int channel; + std::ostringstream var_name; + for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); + citr!=atrlistcol->end();++citr) { + + //get Barrel (1) or Endcap (2) + channel = citr->first; + + if ((channel == 1) || (channel == 2)) { + const coral::AttributeList& atrlist = citr->second; + + for (int i = 0; i < 20; ++i ) { + var_name << "TRT_ToT_" << std::dec << i; + m_tot_corrections[channel-1][i] = atrlist[var_name.str()].data<float>(); + var_name.str(""); + } + } + } + m_setupToT=false; + } + + int tot_index = tot/3.125; if (tot_index < 0) tot_index = 0; if (tot_index > 19) tot_index = 19; @@ -492,9 +467,34 @@ double TRT_DriftFunctionTool::driftTimeToTCorrection(double tot, Identifier id) } // Returns high threshold correction to the drift time (ns) -double TRT_DriftFunctionTool::driftTimeHTCorrection(Identifier id) const +double TRT_DriftFunctionTool::driftTimeHTCorrection(Identifier id) { + if(m_setupHT) { + std::lock_guard<std::mutex> lock(m_cacheMutex); + const CondAttrListCollection* atrlistcol; + SG::ReadCondHandle<CondAttrListCollection> rch(m_HTkey); + atrlistcol=*rch; + if(!atrlistcol) ATH_MSG_ERROR ("Problem reading condDB HT correction constants."); + int channel; + std::ostringstream var_name; + for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); + citr!=atrlistcol->end();++citr) { + + channel = citr->first; + if (channel == 1) { + const coral::AttributeList& atrlist = citr->second; + + for (int i = 0; i < 2; ++i ) { + var_name << "TRT_HT_" << std::dec << i; + m_ht_corrections[i] = atrlist[var_name.str()].data<float>(); + var_name.str(""); + } + } + } + m_setupHT=false; + } + int bec_index = abs(m_trtid->barrel_ec(id)) - 1; return m_ht_corrections[bec_index]; @@ -900,89 +900,3 @@ void TRT_DriftFunctionTool::setupRtRelationMC() } } - -/* ----------------------------------------------------------------------------------- */ -// Callback function to update constants from database: -/* ----------------------------------------------------------------------------------- */ -StatusCode TRT_DriftFunctionTool::update( IOVSVC_CALLBACK_ARGS_P(I,keys) ) { - - ATH_MSG_INFO ("Updating constants for the TRT_DriftFunctionTool! "); - - // Callback function to update Drift Time Correction parameters when condDB data changes: - for(std::list<std::string>::const_iterator key=keys.begin(); key != keys.end(); ++key) - ATH_MSG_DEBUG("IOVCALLBACK for key " << *key << " number " << I); - - StatusCode status = StatusCode::SUCCESS; - - for(std::list<std::string>::const_iterator key=keys.begin(); key != keys.end(); ++key) { - - const CondAttrListCollection* atrlistcol; - - if (*key == "/TRT/Calib/ToTCalib") { - ATH_MSG_INFO ("Updating ToT constants for the TRT_DriftFunctionTool! "); - - // Read the ToT Correction parameters: - // ----------------------------------------------------------------------------------- // - if (StatusCode::SUCCESS == detStore()->retrieve(atrlistcol, "/TRT/Calib/ToTCalib" ) && atrlistcol != 0) { - - int channel; - std::ostringstream var_name; - for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); - citr!=atrlistcol->end();++citr) { - - //get Barrel (1) or Endcap (2) - channel = citr->first; - - if ((channel == 1) || (channel == 2)) { - const coral::AttributeList& atrlist = citr->second; - - for (int i = 0; i < 20; ++i ) { - var_name << "TRT_ToT_" << std::dec << i; - m_tot_corrections[channel-1][i] = atrlist[var_name.str()].data<float>(); - var_name.str(""); - } - } - } - - } else { - ATH_MSG_ERROR ("Problem reading condDB object for ToT correction constants."); - status = StatusCode::FAILURE; - } - } - - - if (*key == "/TRT/Calib/HTCalib") { - ATH_MSG_INFO ("Updating HT constants for the TRT_DriftFunctionTool! "); - - // Read the HT Correction parameters: - // ----------------------------------------------------------------------------------- // - if (StatusCode::SUCCESS == detStore()->retrieve(atrlistcol, "/TRT/Calib/HTCalib" ) && atrlistcol != 0) { - - int channel; - std::ostringstream var_name; - for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); - citr!=atrlistcol->end();++citr) { - - channel = citr->first; - - if (channel == 1) { - const coral::AttributeList& atrlist = citr->second; - - for (int i = 0; i < 2; ++i ) { - var_name << "TRT_HT_" << std::dec << i; - m_ht_corrections[i] = atrlist[var_name.str()].data<float>(); - var_name.str(""); - } - } - } - - } else { - ATH_MSG_ERROR ("Problem reading condDB object for HT correction constants."); - status = StatusCode::FAILURE; - } - } - - } - - return status; -} diff --git a/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilder.py b/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilder.py index c673273bbcb..36cbb889099 100644 --- a/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilder.py +++ b/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilder.py @@ -86,9 +86,19 @@ class egammaBremCollectionBuilder ( egammaAlgsConf.EMBremCollectionBuilder ) : # GSFBuildTRT_ElectronPidTool = None if DetFlags.haveRIO.TRT_on() and not InDetFlags.doSLHC() and not InDetFlags.doHighPileup() : + + isMC = False + if globalflags.DataSource == "geant4" : + isMC = True + from TRT_DriftFunctionTool.TRT_DriftFunctionToolConf import TRT_DriftFunctionTool + InDetTRT_DriftFunctionTool = TRT_DriftFunctionTool(name = "InDetTRT_DriftFunctionTool", + IsMC = isMC) + ToolSvc += InDetTRT_DriftFunctionTool + from TRT_ElectronPidTools.TRT_ElectronPidToolsConf import InDet__TRT_LocalOccupancy - GSFBuildTRT_LocalOccupancy = InDet__TRT_LocalOccupancy(name ="GSF_TRT_LocalOccupancy") + GSFBuildTRT_LocalOccupancy = InDet__TRT_LocalOccupancy(name ="GSF_TRT_LocalOccupancy", + TRTDriftFunctionTool = InDetTRT_DriftFunctionTool) ToolSvc += GSFBuildTRT_LocalOccupancy from TRT_ElectronPidTools.TRT_ElectronPidToolsConf import InDet__TRT_ElectronPidToolRun2 -- GitLab