ATLAS Offline Software
Loading...
Searching...
No Matches
NSWCalibTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef NSWCalibTool_h
5#define NSWCalibTool_h
6
9
12#include "MuonRDO/MM_RawData.h"
20
22
23
24namespace Muon {
25
26 class NSWCalibTool : public extends<AthAlgTool, INSWCalibTool> {
27
28 public:
29
30 using base_class::base_class;
31 virtual ~NSWCalibTool() = default;
32
35
36 StatusCode calibrateClus(const EventContext& ctx, const Muon::MMPrepData* prepData, const Amg::Vector3D& globalPos, std::vector<NSWCalib::CalibratedStrip>& calibClus) const override;
37 StatusCode distToTime(const EventContext& ctx, const Muon::MMPrepData* prepData, const Amg::Vector3D& globalPos, const std::vector<double>& driftDistances, std::vector<double>& driftTimes) const override;
38
39
40 StatusCode calibrateClus(const EventContext& ctx, const ActsTrk::GeometryContext& gctx, const xAOD::MMCluster& prepData, const Amg::Vector3D& globalPos, std::vector<NSWCalib::CalibratedStrip>& calibClus) const override;
41
42
43
44
45 StatusCode calibrateStrip(const EventContext& ctx, const Identifier& id, const double time, const double charge, const double theta, const double lorentzAngle, NSWCalib::CalibratedStrip& calibStrip) const override;
46 StatusCode calibrateStrip(const EventContext& ctx, const Muon::MM_RawData* mmRawData, NSWCalib::CalibratedStrip& calibStrip) const override;
47 StatusCode calibrateStrip(const EventContext& ctx, const Muon::STGC_RawData* sTGCRawData, NSWCalib::CalibratedStrip& calibStrip) const override;
48
49
50 bool tdoToTime (const EventContext& ctx, const bool inCounts, const int tdo, const Identifier& chnlId, float& time, const int relBCID) const override;
51 bool timeToTdo (const EventContext& ctx, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const override;
52 bool chargeToPdo(const EventContext& ctx, const float charge, const Identifier& chnlId, int& pdo) const override;
53 bool pdoToCharge(const EventContext& ctx, const bool inCounts, const int pdo, const Identifier& chnlId, float& charge) const override;
54
55 virtual StatusCode initialize() override;
56
58
59 inline float mmPeakTime () const override {return m_mmPeakTime; }
60 inline float stgcPeakTime() const override {return m_stgcPeakTime;}
61
62 private:
63 const NswCalibDbTimeChargeData* getCalibData(const EventContext& ctx) const;
64 bool loadMagneticField(const EventContext& ctx, MagField::AtlasFieldCache& fieldCache ) const;
65 const Muon::mmCTPClusterCalibData* getCTPClusterCalibData(const EventContext& ctx) const;
66
67 bool timeToTdoMM(const NswCalibDbTimeChargeData* tdoPdoData, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const;
68 bool timeToTdoSTGC(const NswCalibDbTimeChargeData* tdoPdoData, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const;
69
70 float applyT0Calibration(const EventContext& ctx, const Identifier& id, float time) const;
71
72 ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
73 SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj"};
74 SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> m_muDetMgrKey {this, "DetectorManagerKey", "MuonDetectorManager", "Key of input MuonDetectorManager condition data"};
75 SG::ReadCondHandleKey<NswCalibDbTimeChargeData> m_condTdoPdoKey {this, "condTdoPdoKey", "NswCalibDbTimeChargeData", "Key of NswCalibDbTimeChargeData object containing calibration data (TDO and PDO)"};
76 SG::ReadCondHandleKey<NswT0Data> m_condT0Key{this, "condT0Key", "NswT0Data", "Key of NswT0Data containing the t0 calibration data"};
77
78 Gaudi::Property<bool> m_isData{this, "isData", false, "Processing data"};
79
80 Gaudi::Property<bool> m_CalibDriftVelocityFromData{this, "calibrateDriftVelocityFromData", false, "calibrateDriftVelocityFromData"};
81 SG::ReadCondHandleKey<Muon::mmCTPClusterCalibData> m_ctpClusterCalibKey{this, "CTPClusterCalibKey", "mmCTPClusterCalibData", "Key of the CTP cluster calibration corrections"};
82
83 StatusCode initializeGasProperties();
84
85 Gaudi::Property<double> m_vDrift{this, "DriftVelocity",0.047, "Drift velocity"};
86 Gaudi::Property<double> m_timeRes{this, "TimeResolution", 25., "Time resolution"};
87 Gaudi::Property<double> m_longDiff{this, "longDiff", 0.019}; // mm/ mm
88 Gaudi::Property<double> m_transDiff{this, "transDiff", 0.036};
89 Gaudi::Property<double> m_ionUncertainty{this,"ionUncertainty", 4.0}; //ns
90 Gaudi::Property<float> m_mmPeakTime{this, "mmPeakTime", 200.}; //ns
91 Gaudi::Property<float> m_stgcPeakTime{this, "sTgcPeakTime", 0.}; // ns
92 Gaudi::Property<std::string> m_gasMixture{this, "GasMixture", "ArCo2_937"};
93
94 // these values should go into the conditions database, but introduce them as properties for now
95 // they describe the shift of the time to get it into the VMM time window
96 Gaudi::Property<float> m_mmLatencyMC{this,"mmLatencyMC",25};
97 Gaudi::Property<float> m_mmLatencyData{this,"mmLatencyData",0}; //tuned with 2023 data, should not change anymore.
98
99 Gaudi::Property<float> m_stgcLatencyMC{this,"stgcLatencyMC",-50};
100 Gaudi::Property<float> m_stgcLatencyData{this,"stgcLatencyData",-50}; //this is temporary, need to align with what we find in data
101
102
103 Gaudi::Property<bool> m_applyMmT0Calib {this, "applyMmT0Calib", false, "apply the MM t0 calibration"};
104 Gaudi::Property<bool> m_applysTgcT0Calib {this, "applysTgcT0Calib", false, "apply the sTGC t0 calibration"};
105
106 Gaudi::Property<bool> m_applyMmBFieldCalib {this, "applyMmBFieldCalib", true, "apply the MM BField correction in reconstruction"};
107
108
109 Gaudi::Property<float> m_mmT0TargetValue {this, "mmT0TargetValue", 50.0, "target mean value for the MM t0 calibration"};
110 Gaudi::Property<float> m_stgcT0TargetValue {this,"stgcT0TargetValue", 0.0 ,"target mean value for the sTGC t0 calibration"};
111
112
115
118
119 bool localStripPosition(const Identifier& id, Amg::Vector2D &locPos) const;
120
121 };
122
123
124} // namespace Muon
125
126#endif
Scalar theta() const
theta method
double charge(const T &p)
Definition AtlasPID.h:997
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Class to represent MM measurements.
Definition MMPrepData.h:22
Temporary class to hold the MM RDO.
Definition MM_RawData.h:20
StatusCode calibrateClus(const EventContext &ctx, const Muon::MMPrepData *prepData, const Amg::Vector3D &globalPos, std::vector< NSWCalib::CalibratedStrip > &calibClus) const override
Gaudi::Property< bool > m_CalibDriftVelocityFromData
Gaudi::Property< float > m_mmT0TargetValue
bool timeToTdoMM(const NswCalibDbTimeChargeData *tdoPdoData, const float time, const Identifier &chnlId, int &tdo, int &relBCID) const
Gaudi::Property< double > m_timeRes
double m_interactionDensityMean
bool tdoToTime(const EventContext &ctx, const bool inCounts, const int tdo, const Identifier &chnlId, float &time, const int relBCID) const override
angleFunction m_lorentzAngleFunction
Gaudi::Property< double > m_ionUncertainty
double m_interactionDensitySigma
NSWCalib::MicroMegaGas::angleFunction angleFunction
SG::ReadCondHandleKey< Muon::mmCTPClusterCalibData > m_ctpClusterCalibKey
const Muon::mmCTPClusterCalibData * getCTPClusterCalibData(const EventContext &ctx) const
virtual StatusCode initialize() override
SG::ReadCondHandleKey< NswT0Data > m_condT0Key
Gaudi::Property< bool > m_applyMmT0Calib
Gaudi::Property< float > m_stgcT0TargetValue
virtual ~NSWCalibTool()=default
Gaudi::Property< bool > m_applyMmBFieldCalib
bool chargeToPdo(const EventContext &ctx, const float charge, const Identifier &chnlId, int &pdo) const override
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_muDetMgrKey
bool timeToTdoSTGC(const NswCalibDbTimeChargeData *tdoPdoData, const float time, const Identifier &chnlId, int &tdo, int &relBCID) const
Gaudi::Property< float > m_mmLatencyData
bool loadMagneticField(const EventContext &ctx, MagField::AtlasFieldCache &fieldCache) const
Gaudi::Property< std::string > m_gasMixture
float applyT0Calibration(const EventContext &ctx, const Identifier &id, float time) const
Gaudi::Property< float > m_stgcPeakTime
bool localStripPosition(const Identifier &id, Amg::Vector2D &locPos) const
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
bool timeToTdo(const EventContext &ctx, const float time, const Identifier &chnlId, int &tdo, int &relBCID) const override
Gaudi::Property< double > m_transDiff
StatusCode initializeGasProperties()
Gaudi::Property< double > m_longDiff
float stgcPeakTime() const override
Gaudi::Property< float > m_mmLatencyMC
Gaudi::Property< double > m_vDrift
Gaudi::Property< bool > m_applysTgcT0Calib
NswCalibDbTimeChargeData::CalibDataType TimeCalibType
Gaudi::Property< float > m_stgcLatencyMC
SG::ReadCondHandleKey< NswCalibDbTimeChargeData > m_condTdoPdoKey
float mmPeakTime() const override
StatusCode distToTime(const EventContext &ctx, const Muon::MMPrepData *prepData, const Amg::Vector3D &globalPos, const std::vector< double > &driftDistances, std::vector< double > &driftTimes) const override
bool pdoToCharge(const EventContext &ctx, const bool inCounts, const int pdo, const Identifier &chnlId, float &charge) const override
Gaudi::Property< float > m_stgcLatencyData
NswCalibDbTimeChargeData::CalibConstants TimeCalibConst
const NswCalibDbTimeChargeData * getCalibData(const EventContext &ctx) const
StatusCode calibrateStrip(const EventContext &ctx, const Identifier &id, const double time, const double charge, const double theta, const double lorentzAngle, NSWCalib::CalibratedStrip &calibStrip) const override
Gaudi::Property< bool > m_isData
NSWCalib::MicroMegaGas mmGasProperties() const override
Gaudi::Property< float > m_mmPeakTime
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
MMCluster_v1 MMCluster
std::function< double(double)> angleFunction
static angleFunction dummy_func()
Dummy function to be used for the initialization.
Helper struct to cache all calibration constants in a common place of the memory.