ATLAS Offline Software
NSWCalibTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 #ifndef NSWCalibTool_h
5 #define NSWCalibTool_h
6 
9 #include "GaudiKernel/ServiceHandle.h"
10 
13 #include "MuonRDO/MM_RawData.h"
14 #include "MuonRDO/STGC_RawData.h"
19 #include "MuonCondData/NswT0Data.h"
20 
21 #include "TRandom3.h"
22 #include "TTree.h"
23 #include "TF1.h"
24 
25 #include <string>
26 #include <vector>
27 
28 namespace Muon {
29 
30  class NSWCalibTool : virtual public INSWCalibTool, public AthAlgTool {
31 
32  public:
33 
34  NSWCalibTool(const std::string&, const std::string&, const IInterface*);
35 
36  virtual ~NSWCalibTool() = default;
37 
40 
41  StatusCode calibrateClus(const EventContext& ctx, const Muon::MMPrepData* prepData, const Amg::Vector3D& globalPos, std::vector<NSWCalib::CalibratedStrip>& calibClus) const override;
42  StatusCode distToTime(const EventContext& ctx, const Muon::MMPrepData* prepData, const Amg::Vector3D& globalPos, const std::vector<double>& driftDistances, std::vector<double>& driftTimes) const override;
43  StatusCode calibrateStrip(const Identifier& id, const double time, const double charge, const double lorentzAngle, NSWCalib::CalibratedStrip& calibStrip) const override;
44  StatusCode calibrateStrip(const EventContext& ctx, const Muon::MM_RawData* mmRawData, NSWCalib::CalibratedStrip& calibStrip) const override;
45  StatusCode calibrateStrip(const EventContext& ctx, const Muon::STGC_RawData* sTGCRawData, NSWCalib::CalibratedStrip& calibStrip) const override;
46 
47 
48  bool tdoToTime (const EventContext& ctx, const bool inCounts, const int tdo, const Identifier& chnlId, float& time, const int relBCID) const override;
49  bool timeToTdo (const EventContext& ctx, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const override;
50  bool chargeToPdo(const EventContext& ctx, const float charge, const Identifier& chnlId, int& pdo) const override;
51  bool pdoToCharge(const EventContext& ctx, const bool inCounts, const int pdo, const Identifier& chnlId, float& charge) const override;
52 
53  virtual StatusCode initialize() override;
54 
55  NSWCalib::MicroMegaGas mmGasProperties() const override;
56 
57  inline float mmPeakTime () const override {return m_mmPeakTime; }
58  inline float stgcPeakTime() const override {return m_stgcPeakTime;}
59 
60  private:
61  const NswCalibDbTimeChargeData* getCalibData(const EventContext& ctx) const;
62  bool loadMagneticField(const EventContext& ctx, MagField::AtlasFieldCache& fieldCache ) const;
63 
64  bool timeToTdoMM(const NswCalibDbTimeChargeData* tdoPdoData, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const;
65  bool timeToTdoSTGC(const NswCalibDbTimeChargeData* tdoPdoData, const float time, const Identifier& chnlId, int& tdo, int& relBCID) const;
66 
67  float applyT0Calibration(const EventContext& ctx, const Identifier& id, float time) const;
68 
69  ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
70  SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj"};
71  SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> m_muDetMgrKey {this, "DetectorManagerKey", "MuonDetectorManager", "Key of input MuonDetectorManager condition data"};
72  SG::ReadCondHandleKey<NswCalibDbTimeChargeData> m_condTdoPdoKey {this, "condTdoPdoKey", "NswCalibDbTimeChargeData", "Key of NswCalibDbTimeChargeData object containing calibration data (TDO and PDO)"};
73  SG::ReadCondHandleKey<NswT0Data> m_condT0Key{this, "condT0Key", "NswT0Data", "Key of NswT0Data containing the t0 calibration data"};
74 
75  Gaudi::Property<bool> m_isData{this, "isData", false, "Processing data"};
76 
78 
79  Gaudi::Property<double> m_vDrift{this, "DriftVelocity",0.047, "Drift velocity"};
80  Gaudi::Property<double> m_timeRes{this, "TimeResolution", 25., "Time resolution"};
81  Gaudi::Property<double> m_longDiff{this, "longDiff", 0.019}; // mm/ mm
82  Gaudi::Property<double> m_transDiff{this, "transDiff", 0.036};
83  Gaudi::Property<double> m_ionUncertainty{this,"ionUncertainty", 4.0}; //ns
84  Gaudi::Property<float> m_mmPeakTime{this, "mmPeakTime", 200.}; //ns
85  Gaudi::Property<float> m_stgcPeakTime{this, "sTgcPeakTime", 0.}; // ns
86  Gaudi::Property<std::string> m_gasMixture{this, "GasMixture", "ArCo2_937"};
87 
88  // these values should go into the conditions database, but introduce them as properties for now
89  // they describe the shift of the time to get it into the VMM time window
90  Gaudi::Property<float> m_mmLatencyMC{this,"mmLatencyMC",25};
91  Gaudi::Property<float> m_mmLatencyData{this,"mmLatencyData",0}; //tuned with 2023 data, should not change anymore.
92 
93  Gaudi::Property<float> m_stgcLatencyMC{this,"stgcLatencyMC",-50};
94  Gaudi::Property<float> m_stgcLatencyData{this,"stgcLatencyData",-50}; //this is temporary, need to align with what we find in data
95 
96 
97  Gaudi::Property<bool> m_applyMmT0Calib {this, "applyMmT0Calib", false, "apply the MM t0 calibration"};
98  Gaudi::Property<bool> m_applysTgcT0Calib {this, "applysTgcT0Calib", false, "apply the sTGC t0 calibration"};
99 
100  Gaudi::Property<bool> m_applyMmBFieldCalib {this, "applyMmBFieldCalib", true, "apply the MM BField correction in reconstruction"};
101 
102 
103  Gaudi::Property<float> m_mmT0TargetValue {this, "mmT0TargetValue", 50.0, "target mean value for the MM t0 calibration"};
104  Gaudi::Property<float> m_stgcT0TargetValue {this,"stgcT0TargetValue", 0.0 ,"target mean value for the sTGC t0 calibration"};
105 
106 
109 
112 
113  bool localStripPosition(const Identifier& id, Amg::Vector2D &locPos) const;
114 
115  };
116 
117 
118 } // namespace Muon
119 
120 #endif
Muon::NSWCalibTool::stgcPeakTime
float stgcPeakTime() const override
Definition: NSWCalibTool.h:58
Muon::NSWCalibTool::m_applyMmT0Calib
Gaudi::Property< bool > m_applyMmT0Calib
Definition: NSWCalibTool.h:97
Muon::NSWCalibTool::m_interactionDensityMean
double m_interactionDensityMean
Definition: NSWCalibTool.h:108
Muon::MMPrepData
Class to represent MM measurements.
Definition: MMPrepData.h:22
Muon::NSWCalibTool::m_stgcPeakTime
Gaudi::Property< float > m_stgcPeakTime
Definition: NSWCalibTool.h:85
Muon::NSWCalibTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: NSWCalibTool.h:69
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:70
Muon::NSWCalibTool::m_mmLatencyMC
Gaudi::Property< float > m_mmLatencyMC
Definition: NSWCalibTool.h:90
Muon::NSWCalibTool::pdoToCharge
bool pdoToCharge(const EventContext &ctx, const bool inCounts, const int pdo, const Identifier &chnlId, float &charge) const override
Definition: NSWCalibTool.cxx:305
Muon::NSWCalibTool::m_mmLatencyData
Gaudi::Property< float > m_mmLatencyData
Definition: NSWCalibTool.h:91
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:329
INSWCalibTool.h
Muon::NSWCalibTool::m_lorentzAngleFunction
angleFunction m_lorentzAngleFunction
Definition: NSWCalibTool.h:111
Muon::NSWCalibTool::m_muDetMgrKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_muDetMgrKey
Definition: NSWCalibTool.h:71
Muon::NSWCalibTool::m_mmPeakTime
Gaudi::Property< float > m_mmPeakTime
Definition: NSWCalibTool.h:84
Muon::NSWCalibTool::mmPeakTime
float mmPeakTime() const override
Definition: NSWCalibTool.h:57
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:409
Muon::NSWCalibTool::angleFunction
NSWCalib::MicroMegaGas::angleFunction angleFunction
Definition: NSWCalibTool.h:110
Muon::NSWCalibTool::m_longDiff
Gaudi::Property< double > m_longDiff
Definition: NSWCalibTool.h:81
Muon::NSWCalibTool::m_isData
Gaudi::Property< bool > m_isData
Definition: NSWCalibTool.h:75
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
NswCalibDbTimeChargeData::CalibDataType
CalibDataType
Definition: NswCalibDbTimeChargeData.h:22
Muon::NSWCalibTool::m_stgcT0TargetValue
Gaudi::Property< float > m_stgcT0TargetValue
Definition: NSWCalibTool.h:104
Muon::NSWCalibTool::m_timeRes
Gaudi::Property< double > m_timeRes
Definition: NSWCalibTool.h:80
Muon::NSWCalibTool::m_mmT0TargetValue
Gaudi::Property< float > m_mmT0TargetValue
Definition: NSWCalibTool.h:103
Muon::NSWCalibTool::m_interactionDensitySigma
double m_interactionDensitySigma
Definition: NSWCalibTool.h:107
Muon::NSWCalibTool::loadMagneticField
bool loadMagneticField(const EventContext &ctx, MagField::AtlasFieldCache &fieldCache) const
Definition: NSWCalibTool.cxx:246
STGC_RawData.h
Muon::NSWCalibTool::mmGasProperties
NSWCalib::MicroMegaGas mmGasProperties() const override
Definition: NSWCalibTool.cxx:437
Muon::NSWCalibTool::m_vDrift
Gaudi::Property< double > m_vDrift
Definition: NSWCalibTool.h:79
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:255
Muon::NSWCalibTool::m_ionUncertainty
Gaudi::Property< double > m_ionUncertainty
Definition: NSWCalibTool.h:83
Muon::NSWCalibTool::timeToTdoSTGC
bool timeToTdoSTGC(const NswCalibDbTimeChargeData *tdoPdoData, const float time, const Identifier &chnlId, int &tdo, int &relBCID) const
Definition: NSWCalibTool.cxx:364
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:389
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
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:100
Muon::NSWCalibTool
Definition: NSWCalibTool.h:30
Muon::NSWCalibTool::m_stgcLatencyData
Gaudi::Property< float > m_stgcLatencyData
Definition: NSWCalibTool.h:94
Muon::NSWCalibTool::m_stgcLatencyMC
Gaudi::Property< float > m_stgcLatencyMC
Definition: NSWCalibTool.h:93
NSWCalib::CalibratedStrip
Definition: INSWCalibTool.h:20
Muon::NSWCalibTool::m_gasMixture
Gaudi::Property< std::string > m_gasMixture
Definition: NSWCalibTool.h:86
ReadCondHandleKey.h
Muon::NSWCalibTool::m_condT0Key
SG::ReadCondHandleKey< NswT0Data > m_condT0Key
Definition: NSWCalibTool.h:73
Muon::NSWCalibTool::getCalibData
const NswCalibDbTimeChargeData * getCalibData(const EventContext &ctx) const
Definition: NSWCalibTool.cxx:85
Muon::NSWCalibTool::~NSWCalibTool
virtual ~NSWCalibTool()=default
charge
double charge(const T &p)
Definition: AtlasPID.h:494
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:95
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:98
SG::ReadCondHandleKey< AtlasFieldCacheCondObj >
NswT0Data.h
Muon::NSWCalibTool::m_transDiff
Gaudi::Property< double > m_transDiff
Definition: NSWCalibTool.h:82
Muon::NSWCalibTool::localStripPosition
bool localStripPosition(const Identifier &id, Amg::Vector2D &locPos) const
Definition: NSWCalibTool.cxx:449
Muon::NSWCalibTool::timeToTdoMM
bool timeToTdoMM(const NswCalibDbTimeChargeData *tdoPdoData, const float time, const Identifier &chnlId, int &tdo, int &relBCID) const
Definition: NSWCalibTool.cxx:338
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
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:72
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:130
Muon::NSWCalibTool::chargeToPdo
bool chargeToPdo(const EventContext &ctx, const float charge, const Identifier &chnlId, int &pdo) const override
Definition: NSWCalibTool.cxx:281
NSWCalib::MicroMegaGas
Definition: INSWCalibTool.h:32
IMuonIdHelperSvc.h
ServiceHandle< Muon::IMuonIdHelperSvc >
Muon::NSWCalibTool::m_fieldCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
Definition: NSWCalibTool.h:70