diff --git a/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/CMakeLists.txt b/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/CMakeLists.txt index b785f0cdca0a83e4820b16a7842b82ec255555cc..84db5bd6776e7eee2f49f4a8571e1457480f8a20 100644 --- a/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/CMakeLists.txt +++ b/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/CMakeLists.txt @@ -10,6 +10,7 @@ atlas_depends_on_subdirs( PUBLIC GaudiKernel PRIVATE Control/AthenaBaseComps + Control/CxxUtils Control/StoreGate Event/EventInfo MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData @@ -23,7 +24,7 @@ atlas_add_component( CscCalibTools src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} GaudiKernel AthenaBaseComps StoreGateLib SGtests EventInfo MuonCondData MuonCondInterface ) + LINK_LIBRARIES ${ROOT_LIBRARIES} GaudiKernel AthenaBaseComps CxxUtils StoreGateLib SGtests EventInfo MuonCondData MuonCondInterface ) # Install files from the package: atlas_install_headers( CscCalibTools ) diff --git a/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/src/CscCalibTool.cxx b/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/src/CscCalibTool.cxx index 9caf26b6e67dd82e6c75079d31a997290b27e573..4c06aedf2eae47297ee3e3373aaec40829192b93 100644 --- a/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/src/CscCalibTool.cxx +++ b/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/src/CscCalibTool.cxx @@ -101,13 +101,13 @@ StatusCode CscCalibTool::initialize() { return StatusCode::FAILURE; } + m_messageCnt_t0base=0; + m_messageCnt_t0phase=0; + std::lock_guard<std::mutex> lock(m_mutex); m_addedfunc =new TF1("addedfunc", dualbipfunc, 0,500,10); m_bipolarFunc =new TF1("bipolarFunc", bipfunc, -500,500,5); - m_messageCnt_t0base=0; - m_messageCnt_t0phase=0; - return StatusCode::SUCCESS; } @@ -635,7 +635,8 @@ std::vector<float> CscCalibTool::getSamplesFromBipolarFunc(const double driftTim result.push_back(0.0); return result; } - + + std::lock_guard<std::mutex> lock(m_mutex); m_bipolarFunc->SetParameters(stripCharge0, driftTime0, m_integrationNumber,m_integrationNumber2,m_signalWidth); @@ -670,16 +671,16 @@ std::pair<double,double> CscCalibTool::addBipfunc(const double driftTime0, return result; } + std::lock_guard<std::mutex> lock(m_mutex); m_addedfunc->SetParameters(stripCharge0, driftTime0, - m_integrationNumber,m_integrationNumber2,m_signalWidth, - stripCharge1, driftTime1, - m_integrationNumber,m_integrationNumber2,m_signalWidth); + m_integrationNumber,m_integrationNumber2,m_signalWidth, + stripCharge1, driftTime1, + m_integrationNumber,m_integrationNumber2,m_signalWidth); result.second =m_addedfunc->GetMaximum(); // ==>stripCharges of added bipolars float tmax =m_addedfunc->GetX(result.second); result.first = tmax - getZ0()*m_signalWidth; - if (stripCharge0>0.0 && stripCharge1>0.0) - return result; + if (stripCharge0>0.0 && stripCharge1>0.0) return result; float bipmin = m_addedfunc->GetMinimum(); // ==>stripCharges of added bipolars float tmin = m_addedfunc->GetX(bipmin); @@ -687,8 +688,6 @@ std::pair<double,double> CscCalibTool::addBipfunc(const double driftTime0, result.first = tmin-getZ0()*m_signalWidth; result.second = bipmin; } - - // To check out conversion is correct... ATH_MSG_VERBOSE ( "(" << driftTime0 << ":" << int(stripCharge0) << ")" diff --git a/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/src/CscCalibTool.h b/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/src/CscCalibTool.h index 11ef86a45d4f927f5697150d1ce51fb2da67546f..2807228c164f99b45f8b12989c7f31774a06178d 100644 --- a/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/src/CscCalibTool.h +++ b/MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools/src/CscCalibTool.h @@ -22,14 +22,16 @@ #include "MuonCondData/CscCondDataContainer.h" #include "MuonCondInterface/CscICoolStrSvc.h" #include "CscCalibTools/ICscCalibTool.h" +#include "CxxUtils/checker_macros.h" -#include <atomic> -#include <inttypes.h> -#include <vector> #include "TMath.h" #include "TF1.h" #include "TH1.h" +#include <atomic> +#include <inttypes.h> +#include <mutex> +#include <vector> class CscCalibTool : public extends<AthAlgTool, ICscCalibTool> { @@ -167,8 +169,9 @@ protected: float m_latencyInDigitization; // new in 12/2010 for New Digitization package... unsigned int m_nSamples; - mutable TF1* m_addedfunc; - mutable TF1* m_bipolarFunc; + mutable TF1* m_addedfunc ATLAS_THREAD_SAFE; // Guarded by m_mutex + mutable TF1* m_bipolarFunc ATLAS_THREAD_SAFE; // Guarded by m_mutex + mutable std::mutex m_mutex; bool m_onlineHLT; bool m_use2Samples; // for the use of only 2 samples for strip charge