3 #include <FairLogger.h>
5 #include <Math/Point2D.h>
6 #include <Math/Point2Dfwd.h>
7 #include <Math/Point3D.h>
8 #include <Math/Point3Dfwd.h>
9 #include <Math/Vector2D.h>
10 #include <Math/Vector2Dfwd.h>
11 #include <Math/Vector3D.h>
12 #include <Math/Vector3Dfwd.h>
30 if (fDistortionMap->size() == 0) {
31 LOG(error) <<
" Warning! Correction map is empty. No correction applied...";
35 LOG(debug) <<
" Input point : " << input.X() <<
" " << input.Y() <<
" " << input.Z();
37 Double_t inputRad = TMath::Sqrt(TMath::Power(input.X(), 2) + TMath::Power(input.Y(), 2));
38 Double_t inputAng = TMath::ATan2(input.Y(), input.X());
39 Double_t inputZ = input.Z();
44 inputZ = inputZ < 0 ? 0 : inputZ;
45 inputZ = inputZ > 1000 ? 1000 : inputZ;
49 Double_t outputRad = TMath::Sqrt(TMath::Power(inputRad + radcorr, 2) + TMath::Power(tracorr, 2));
50 Double_t outputAng = inputAng + TMath::ATan2(tracorr, inputRad + radcorr);
53 output.SetX(outputRad * TMath::Cos(outputAng));
54 output.SetY(outputRad * TMath::Sin(outputAng));
55 output.SetZ(input.Z() - zcorr);
60 LOG(debug) <<
" Output point : " << output.X() <<
" " << output.Y() <<
" " << output.Z();
74 fZLUT.open(zlut, std::ifstream::in);
75 fRadLUT.open(radlut, std::ifstream::in);
76 fTraLUT.open(tralut, std::ifstream::in);
78 if (!fZLUT.fail() && !fRadLUT.fail() && !fTraLUT.fail()) {
80 SetBufferMap(fZLUT, fZMap.get());
81 SetBufferMap(fRadLUT, fRadMap.get());
82 SetBufferMap(fTraLUT, fTraMap.get());
84 SetGlobalMap(fZMap.get(), fRadMap.get(), fTraMap.get());
90 std::cerr <<
" AtEDistortionModel::SetCorrectionMaps - Error! Missing LUT "
92 std::cerr << zlut <<
"\n";
93 std::cerr << radlut <<
"\n";
94 std::cerr << tralut <<
"\n";
99 std::tuple<Double_t, Double_t, Double_t>
103 if (fDistortionMap->size() == 0) {
105 return std::make_tuple(0, 0, 0);
109 if (fDistortionMap->find(ref) == fDistortionMap->end()) {
111 return std::make_tuple(0, 0, 0);
113 auto corr = fDistortionMap->at(ref);
114 return std::make_tuple(corr._zcorr, corr._radcorr, corr._tracorr);
118 void AtEDistortionModel::SetBufferMap(std::ifstream &lut,
BufferMap *map)
126 std::getline(lut, line,
'\r');
129 std::istringstream buffer(line);
136 while (buffer >> value) {
139 map->emplace(ref, value);
150 LOG(info) <<
" Z map size : " << zmap->size();
151 LOG(info) <<
" Rad map size : " << radmap->size();
152 LOG(info) <<
" Tra map size : " << tramap->size();
155 assert((zmap->size() == radmap->size()) && (radmap->size() == tramap->size()));
157 for (
const auto &[key, zcorr] : *zmap) {
158 auto radcorr = radmap->at(key);
159 auto tracorr = tramap->at(key);
161 fDistortionMap->emplace(key, corr);
162 LOG(debug) << key <<
" " << zcorr <<
" " << radcorr <<
" " << tracorr;
165 auto hashT = fDistortionMap->hash_function();
168 std::cout <<
" Global map size : " << fDistortionMap->size() <<
"\n";
169 std::cout <<
" Hash value for (200,200) : " << hashT(hashRef) <<
"\n";
174 os <<
" " << t.
_rad <<
" - " << t.
_zpos <<
" ";