diff --git a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx index 50f2436bf5ab2b4af25fcf9b98e6c0057c4cefae..5ff518fb39e72a34955933438a83578b67f63461 100644 --- a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx +++ b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.cxx @@ -16,13 +16,13 @@ MuonCacheCreator::MuonCacheCreator(const std::string &name,ISvcLocator *pSvcLoca m_MdtCsmCacheKey(""), m_CscCacheKey(""), m_RpcCacheKey(""), - m_TgcCacheKey("") + m_TgcCacheKey(""), + m_disableWarningCheck(false) { declareProperty("MdtCsmCacheKey", m_MdtCsmCacheKey); declareProperty("CscCacheKey", m_CscCacheKey); declareProperty("RpcCacheKey", m_RpcCacheKey); declareProperty("TgcCacheKey", m_TgcCacheKey); - declareProperty("DisableViewWarning", m_disableWarning); } MuonCacheCreator::~MuonCacheCreator() { @@ -47,12 +47,12 @@ bool MuonCacheCreator::isInsideView(const EventContext& context) const StatusCode MuonCacheCreator::execute (const EventContext& ctx) const { - if(!m_disableWarning){ + if(!m_disableWarningCheck and !m_disableWarning.value()){ if(isInsideView(ctx)){ ATH_MSG_ERROR("CacheCreator is running inside a view, this is probably a misconfiguration"); return StatusCode::FAILURE; } - m_disableWarning = true; //only check once + m_disableWarningCheck = true; //only check once } // Create the MDT cache container auto maxHashMDTs = m_muonIdHelperTool->mdtIdHelper().stationNameIndex("BME") != -1 ? m_muonIdHelperTool->mdtIdHelper().detectorElement_hash_max() : m_muonIdHelperTool->mdtIdHelper().module_hash_max(); diff --git a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.h b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.h index 9f653f7e61e332926231c51634b71b919e696953..99be4d3e2131631f6bab62e00858d4c7ea36890f 100644 --- a/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.h +++ b/MuonSpectrometer/MuonCnv/MuonByteStream/src/MuonCacheCreator.h @@ -13,6 +13,7 @@ #include "MuonIdHelpers/MuonIdHelperTool.h" +#include <atomic> class MuonCacheCreator : public AthReentrantAlgorithm { public: @@ -40,8 +41,9 @@ protected: SG::WriteHandleKey<TgcRdo_Cache> m_TgcCacheKey; /// ID helpers ToolHandle<Muon::MuonIdHelperTool> m_muonIdHelperTool{this, "idHelper", - "Muon::MuonIdHelperTool/MuonIdHelperTool", "Handle to the MuonIdHelperTool"}; - mutable bool m_disableWarning = false; + "Muon::MuonIdHelperTool/MuonIdHelperTool", "Handle to the MuonIdHelperTool"}; + BooleanProperty m_disableWarning{this,"DisableViewWarning",false}; + mutable std::atomic_bool m_disableWarningCheck; bool isInsideView(const EventContext&) const; };//class MuonCacheCreator diff --git a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.cxx b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.cxx index b0ec52627aa3aced72bd84ae3f0a03b7ea4b5b3b..06d5acf038ee8943acc6e268e6c83214ea9fcc2b 100644 --- a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.cxx +++ b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.cxx @@ -58,6 +58,7 @@ void Muon::CscRDO_Decoder::getDigit(const CscRawData * rawData, Identifier& moduleId, Identifier& channelId, double& adc, double& time) const { + std::lock_guard<std::mutex> lockGuard(m_mutex); // get the raw data uint32_t address = rawData->address(); @@ -75,8 +76,9 @@ void Muon::CscRDO_Decoder::getDigit(const CscRawData * rawData, -Identifier Muon::CscRDO_Decoder::stationIdentifier(const CscRawData * rawData) const +Identifier Muon::CscRDO_Decoder::stationIdentifier(const CscRawData * rawData) const { + std::lock_guard<std::mutex> lockGuard(m_mutex); /** get the raw data */ uint32_t address = rawData->address(); @@ -88,8 +90,9 @@ Identifier Muon::CscRDO_Decoder::stationIdentifier(const CscRawData * rawData) c return m_rodReadOut.decodeAddress(); } -Identifier Muon::CscRDO_Decoder::channelIdentifier(const CscRawData * rawData, int j) const +Identifier Muon::CscRDO_Decoder::channelIdentifier(const CscRawData * rawData, int j) const { + std::lock_guard<std::mutex> lockGuard(m_mutex); /** get the raw data */ uint32_t address = rawData->address(); diff --git a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.h b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.h index 73ccd988d094ba7b96b12afa165d3aa220e13085..e2ecf3ec9417ffd56a74c492f04ffabc05b96b61 100644 --- a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.h +++ b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRDO_Decoder.h @@ -21,6 +21,8 @@ #include <inttypes.h> #include <vector> #include <string> +#include <mutex> + #include "CscRODReadOut.h" class Identifier; @@ -62,8 +64,8 @@ namespace Muon { double m_samplingTime ; double m_signalWidth ; // the read out structure - mutable CscRODReadOut m_rodReadOut; - + mutable CscRODReadOut m_rodReadOut ATLAS_THREAD_SAFE; // guarded by m_mutex + mutable std::mutex m_mutex; }; } diff --git a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRODReadOut.h b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRODReadOut.h index c3611f427a01d492687f7c9a7059453c4bd8c384..543ed0ef69f23a9e6577bfced38a8dfdd5b8eccd 100644 --- a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRODReadOut.h +++ b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRODReadOut.h @@ -12,6 +12,7 @@ #include <vector> #include <cmath> #include <string> +#include <atomic> // TGC ROD encoder/decoder for CscRDO // Author Ketevi A. Assamagan @@ -110,14 +111,14 @@ private: uint16_t m_amp2; uint32_t m_address; uint32_t m_chamberBitValue; - double m_norm; - - double m_TIME_OFFSET; - double m_SIGNAL_WIDTH; - double m_SAMPLING_TIME; - int m_NUMBER_OF_INTEGRATION; - double m_CHARGE_TO_ADC_COUNT; - double m_Z0; + double m_norm; + + double m_TIME_OFFSET; + double m_SIGNAL_WIDTH; + double m_SAMPLING_TIME; + int m_NUMBER_OF_INTEGRATION; + double m_CHARGE_TO_ADC_COUNT; + double m_Z0; uint32_t m_TRIGGER_INFO[3]; diff --git a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRdoToCscPrepDataTool.cxx b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRdoToCscPrepDataTool.cxx index c7a6111777040798da62b1b96c30425d26b916ec..68838c6ab391e39523dcc3e43d6fe921b17b3327 100644 --- a/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRdoToCscPrepDataTool.cxx +++ b/MuonSpectrometer/MuonCnv/MuonCSC_CnvTools/src/CscRdoToCscPrepDataTool.cxx @@ -280,7 +280,6 @@ StatusCode CscRdoToCscPrepDataTool::decode(const CscRawDataContainer* rdoContain //Hack for transition to athenaMT classes CscStripPrepDataCollection * oldCollection = const_cast<CscStripPrepDataCollection*>( *it_coll ); - collection = oldCollection; cscHashId = collection->identifyHash(); } diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p2.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p2.h index 37cfe33e5216ef787472a9e339aa88c5b384007c..28a5ba7e05f8894398058e172e36948eb4266203 100755 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p2.h +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p2.h @@ -27,7 +27,7 @@ class TgcCoinDataCnv_p2 { public: // TgcCoinDataCnv_p2() : m_coindataCnv(0) {} - TgcCoinDataCnv_p2() : m_localPosCnv(0), m_errorMxCnv(0) {} + TgcCoinDataCnv_p2() : m_localPosCnv(0), m_errorMxCnv(0), m_numErrsPrinted(0) {} void persToTrans( const Muon::TgcCoinData_p2 *persObj, Muon::TgcCoinData *transObj, @@ -39,7 +39,7 @@ public: protected: LocalPositionCnv_p1 *m_localPosCnv; ErrorMatrixCnv_p1 *m_errorMxCnv; - + unsigned int m_numErrsPrinted; }; #endif diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p3.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p3.h index fb0fe84f039a02fe2fb7fd3883c12913b2c1d6d3..e73f06ccca82d840fd4bf84bb20864f0d17165f6 100755 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p3.h +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonTrigCoinData/TgcCoinDataCnv_p3.h @@ -26,7 +26,7 @@ class TgcCoinDataCnv_p3 { public: // TgcCoinDataCnv_p3() : m_coindataCnv(0) {} - TgcCoinDataCnv_p3() : m_localPosCnv(0), m_errorMxCnv(0) {} + TgcCoinDataCnv_p3() : m_localPosCnv(0), m_errorMxCnv(0), m_numErrsPrinted(0) {} void persToTrans( const Muon::TgcCoinData_p3 *persObj, Muon::TgcCoinData *transObj, @@ -38,7 +38,7 @@ public: protected: LocalPositionCnv_p1 *m_localPosCnv; ErrorMatrixCnv_p1 *m_errorMxCnv; - + unsigned int m_numErrsPrinted; }; #endif diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p2.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p2.cxx index 09c213de1cc35af2d9aa36465b551b2d5e98d2f3..b61c59755e34efa458bb4ac677796ecc45c46c24 100755 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p2.cxx +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p2.cxx @@ -124,9 +124,8 @@ transToPers( const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p2 *persObj, M if (transObj->hasErrMat() ) { if (! transObj->errMat().cols() || !transObj->errMat().rows()) { - static unsigned int numErrsPrinted=0; - if (numErrsPrinted<10) { - numErrsPrinted++; + if (m_numErrsPrinted<10) { + m_numErrsPrinted++; log << MSG::WARNING << "Have been given a TgcCoinData error matrix with size = [" <<transObj->errMat().rows()<<","<<transObj->errMat().cols()<<"]. Skipping writing of the matrix."<<endmsg; } diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p3.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p3.cxx index d7b1e153a971019e8bfd6d7a8d971875465ad497..fcfc10a101a36f80766ee70fe949c9359316311c 100755 --- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p3.cxx +++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonTrigCoinData/TgcCoinDataCnv_p3.cxx @@ -123,9 +123,8 @@ transToPers( const Muon::TgcCoinData *transObj, Muon::TgcCoinData_p3 *persObj, M if (transObj->hasErrMat() ) { if (! transObj->errMat().cols() || !transObj->errMat().rows()) { - static unsigned int numErrsPrinted=0; - if (numErrsPrinted<10) { - numErrsPrinted++; + if (m_numErrsPrinted<10) { + m_numErrsPrinted++; log << MSG::WARNING << "Have been given a TgcCoinData error matrix with size = [" <<transObj->errMat().rows()<<","<<transObj->errMat().cols()<<"]. Skipping writing of the matrix."<<endmsg; }