diff --git a/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/NSWCalibTools/INSWCalibTool.h b/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/NSWCalibTools/INSWCalibTool.h index e4bec41e8632c6af32b0c1e9a3cfe101a2aa78c3..c1248b88044395536372acf5877942da95c20046 100644 --- a/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/NSWCalibTools/INSWCalibTool.h +++ b/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/NSWCalibTools/INSWCalibTool.h @@ -30,11 +30,12 @@ namespace NSWCalib { }; } - + namespace Muon { class MM_RawData; class MMPrepData; + class STGC_RawData; class INSWCalibTool : virtual public IAlgTool { @@ -44,9 +45,10 @@ namespace Muon { public: // interface methods - virtual StatusCode calibrateClus(const Muon::MMPrepData* prepData, const Amg::Vector3D& globalPos, std::vector<NSWCalib::CalibratedStrip>& calibClus) const = 0; + virtual StatusCode calibrateClus(const Muon::MMPrepData* prepRawData, const Amg::Vector3D& globalPos, std::vector<NSWCalib::CalibratedStrip>& calibClus) const = 0; virtual StatusCode calibrateStrip(const Muon::MM_RawData* mmRawData, NSWCalib::CalibratedStrip& calibStrip) const = 0; virtual StatusCode calibrateStrip(const double time, const double charge, const double lorentzAngle, NSWCalib::CalibratedStrip&calibStrip) const = 0; + virtual StatusCode calibrateStrip(const Muon::STGC_RawData* sTGCRawData, NSWCalib::CalibratedStrip& calibStrip) const = 0; virtual StatusCode mmGasProperties(float &vDrift, float &longDiff, float &transDiff, float &interactionDensityMean, float &interactionDensitySigma, TF1* &lorentzAngleFunction) const = 0; }; diff --git a/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/src/NSWCalibTool.cxx b/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/src/NSWCalibTool.cxx index 5f59708b5579c0b6afcc25dcced22dd265c7f5df..85e0ad17ca7bed15ccd2eed0a869501f06d19087 100644 --- a/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/src/NSWCalibTool.cxx +++ b/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/src/NSWCalibTool.cxx @@ -6,6 +6,7 @@ #include "GaudiKernel/SystemOfUnits.h" #include "GaudiKernel/PhysicalConstants.h" #include "MuonReadoutGeometry/MMReadoutElement.h" +#include "MuonReadoutGeometry/sTgcReadoutElement.h" namespace { static constexpr double const& toRad = M_PI/180; @@ -138,6 +139,8 @@ StatusCode Muon::NSWCalibTool::calibrateClus(const Muon::MMPrepData* prepData, c return StatusCode::SUCCESS; } + + StatusCode Muon::NSWCalibTool::calibrateStrip(const double time, const double charge, const double lorentzAngle, NSWCalib::CalibratedStrip& calibStrip) const { calibStrip.charge = charge; calibStrip.time = time; @@ -153,6 +156,7 @@ StatusCode Muon::NSWCalibTool::calibrateStrip(const double time, const double ch return StatusCode::SUCCESS; } + StatusCode Muon::NSWCalibTool::calibrateStrip(const Muon::MM_RawData* mmRawData, NSWCalib::CalibratedStrip& calibStrip) const { Identifier rdoId = mmRawData->identify(); @@ -178,6 +182,28 @@ StatusCode Muon::NSWCalibTool::calibrateStrip(const Muon::MM_RawData* mmRawData, return StatusCode::SUCCESS; } +StatusCode Muon::NSWCalibTool::calibrateStrip(const Muon::STGC_RawData* sTGCRawData, NSWCalib::CalibratedStrip& calibStrip) const +{ + Identifier rdoId = sTGCRawData->identify(); + + // MuonDetectorManager from the conditions store + SG::ReadCondHandle<MuonGM::MuonDetectorManager> muDetMgrHandle{m_muDetMgrKey}; + const MuonGM::MuonDetectorManager* muDetMgr = muDetMgrHandle.cptr(); + + //get globalPos + Amg::Vector3D globalPos; + const MuonGM::sTgcReadoutElement* detEl = muDetMgr->getsTgcReadoutElement(rdoId); + detEl->stripGlobalPosition(rdoId,globalPos); + + calibStrip.charge =sTGCRawData->charge(); + calibStrip.time = sTGCRawData->time() - globalPos.norm() * reciprocalSpeedOfLight + m_timeOffset; + calibStrip.identifier = sTGCRawData->identify(); + + return StatusCode::SUCCESS; +} + + + double Muon::NSWCalibTool::pdoToCharge(const int pdoCounts, const Identifier& stripID) const { double charge = 0; if (m_idHelperSvc->isMM(stripID)){ diff --git a/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/src/NSWCalibTool.h b/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/src/NSWCalibTool.h index 9ec27924373a450fe76743a5f73258eeee98f235..981f6bf2caa0e8adbb94dc527a6394f80ce1b0e9 100644 --- a/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/src/NSWCalibTool.h +++ b/MuonSpectrometer/MuonCalib/NSWCalib/NSWCalibTools/src/NSWCalibTool.h @@ -4,23 +4,24 @@ #ifndef NSWCalibTool_h #define NSWCalibTool_h -#include <map> -#include <string> - #include "NSWCalibTools/INSWCalibTool.h" - #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ServiceHandle.h" #include "MuonIdHelpers/IMuonIdHelperSvc.h" #include "MuonPrepRawData/MMPrepData.h" #include "MuonRDO/MM_RawData.h" +#include "MuonRDO/STGC_RawData.h" #include "StoreGate/ReadCondHandleKey.h" #include "MuonReadoutGeometry/MuonDetectorManager.h" #include "MagFieldConditions/AtlasFieldCacheCondObj.h" #include "TRandom3.h" #include "TTree.h" +#include "TF1.h" + +#include <string> +#include <vector> namespace Muon { @@ -33,8 +34,9 @@ namespace Muon { virtual ~NSWCalibTool() = default; virtual StatusCode calibrateClus(const Muon::MMPrepData* prepData, const Amg::Vector3D& globalPos, std::vector<NSWCalib::CalibratedStrip>& calibClus) const override; - virtual StatusCode calibrateStrip(const double time, const double charge, const double lorentzAngle, NSWCalib::CalibratedStrip& calibStrip) const override; + virtual StatusCode calibrateStrip(const double time, const double charge, const double lorentzAngle, NSWCalib::CalibratedStrip& calibStrip) const override; virtual StatusCode calibrateStrip(const Muon::MM_RawData* mmRawData, NSWCalib::CalibratedStrip& calibStrip) const override; + virtual StatusCode calibrateStrip(const Muon::STGC_RawData* sTGCRawData, NSWCalib::CalibratedStrip& calibStrip) const override; double pdoToCharge(const int pdoCounts, const Identifier& stripID) const; int chargeToPdo(const float charge, const Identifier& stripID) const; @@ -43,6 +45,7 @@ namespace Muon { virtual StatusCode finalize() override; StatusCode mmGasProperties(float &vDrift, float &longDiff, float &transDiff, float &interactionDensityMean, float &interactionDensitySigma, TF1* &lorentzAngleFunction) const override; + private: ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h index f1dfc00daa68171bcfe03787e5dfe0a8757308c1..df6421468c77ed97dd52faa1fdde3608008de9ea 100644 --- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h +++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h @@ -2,19 +2,13 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -/*************************************************************************** - sTgc Readout Element properties - ----------------------------------------- -***************************************************************************/ - #ifndef MUONGEOMODEL_STGCREADOUTELEMENT_H -# define MUONGEOMODEL_STGCREADOUTELEMENT_H +#define MUONGEOMODEL_STGCREADOUTELEMENT_H #include "MuonReadoutGeometry/MuonClusterReadoutElement.h" #include "MuonReadoutGeometry/MuonDetectorManager.h" #include "MuonReadoutGeometry/MuonChannelDesign.h" #include "MuonReadoutGeometry/MuonPadDesign.h" - #include "MuonIdHelpers/sTgcIdHelper.h" class BLinePar; @@ -23,7 +17,6 @@ namespace Trk{ class PlaneSurface; } - namespace MuonGM { /** An sTgcReadoutElement corresponds to a single STGC module; therefore