ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtEDistortionModel.h
Go to the documentation of this file.
1 #ifndef ATEDISTORTIONMODEL_H
2 #define ATEDISTORTIONMODEL_H
3 
4 #include "AtSpaceChargeModel.h"
5 
6 #include <Rtypes.h> // for Double_t
7 
8 #include <cstddef> // for size_t
9 #include <fstream> // for ifstream
10 #include <functional> // for hash
11 #include <memory> // for make_unique, unique_ptr
12 #include <string> // for string
13 #include <tuple> // for tuple
14 #include <unordered_map> // for unordered_map
15 
16 class AtDigiPar;
17 
18 struct EFieldCorr {
19  Double_t _zcorr;
20  Double_t _radcorr;
21  Double_t _tracorr;
22 };
23 
24 struct EFieldMapRef {
25  Int_t _rad{0};
26  Int_t _zpos{0};
27 };
28 
29 bool operator<(const EFieldMapRef &l, const EFieldMapRef &r);
30 bool operator==(const EFieldMapRef &l, const EFieldMapRef &r);
31 std::ostream &operator<<(std::ostream &os, const EFieldMapRef &t);
32 
33 namespace std {
34 template <>
35 struct hash<EFieldMapRef> {
36  inline size_t operator()(const EFieldMapRef &x) const { return x._rad + x._zpos * 10000; }
37 };
38 } // namespace std
39 
40 using eDistortionMap = std::unordered_map<EFieldMapRef, EFieldCorr>; // Global LUT
41 using BufferMap = std::unordered_map<EFieldMapRef, Double_t>;
42 
54 
55 private:
56  void SetBufferMap(std::ifstream &lut, BufferMap *map);
57  void SetGlobalMap(BufferMap *zmap, BufferMap *radmap, BufferMap *tramap);
58 
59  std::ifstream fZLUT{0};
60  std::ifstream fRadLUT{0};
61  std::ifstream fTraLUT{0};
62 
63  std::unique_ptr<eDistortionMap> fDistortionMap{std::make_unique<eDistortionMap>()};
64  std::unique_ptr<BufferMap> fZMap{std::make_unique<BufferMap>()};
65  std::unique_ptr<BufferMap> fRadMap{std::make_unique<BufferMap>()};
66  std::unique_ptr<BufferMap> fTraMap{std::make_unique<BufferMap>()};
67 
68 public:
70 
71  virtual XYZPoint CorrectSpaceCharge(const XYZPoint &directInputPosition) override;
72  virtual XYZPoint ApplySpaceCharge(const XYZPoint &reverseInputPosition) override;
73 
74  void LoadParameters(const AtDigiPar *par) override{};
75 
76  Bool_t SetCorrectionMaps(const std::string &zlut, const std::string &radlut,
77  const std::string &tralut);
78  std::tuple<Double_t, Double_t, Double_t> GetCorrectionFactors(const Int_t &radius, const Int_t &zpos);
79 };
80 #endif /* ATEDISTORTIONMODEL_H */
EFieldMapRef
Definition: AtEDistortionModel.h:24
eDistortionMap
std::unordered_map< EFieldMapRef, EFieldCorr > eDistortionMap
Definition: AtEDistortionModel.h:40
AtEDistortionModel::ApplySpaceCharge
virtual XYZPoint ApplySpaceCharge(const XYZPoint &reverseInputPosition) override
Using model add space charge effect.
Definition: AtEDistortionModel.cxx:65
EFieldMapRef::_rad
Int_t _rad
Definition: AtEDistortionModel.h:25
EFieldMapRef::_zpos
Int_t _zpos
radius integer value
Definition: AtEDistortionModel.h:26
operator<<
std::ostream & operator<<(std::ostream &os, const EFieldMapRef &t)
Definition: AtEDistortionModel.cxx:172
EFieldCorr::_zcorr
Double_t _zcorr
Definition: AtEDistortionModel.h:19
AtSpaceChargeModel::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtSpaceChargeModel.h:11
EFieldCorr::_radcorr
Double_t _radcorr
Definition: AtEDistortionModel.h:20
AtSpaceChargeModel.h
operator==
bool operator==(const EFieldMapRef &l, const EFieldMapRef &r)
Definition: AtEDistortionModel.cxx:183
operator<
bool operator<(const EFieldMapRef &l, const EFieldMapRef &r)
Definition: AtEDistortionModel.cxx:178
AtSpaceChargeModel
Definition: AtSpaceChargeModel.h:9
AtDigiPar
Definition: AtDigiPar.h:14
AtEDistortionModel
To parse individual LUT.
Definition: AtEDistortionModel.h:53
EFieldCorr
Definition: AtEDistortionModel.h:18
AtEDistortionModel::SetCorrectionMaps
Bool_t SetCorrectionMaps(const std::string &zlut, const std::string &radlut, const std::string &tralut)
Definition: AtEDistortionModel.cxx:71
BufferMap
std::unordered_map< EFieldMapRef, Double_t > BufferMap
Definition: AtEDistortionModel.h:41
AtEDistortionModel::LoadParameters
void LoadParameters(const AtDigiPar *par) override
Load common parameters from AtDigiPar.
Definition: AtEDistortionModel.h:74
std::hash< EFieldMapRef >::operator()
size_t operator()(const EFieldMapRef &x) const
Definition: AtEDistortionModel.h:36
AtEDistortionModel::AtEDistortionModel
AtEDistortionModel()
Definition: AtEDistortionModel.cxx:25
AtEDistortionModel::GetCorrectionFactors
std::tuple< Double_t, Double_t, Double_t > GetCorrectionFactors(const Int_t &radius, const Int_t &zpos)
Set the mapping files via file path.
Definition: AtEDistortionModel.cxx:100
AtEDistortionModel::CorrectSpaceCharge
virtual XYZPoint CorrectSpaceCharge(const XYZPoint &directInputPosition) override
Using model correct for space charge.
Definition: AtEDistortionModel.cxx:27
EFieldCorr::_tracorr
Double_t _tracorr
Definition: AtEDistortionModel.h:21