ATLAS Offline Software
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"
13 #include "MuonRDO/STGC_RawData.h"
18 #include "MuonCondData/NswT0Data.h"
19 
20 
21 namespace Muon {
22 
23  class NSWCalibTool : virtual public INSWCalibTool, public AthAlgTool {
24 
25  public:
26 
27  NSWCalibTool(const std::string&, const std::string&, const IInterface*);
28 
29  virtual ~NSWCalibTool() = default;
30 
33 
34  StatusCode calibrateClus(const EventContext& ctx, const Muon::MMPrepData* prepData, const Amg::Vector3D& globalPos, std::vector<NSWCalib::CalibratedStrip>& calibClus) const override;
35  StatusCode distToTime(const EventContext& ctx, const Muon::MMPrepData* prepData, const Amg::Vector3D& globalPos, const std::vector<double>& driftDistances, std::vector<double>& driftTimes) const override;
36  StatusCode calibrateStrip(const Identifier& id, const double time, const double charge, const double lorentzAngle, NSWCalib::CalibratedStrip& calibStrip) const override;
37  StatusCode calibrateStrip(const EventContext& ctx, const Muon::MM_RawData* mmRawData, NSWCalib::CalibratedStrip& calibStrip) const override;
38  StatusCode calibrateStrip(const EventContext& ctx, const Muon::STGC_RawData* sTGCRawData, NSWCalib::CalibratedStrip& calibStrip) const override;
39 
40 
41  bool tdoToTime (const EventContext& ctx, const bool inCounts, const int tdo, const Identifier& chnlId, float& time, const int relBCID) const override;
42  bool timeToTdo (const EventContext& ctx, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const override;
43  bool chargeToPdo(const EventContext& ctx, const float charge, const Identifier& chnlId, int& pdo) const override;
44  bool pdoToCharge(const EventContext& ctx, const bool inCounts, const int pdo, const Identifier& chnlId, float& charge) const override;
45 
46  virtual StatusCode initialize() override;
47 
48  NSWCalib::MicroMegaGas mmGasProperties() const override;
49 
50  inline float mmPeakTime () const override {return m_mmPeakTime; }
51  inline float stgcPeakTime() const override {return m_stgcPeakTime;}
52 
53  private:
54  const NswCalibDbTimeChargeData* getCalibData(const EventContext& ctx) const;
55  bool loadMagneticField(const EventContext& ctx, MagField::AtlasFieldCache& fieldCache ) const;
56 
57  bool timeToTdoMM(const NswCalibDbTimeChargeData* tdoPdoData, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const;
58  bool timeToTdoSTGC(const NswCalibDbTimeChargeData* tdoPdoData, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const;
59 
60  float applyT0Calibration(const EventContext& ctx, const Identifier& id, float time) const;
61 
62  ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
63  SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj"};
64  SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> m_muDetMgrKey {this, "DetectorManagerKey", "MuonDetectorManager", "Key of input MuonDetectorManager condition data"};
65  SG::ReadCondHandleKey<NswCalibDbTimeChargeData> m_condTdoPdoKey {this, "condTdoPdoKey", "NswCalibDbTimeChargeData", "Key of NswCalibDbTimeChargeData object containing calibration data (TDO and PDO)"};
66  SG::ReadCondHandleKey<NswT0Data> m_condT0Key{this, "condT0Key", "NswT0Data", "Key of NswT0Data containing the t0 calibration data"};
67 
68  Gaudi::Property<bool> m_isData{this, "isData", false, "Processing data"};
69 
71 
72  Gaudi::Property<double> m_vDrift{this, "DriftVelocity",0.047, "Drift velocity"};
73  Gaudi::Property<double> m_timeRes{this, "TimeResolution", 25., "Time resolution"};
74  Gaudi::Property<double> m_longDiff{this, "longDiff", 0.019}; // mm/ mm
75  Gaudi::Property<double> m_transDiff{this, "transDiff", 0.036};
76  Gaudi::Property<double> m_ionUncertainty{this,"ionUncertainty", 4.0}; //ns
77  Gaudi::Property<float> m_mmPeakTime{this, "mmPeakTime", 200.}; //ns
78  Gaudi::Property<float> m_stgcPeakTime{this, "sTgcPeakTime", 0.}; // ns
79  Gaudi::Property<std::string> m_gasMixture{this, "GasMixture", "ArCo2_937"};
80 
81  // these values should go into the conditions database, but introduce them as properties for now
82  // they describe the shift of the time to get it into the VMM time window
83  Gaudi::Property<float> m_mmLatencyMC{this,"mmLatencyMC",25};
84  Gaudi::Property<float> m_mmLatencyData{this,"mmLatencyData",0}; //tuned with 2023 data, should not change anymore.
85 
86  Gaudi::Property<float> m_stgcLatencyMC{this,"stgcLatencyMC",-50};
87  Gaudi::Property<float> m_stgcLatencyData{this,"stgcLatencyData",-50}; //this is temporary, need to align with what we find in data
88 
89 
90  Gaudi::Property<bool> m_applyMmT0Calib {this, "applyMmT0Calib", false, "apply the MM t0 calibration"};
91  Gaudi::Property<bool> m_applysTgcT0Calib {this, "applysTgcT0Calib", false, "apply the sTGC t0 calibration"};
92 
93  Gaudi::Property<bool> m_applyMmBFieldCalib {this, "applyMmBFieldCalib", true, "apply the MM BField correction in reconstruction"};
94 
95 
96  Gaudi::Property<float> m_mmT0TargetValue {this, "mmT0TargetValue", 50.0, "target mean value for the MM t0 calibration"};
97  Gaudi::Property<float> m_stgcT0TargetValue {this,"stgcT0TargetValue", 0.0 ,"target mean value for the sTGC t0 calibration"};
98 
99 
102 
105 
106  bool localStripPosition(const Identifier& id, Amg::Vector2D &locPos) const;
107 
108  };
109 
110 
111 } // namespace Muon
112 
113 #endif
Muon::NSWCalibTool::stgcPeakTime
float stgcPeakTime() const override
Definition: NSWCalibTool.h:51
Muon::NSWCalibTool::m_applyMmT0Calib
Gaudi::Property< bool > m_applyMmT0Calib
Definition: NSWCalibTool.h:90
Muon::NSWCalibTool::m_interactionDensityMean
double m_interactionDensityMean
Definition: NSWCalibTool.h:101
Muon::MMPrepData
Class to represent MM measurements.
Definition: MMPrepData.h:22
Muon::NSWCalibTool::m_stgcPeakTime
Gaudi::Property< float > m_stgcPeakTime
Definition: NSWCalibTool.h:78
Muon::NSWCalibTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: NSWCalibTool.h:62
NswCalibDbTimeChargeData::CalibConstants
Helper struct to cache all calibration constants in a common place of the memory.
Definition: NswCalibDbTimeChargeData.h:28
NswCalibDbTimeChargeData.h
Muon::NSWCalibTool::initializeGasProperties
StatusCode initializeGasProperties()
Definition: NSWCalibTool.cxx:66
Muon::NSWCalibTool::m_mmLatencyMC
Gaudi::Property< float > m_mmLatencyMC
Definition: NSWCalibTool.h:83
Muon::NSWCalibTool::pdoToCharge
bool pdoToCharge(const EventContext &ctx, const bool inCounts, const int pdo, const Identifier &chnlId, float &charge) const override
Definition: NSWCalibTool.cxx:301
Muon::NSWCalibTool::m_mmLatencyData
Gaudi::Property< float > m_mmLatencyData
Definition: NSWCalibTool.h:84
AtlasFieldCacheCondObj.h
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
Muon::NSWCalibTool::timeToTdo
bool timeToTdo(const EventContext &ctx, const float time, const Identifier &chnlId, int &tdo, int &relBCID) const override
Definition: NSWCalibTool.cxx:325
INSWCalibTool.h
Muon::NSWCalibTool::m_lorentzAngleFunction
angleFunction m_lorentzAngleFunction
Definition: NSWCalibTool.h:104
Muon::NSWCalibTool::m_muDetMgrKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_muDetMgrKey
Definition: NSWCalibTool.h:64
Muon::NSWCalibTool::m_mmPeakTime
Gaudi::Property< float > m_mmPeakTime
Definition: NSWCalibTool.h:77
Muon::NSWCalibTool::mmPeakTime
float mmPeakTime() const override
Definition: NSWCalibTool.h:50
Muon::NSWCalibTool::tdoToTime
bool tdoToTime(const EventContext &ctx, const bool inCounts, const int tdo, const Identifier &chnlId, float &time, const int relBCID) const override
Definition: NSWCalibTool.cxx:405
Muon::NSWCalibTool::angleFunction
NSWCalib::MicroMegaGas::angleFunction angleFunction
Definition: NSWCalibTool.h:103
Muon::NSWCalibTool::m_longDiff
Gaudi::Property< double > m_longDiff
Definition: NSWCalibTool.h:74
Muon::NSWCalibTool::m_isData
Gaudi::Property< bool > m_isData
Definition: NSWCalibTool.h:68
Muon
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Definition: TrackSystemController.h:45
NswCalibDbTimeChargeData::CalibDataType
CalibDataType
Definition: NswCalibDbTimeChargeData.h:22
Muon::NSWCalibTool::m_stgcT0TargetValue
Gaudi::Property< float > m_stgcT0TargetValue
Definition: NSWCalibTool.h:97
Muon::NSWCalibTool::m_timeRes
Gaudi::Property< double > m_timeRes
Definition: NSWCalibTool.h:73
Muon::NSWCalibTool::m_mmT0TargetValue
Gaudi::Property< float > m_mmT0TargetValue
Definition: NSWCalibTool.h:96
Muon::NSWCalibTool::m_interactionDensitySigma
double m_interactionDensitySigma
Definition: NSWCalibTool.h:100
Muon::NSWCalibTool::loadMagneticField
bool loadMagneticField(const EventContext &ctx, MagField::AtlasFieldCache &fieldCache) const
Definition: NSWCalibTool.cxx:242
STGC_RawData.h
Muon::NSWCalibTool::mmGasProperties
NSWCalib::MicroMegaGas mmGasProperties() const override
Definition: NSWCalibTool.cxx:433
Muon::NSWCalibTool::m_vDrift
Gaudi::Property< double > m_vDrift
Definition: NSWCalibTool.h:72
NSWCalib::MicroMegaGas::angleFunction
std::function< double(double)> angleFunction
Definition: INSWCalibTool.h:40
Muon::NSWCalibTool::distToTime
StatusCode distToTime(const EventContext &ctx, const Muon::MMPrepData *prepData, const Amg::Vector3D &globalPos, const std::vector< double > &driftDistances, std::vector< double > &driftTimes) const override
Definition: NSWCalibTool.cxx:251
Muon::NSWCalibTool::m_ionUncertainty
Gaudi::Property< double > m_ionUncertainty
Definition: NSWCalibTool.h:76
Muon::NSWCalibTool::timeToTdoSTGC
bool timeToTdoSTGC(const NswCalibDbTimeChargeData *tdoPdoData, const float time, const Identifier &chnlId, int &tdo, int &relBCID) const
Definition: NSWCalibTool.cxx:360
Muon::STGC_RawData
Definition: STGC_RawData.h:14
Muon::MM_RawData
Temporary class to hold the MM RDO.
Definition: MM_RawData.h:20
Muon::NSWCalibTool::applyT0Calibration
float applyT0Calibration(const EventContext &ctx, const Identifier &id, float time) const
Definition: NSWCalibTool.cxx:385
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthAlgTool.h
MMPrepData.h
Muon::NSWCalibTool::m_applyMmBFieldCalib
Gaudi::Property< bool > m_applyMmBFieldCalib
Definition: NSWCalibTool.h:93
Muon::NSWCalibTool
Definition: NSWCalibTool.h:23
Muon::NSWCalibTool::m_stgcLatencyData
Gaudi::Property< float > m_stgcLatencyData
Definition: NSWCalibTool.h:87
Muon::NSWCalibTool::m_stgcLatencyMC
Gaudi::Property< float > m_stgcLatencyMC
Definition: NSWCalibTool.h:86
NSWCalib::CalibratedStrip
Definition: INSWCalibTool.h:20
Muon::NSWCalibTool::m_gasMixture
Gaudi::Property< std::string > m_gasMixture
Definition: NSWCalibTool.h:79
ReadCondHandleKey.h
Muon::NSWCalibTool::m_condT0Key
SG::ReadCondHandleKey< NswT0Data > m_condT0Key
Definition: NSWCalibTool.h:66
Muon::NSWCalibTool::getCalibData
const NswCalibDbTimeChargeData * getCalibData(const EventContext &ctx) const
Definition: NSWCalibTool.cxx:81
Muon::NSWCalibTool::~NSWCalibTool
virtual ~NSWCalibTool()=default
charge
double charge(const T &p)
Definition: AtlasPID.h:897
Muon::NSWCalibTool::calibrateClus
StatusCode calibrateClus(const EventContext &ctx, const Muon::MMPrepData *prepData, const Amg::Vector3D &globalPos, std::vector< NSWCalib::CalibratedStrip > &calibClus) const override
Definition: NSWCalibTool.cxx:91
MM_RawData.h
NSWCalib::MicroMegaGas::dummy_func
static angleFunction dummy_func()
Dummy function to be used for the initialization.
Definition: INSWCalibTool.h:42
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonDetectorManager.h
Muon::NSWCalibTool::m_applysTgcT0Calib
Gaudi::Property< bool > m_applysTgcT0Calib
Definition: NSWCalibTool.h:91
SG::ReadCondHandleKey< AtlasFieldCacheCondObj >
NswT0Data.h
Muon::NSWCalibTool::m_transDiff
Gaudi::Property< double > m_transDiff
Definition: NSWCalibTool.h:75
Muon::NSWCalibTool::localStripPosition
bool localStripPosition(const Identifier &id, Amg::Vector2D &locPos) const
Definition: NSWCalibTool.cxx:445
Muon::NSWCalibTool::timeToTdoMM
bool timeToTdoMM(const NswCalibDbTimeChargeData *tdoPdoData, const float time, const Identifier &chnlId, int &tdo, int &relBCID) const
Definition: NSWCalibTool.cxx:334
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
Muon::NSWCalibTool::NSWCalibTool
NSWCalibTool(const std::string &, const std::string &, const IInterface *)
Definition: NSWCalibTool.cxx:46
Muon::NSWCalibTool::initialize
virtual StatusCode initialize() override
Definition: NSWCalibTool.cxx:52
Muon::NSWCalibTool::m_condTdoPdoKey
SG::ReadCondHandleKey< NswCalibDbTimeChargeData > m_condTdoPdoKey
Definition: NSWCalibTool.h:65
NswCalibDbTimeChargeData
Definition: NswCalibDbTimeChargeData.h:19
AthAlgTool
Definition: AthAlgTool.h:26
Muon::INSWCalibTool
Definition: INSWCalibTool.h:59
Muon::NSWCalibTool::calibrateStrip
StatusCode calibrateStrip(const Identifier &id, const double time, const double charge, const double lorentzAngle, NSWCalib::CalibratedStrip &calibStrip) const override
Definition: NSWCalibTool.cxx:126
Muon::NSWCalibTool::chargeToPdo
bool chargeToPdo(const EventContext &ctx, const float charge, const Identifier &chnlId, int &pdo) const override
Definition: NSWCalibTool.cxx:277
NSWCalib::MicroMegaGas
Definition: INSWCalibTool.h:32
IMuonIdHelperSvc.h
ServiceHandle< Muon::IMuonIdHelperSvc >
Muon::NSWCalibTool::m_fieldCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
Definition: NSWCalibTool.h:63
Identifier
Definition: IdentifierFieldParser.cxx:14