diff --git a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.cxx b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.cxx index 528a009f9bbc34d63b40f5f765088333782c4cc9..bd74b00740b9e9b786790011ba5e06eadfc77b45 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ #include <cmath> @@ -10,11 +10,7 @@ #include "MuonPrepRawData/CscClusterStatus.h" #include "MuonPrepRawData/CscPrepData.h" #include "MuonPrepRawData/CscStripPrepDataCollection.h" -#include "MuonPrepRawData/RpcPrepData.h" -#include "MuonPrepRawData/TgcPrepData.h" #include "MuonRIO_OnTrack/CscClusterOnTrack.h" -#include "MuonRIO_OnTrack/RpcClusterOnTrack.h" -#include "MuonRIO_OnTrack/TgcClusterOnTrack.h" #include "TrkEventPrimitives/LocalDirection.h" #include "TrkEventPrimitives/LocalParameters.h" #include "TrkRIO_OnTrack/ErrorScalingCast.h" @@ -29,75 +25,33 @@ using Muon::CscStripPrepDataContainer; namespace Muon { CscClusterOnTrackCreator::CscClusterOnTrackCreator(const std::string& ty, const std::string& na, const IInterface* pa) : - AthAlgTool(ty, na, pa), m_have_csc_tools(false) { + AthAlgTool(ty, na, pa) { // algtool interface - necessary! declareInterface<IMuonClusterOnTrackCreator>(this); declareInterface<IRIO_OnTrackCreator>(this); - - // --- some job options here. - declareProperty("doCSC", m_doCsc = true); - declareProperty("doRPC", m_doRpc = true); - declareProperty("doTGC", m_doTgc = true); - declareProperty("FixedError", m_fixedError = 5.); - declareProperty("ErrorScaler", m_errorScaler = 1.); - declareProperty("ErrorScalerBeta", m_errorScalerBeta = 0.); - declareProperty("CscStripPrepDataLocation", m_cscStripLocation = "CSC_Measurements"); - declareProperty("MinimumError", m_minimumError = 0.05); } CscClusterOnTrackCreator::~CscClusterOnTrackCreator() = default; ///////////////////////////////// StatusCode CscClusterOnTrackCreator::initialize() { - if (AthAlgTool::initialize().isFailure()) { - ATH_MSG_ERROR(" AlgTool::initialize failed "); - return StatusCode::FAILURE; - } - ATH_CHECK(m_idHelperSvc.retrieve()); - if (!m_idHelperSvc->hasCSC()) { - ATH_MSG_ERROR( - "The given detector layout does not contain any CSC chamber, there must be something wrong in the configuration, since the " - "CscClusterOnTrackCreator cannot be needed."); + ATH_MSG_ERROR("The given detector layout does not contain any CSC chamber, "<< + "there must be something wrong in the configuration," + <<" since the CscClusterOnTrackCreator cannot be needed."); return StatusCode::FAILURE; } // get error scaling tool // - if (!m_cscErrorScalingKey.key().empty()) { ATH_CHECK(m_cscErrorScalingKey.initialize()); } - if (!m_tgcErrorScalingKey.key().empty()) { ATH_CHECK(m_tgcErrorScalingKey.initialize()); } - if (!m_rpcErrorScalingKey.key().empty()) { ATH_CHECK(m_rpcErrorScalingKey.initialize()); } - - if (m_stripFitter.retrieve().isFailure()) { - ATH_MSG_WARNING("CscClusterOnTrackCreator " << name() << ": unable to retrieve strip fitter " << m_stripFitter); - } else { - ATH_MSG_DEBUG("CscClusterOnTrackCreator " << name() << ": retrieved " << m_stripFitter); - m_have_csc_tools = true; - } - - if (m_clusterFitter.retrieve().isFailure()) { - ATH_MSG_WARNING("CscClusterOnTrackCreator " << name() << ": unable to retrieve cluster fitter " << m_clusterFitter); - m_have_csc_tools = false; - } else { - ATH_MSG_DEBUG("CscClusterOnTrackCreator " << name() << ": retrieved " << m_clusterFitter); - } - - if (m_clusterUtilTool.retrieve().isFailure()) { - ATH_MSG_WARNING("CscClusterOnTrackCreator " << name() << ": unable to retrieve cluster fitter " << m_clusterUtilTool); - m_have_csc_tools = false; - } else { - ATH_MSG_DEBUG("CscClusterOnTrackCreator " << name() << ": retrieved " << m_clusterUtilTool); - } - - ATH_MSG_DEBUG(" sqrt( sigma_nominal^2 * alpha^2 + beta^2) where alpha(ErrorScaler) is " - << m_errorScaler << " and beta(ErrorScalerBeta) is " << m_errorScalerBeta); - + ATH_CHECK(m_cscErrorScalingKey.initialize(!m_cscErrorScalingKey.key().empty())); + ATH_CHECK(m_stripFitter.retrieve()); + ATH_CHECK(m_clusterFitter.retrieve()); + ATH_CHECK(m_clusterUtilTool.retrieve()); return StatusCode::SUCCESS; } - StatusCode CscClusterOnTrackCreator::finalize() { return AthAlgTool::finalize(); } - //////////////////////////////////////////////////////// MuonClusterOnTrack* CscClusterOnTrackCreator::createRIO_OnTrack(const Trk::PrepRawData& RIO, const Amg::Vector3D& GP) const { MuonClusterOnTrack* MClT = nullptr; @@ -136,80 +90,15 @@ namespace Muon { // Amg::MatrixX loce = RIO.localCovariance(); - if (m_doCsc && m_idHelperSvc->isCsc(RIO.identify()) && !m_cscErrorScalingKey.key().empty()) { + if (m_idHelperSvc->isCsc(RIO.identify()) && !m_cscErrorScalingKey.key().empty()) { SG::ReadCondHandle<RIO_OnTrackErrorScaling> error_scaling(m_cscErrorScalingKey); loce = Trk::ErrorScalingCast<MuonEtaPhiRIO_OnTrackErrorScaling>( *error_scaling) ->getScaledCovariance(std::move(loce), Trk::distPhi); ATH_MSG_VERBOSE("CSC: new cov(0,0) is " << loce(0, 0)); } - if (m_doRpc && m_idHelperSvc->isRpc(RIO.identify()) && !m_rpcErrorScalingKey.key().empty()) { - SG::ReadCondHandle<RIO_OnTrackErrorScaling> error_scaling(m_rpcErrorScalingKey); - loce = Trk::ErrorScalingCast<MuonEtaPhiRIO_OnTrackErrorScaling>( - *error_scaling) - ->getScaledCovariance(std::move(loce), Trk::distPhi); - ATH_MSG_VERBOSE("RPC: new cov(0,0) is " << loce(0, 0)); - } - if (m_doTgc && m_idHelperSvc->isTgc(RIO.identify()) && !m_tgcErrorScalingKey.key().empty()) { - SG::ReadCondHandle<RIO_OnTrackErrorScaling> error_scaling(m_tgcErrorScalingKey); - loce = Trk::ErrorScalingCast<MuonEtaPhiRIO_OnTrackErrorScaling>( - *error_scaling) - ->getScaledCovariance(std::move(loce), Trk::distPhi); - ATH_MSG_VERBOSE("TGC: new cov(1,1) is " << loce(0, 0)); - } - - if (m_doRpc && m_idHelperSvc->isRpc(RIO.identify())) { - // cast to RpcPrepData - const RpcPrepData* MClus = dynamic_cast<const RpcPrepData*>(&RIO); - if (!MClus) { - ATH_MSG_WARNING("RIO not of type RpcPrepData, cannot create ROT"); - return nullptr; - } - MClT = new RpcClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip); - - } else if (m_doTgc && m_idHelperSvc->isTgc(RIO.identify())) { - // cast to TgcPrepData - const TgcPrepData* MClus = dynamic_cast<const TgcPrepData*>(&RIO); - if (!MClus) { - ATH_MSG_WARNING("RIO not of type TgcPrepData, cannot create ROT"); - return nullptr; - } - // calculation of 2D error matrix for TGC phi strips - if (m_idHelperSvc->tgcIdHelper().isStrip(RIO.identify())) { - int stationeta = m_idHelperSvc->tgcIdHelper().stationEta(RIO.identify()); - int stripNo = m_idHelperSvc->tgcIdHelper().channel(RIO.identify()); - int gasGap = m_idHelperSvc->tgcIdHelper().gasGap(RIO.identify()); - - const MuonGM::TgcReadoutElement* ele = MClus->detectorElement(); - - double stripLength = ele->stripLength(gasGap, stripNo); - double stripWidth = std::fabs(ele->stripMaxX(gasGap, stripNo, lp[Trk::locZ]) - ele->stripMinX(gasGap, stripNo, lp[Trk::locZ])); - - double localX1 = ele->stripCtrX(gasGap, stripNo, stripLength / 2.); - double localX2 = ele->stripCtrX(gasGap, stripNo, -stripLength / 2.); - if (stationeta > 0) { - localX1 = -localX1; - localX2 = -localX2; - } - Amg::MatrixX mat = Amg::MatrixX(2, 2); - - double phistereo = std::atan2(localX2 - localX1, stripLength); - double Sn = std::sin(phistereo); - double Sn2 = Sn * Sn; - double Cs2 = 1. - Sn2; - - double V0 = stripWidth * stripWidth / 12; - double V1 = stripLength * stripLength / 12; - mat(0, 0) = (Cs2 * V0 + Sn2 * V1); - mat.fillSymmetric(1, 0, (Sn * std::sqrt(Cs2) * (V0 - V1))); - mat(1, 1) = (Sn2 * V0 + Cs2 * V1); - loce = mat; - } - - MClT = new TgcClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip); - - } else if (m_doCsc && m_idHelperSvc->isCsc(RIO.identify())) { + if (m_idHelperSvc->isCsc(RIO.identify())) { // cast to CscPrepData const CscPrepData* MClus = dynamic_cast<const CscPrepData*>(&RIO); if (!MClus) { @@ -227,9 +116,10 @@ namespace Muon { ///////////////////////////////////////////////////////////////// - MuonClusterOnTrack* CscClusterOnTrackCreator::createRIO_OnTrack(const Trk::PrepRawData& RIO, const Amg::Vector3D& GP, - const Amg::Vector3D& GD) const { - if (!(m_doCsc && m_idHelperSvc->isCsc(RIO.identify()))) { + MuonClusterOnTrack* CscClusterOnTrackCreator::createRIO_OnTrack(const Trk::PrepRawData& RIO, + const Amg::Vector3D& GP, + const Amg::Vector3D& GD) const { + if (!m_idHelperSvc->isCsc(RIO.identify())) { ATH_MSG_WARNING("CscClusterOnTrackCreator::createRIO_OnTrack is called by the other muon tech"); return nullptr; } @@ -261,7 +151,7 @@ namespace Muon { ATH_MSG_VERBOSE("Making 1-dim local parameters"); } - Amg::Vector2D lp; + Amg::Vector2D lp{Amg::Vector2D::Zero()}; double positionAlongStrip = 0; if (!EL->surface(RIO.identify()).globalToLocal(GP, GP, lp)) { @@ -276,7 +166,7 @@ namespace Muon { // Amg::MatrixX loce = RIO.localCovariance(); - if (m_doCsc && m_idHelperSvc->isCsc(RIO.identify()) && !m_cscErrorScalingKey.key().empty()) { + if (m_idHelperSvc->isCsc(RIO.identify()) && !m_cscErrorScalingKey.key().empty()) { SG::ReadCondHandle<RIO_OnTrackErrorScaling> error_scaling(m_cscErrorScalingKey); loce = Trk::ErrorScalingCast<MuonEtaPhiRIO_OnTrackErrorScaling>( *error_scaling) @@ -285,7 +175,7 @@ namespace Muon { } // postion Error is re-estimate only for precision fit cluster (eta) - if (m_have_csc_tools && MClus->status() != Muon::CscStatusUnspoiled && MClus->status() != Muon::CscStatusSplitUnspoiled) { + if (MClus->status() != Muon::CscStatusUnspoiled && MClus->status() != Muon::CscStatusSplitUnspoiled) { // current not changing CscClusterStatus but passing status of RIO MClT = new CscClusterOnTrack(MClus, std::move(locpar), std::move(loce), positionAlongStrip, MClus->status(), MClus->timeStatus(), MClus->time()); diff --git a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.h b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.h index 3056b2d39af2a3f8985a8eda7acdfb83b19418f9..e8adda1a32fddccc8b3688572379596bf53846eb 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.h +++ b/MuonSpectrometer/MuonReconstruction/MuonRIO_OnTrackCreators/MuonClusterOnTrackCreator/src/CscClusterOnTrackCreator.h @@ -53,7 +53,6 @@ namespace Muon { CscClusterOnTrackCreator(const std::string&, const std::string&, const IInterface*); virtual ~CscClusterOnTrackCreator(); virtual StatusCode initialize() override; - virtual StatusCode finalize() override; /** @brief Create new Muon::MuonClusterOnTrack from a Trk::PrepRawData and a predicted Trk::TrackParameter. @param RIO Trk::PrepRawData object to be calibrated @@ -95,30 +94,15 @@ namespace Muon { ToolHandle<ICscClusterFitter> m_clusterFitter{this, "CscClusterFitter", "QratCscClusterFitter/QratCscClusterFitter"}; ToolHandle<ICscClusterUtilTool> m_clusterUtilTool{this, "CscClusterUtilTool", "CscClusterUtilTool/CscClusterUtilTool"}; - bool m_have_csc_tools; - SG::ReadCondHandleKey<RIO_OnTrackErrorScaling> m_cscErrorScalingKey{ this, "CSCErrorScalingKey", "" /*"/MUON/TrkErrorScalingCSC"*/, "Key for CSC error scaling conditions data. No error scaling if empty."}; - SG::ReadCondHandleKey<RIO_OnTrackErrorScaling> m_tgcErrorScalingKey{ - this, "TGCErrorScalingKey", "" /*"/MUON/TrkErrorScalingTGC"*/, - "Key for TGC error scaling conditions data. No error scaling if empty."}; - - SG::ReadCondHandleKey<RIO_OnTrackErrorScaling> m_rpcErrorScalingKey{ - this, "RPCErrorScalingKey", "" /*"/MUON/TrkErrorScalingRPC"*/, - "Key for RPC error scaling conditions data. No error scaling if empty."}; - - bool m_doCsc; - bool m_doRpc; - bool m_doTgc; - double m_fixedError; - double m_errorScaler; - double m_errorScalerBeta; - double m_minimumError; + Gaudi::Property<double> m_errorScaler{this, "ErrorScaler" , 1.}; + Gaudi::Property<double> m_errorScalerBeta{this, "ErrorScalerBeta", 0.}; + Gaudi::Property<double> m_minimumError{this, "MinimumError" , 0.05}; - std::string m_cscStripLocation; }; } // namespace Muon #endif // CscClusterOnTrackCreator_H