Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JAHRSCalibrationToolkit.hh
Go to the documentation of this file.
1#ifndef __JDB_JAHRSCALIBRATIONTOOLKIT__
2#define __JDB_JAHRSCALIBRATIONTOOLKIT__
3
5
6#include "JTools/JRange.hh"
8#include "JLang/JManip.hh"
9
10/**
11 * \author mdejong
12 */
13namespace JDATABASE {}
14namespace JPP { using namespace JDATABASE; }
15
16namespace JDATABASE {
17
18
19 /**
20 * Read AHRS calibration from input stream.
21 *
22 * \param in input stream
23 * \param calibration AHRS calibration
24 * \return input stream
25 */
26 inline std::istream& operator>>(std::istream& in, JAHRSCalibration& calibration)
27 {
28 using namespace std;
29 using namespace JPP;
30
31 in >> calibration.ACC_OFFSET_X
32 >> calibration.ACC_OFFSET_Y
33 >> calibration.ACC_OFFSET_Z;
34
35 in >> calibration.ACC_ROT_XX >> calibration.ACC_ROT_XY >> calibration.ACC_ROT_XZ;
36 in >> calibration.ACC_ROT_YX >> calibration.ACC_ROT_YY >> calibration.ACC_ROT_YZ;
37 in >> calibration.ACC_ROT_ZX >> calibration.ACC_ROT_ZY >> calibration.ACC_ROT_ZZ;
38
39 in >> calibration.MAG_XMIN
40 >> calibration.MAG_YMIN
41 >> calibration.MAG_ZMIN;
42
43 in >> calibration.MAG_XMAX
44 >> calibration.MAG_YMAX
45 >> calibration.MAG_ZMAX;
46
47 in >> calibration.MAG_ROT_XX >> calibration.MAG_ROT_XY >> calibration.MAG_ROT_XZ;
48 in >> calibration.MAG_ROT_YX >> calibration.MAG_ROT_YY >> calibration.MAG_ROT_YZ;
49 in >> calibration.MAG_ROT_ZX >> calibration.MAG_ROT_ZY >> calibration.MAG_ROT_ZZ;
50
51 return in;
52 }
53
54
55 /**
56 * Write AHRS calibration to output stream.
57 *
58 * \param out output stream
59 * \param calibration AHRS calibration
60 * \return output stream
61 */
62 inline std::ostream& operator<<(std::ostream& out, const JAHRSCalibration& calibration)
63 {
64 using namespace std;
65 using namespace JPP;
66
67 out << FIXED(9,6) << calibration.ACC_OFFSET_X << ' '
68 << FIXED(9,6) << calibration.ACC_OFFSET_Y << ' '
69 << FIXED(9,6) << calibration.ACC_OFFSET_Z << ' ';
70
71 out << FIXED(9,6) << calibration.ACC_ROT_XX << ' ' << FIXED(9,6) << calibration.ACC_ROT_XY << ' ' << FIXED(9,6) << calibration.ACC_ROT_XZ << ' ';
72 out << FIXED(9,6) << calibration.ACC_ROT_YX << ' ' << FIXED(9,6) << calibration.ACC_ROT_YY << ' ' << FIXED(9,6) << calibration.ACC_ROT_YZ << ' ';
73 out << FIXED(9,6) << calibration.ACC_ROT_ZX << ' ' << FIXED(9,6) << calibration.ACC_ROT_ZY << ' ' << FIXED(9,6) << calibration.ACC_ROT_ZZ << ' ';
74
75 out << FIXED(9,6) << calibration.MAG_XMIN << ' '
76 << FIXED(9,6) << calibration.MAG_YMIN << ' '
77 << FIXED(9,6) << calibration.MAG_ZMIN << ' ';
78
79 out << FIXED(9,6) << calibration.MAG_XMAX << ' '
80 << FIXED(9,6) << calibration.MAG_YMAX << ' '
81 << FIXED(9,6) << calibration.MAG_ZMAX << ' ';
82
83 out << FIXED(9,6) << calibration.MAG_ROT_XX << ' ' << FIXED(9,6) << calibration.MAG_ROT_XY << ' ' << FIXED(9,6) << calibration.MAG_ROT_XZ << ' ';
84 out << FIXED(9,6) << calibration.MAG_ROT_YX << ' ' << FIXED(9,6) << calibration.MAG_ROT_YY << ' ' << FIXED(9,6) << calibration.MAG_ROT_YZ << ' ';
85 out << FIXED(9,6) << calibration.MAG_ROT_ZX << ' ' << FIXED(9,6) << calibration.MAG_ROT_ZY << ' ' << FIXED(9,6) << calibration.MAG_ROT_ZZ << ' ';
86
87 return out;
88 }
89
90
91 /**
92 * Get numerical value of AHRS calibration version.
93 *
94 * \param version version
95 * \return version
96 */
97 inline int getVersion(const std::string& version)
98 {
99 using namespace std;
100 using namespace JPP;
101
102 size_t pos = version.find_last_of("vV");
103
104 if (pos != string::npos)
105 return to_value<int>(version.substr(pos+1));
106 else
107 return -1;
108 }
109
110
111 /**
112 * Auxiliary data structure to check validity of AHRS calibration data.
113 */
115
117
118 /**
119 * Default constructor.
120 *
121 * This constructor sets default ranges of acceptance of AHRS calibration values.
122 */
124 {
125 ACC_OFFSET_X = range_type(-1.0, +1.0);
126 ACC_OFFSET_Y = range_type(-1.0, +1.0);
127 ACC_OFFSET_Z = range_type(-1.0, +1.0);
128
129 ACC_ROT[0][0] = range_type(-1.8, +1.8); ACC_ROT[0][1] = range_type(-1.0, +1.0); ACC_ROT[0][2] = range_type(-1.0, +1.0);
130 ACC_ROT[1][0] = range_type(-1.0, +1.0); ACC_ROT[1][1] = range_type(+0.6, +1.8); ACC_ROT[1][2] = range_type(-1.0, +1.0);
131 ACC_ROT[2][0] = range_type(-1.0, +1.0); ACC_ROT[2][1] = range_type(-1.0, +1.0); ACC_ROT[2][2] = range_type(+0.6, +1.8);
132
133 MAG_OFFSET_X = range_type(-1.0, +1.0);
134 MAG_OFFSET_Y = range_type(-1.0, +1.0);
135 MAG_OFFSET_Z = range_type(-1.0, +1.0);
136
137 MAG_ROT[0][0] = range_type(-1.8, +1.8); MAG_ROT[0][1] = range_type(-1.0, +1.0); MAG_ROT[0][2] = range_type(-1.0, +1.0);
138 MAG_ROT[1][0] = range_type(-1.0, +1.0); MAG_ROT[1][1] = range_type(+0.6, +1.8); MAG_ROT[1][2] = range_type(-1.0, +1.0);
139 MAG_ROT[2][0] = range_type(-1.0, +1.0); MAG_ROT[2][1] = range_type(-1.0, +1.0); MAG_ROT[2][2] = range_type(+0.6, +1.8);
140 }
141
142
143 /**
144 * Check validity of AHRS calibration data.
145 *
146 * \param calibration AHRS calibration
147 * \return true if valid; else false
148 */
150 {
151 return (ACC_OFFSET_X(calibration.ACC_OFFSET_X) &&
152 ACC_OFFSET_Y(calibration.ACC_OFFSET_Y) &&
153 ACC_OFFSET_Z(calibration.ACC_OFFSET_Z) &&
154
155 ACC_ROT[0][0](calibration.ACC_ROT_XX) && ACC_ROT[0][1](calibration.ACC_ROT_XY) && ACC_ROT[0][2](calibration.ACC_ROT_XZ) &&
156 ACC_ROT[1][0](calibration.ACC_ROT_YX) && ACC_ROT[1][1](calibration.ACC_ROT_YY) && ACC_ROT[1][2](calibration.ACC_ROT_YZ) &&
157 ACC_ROT[2][0](calibration.ACC_ROT_ZX) && ACC_ROT[2][1](calibration.ACC_ROT_ZY) && ACC_ROT[2][2](calibration.ACC_ROT_ZZ) &&
158
159 MAG_OFFSET_X(0.5 * (calibration.MAG_XMIN + calibration.MAG_XMAX)) &&
160 MAG_OFFSET_Y(0.5 * (calibration.MAG_YMIN + calibration.MAG_YMAX)) &&
161 MAG_OFFSET_Z(0.5 * (calibration.MAG_ZMIN + calibration.MAG_ZMAX)) &&
162
163 MAG_ROT[0][0](calibration.MAG_ROT_XX) && MAG_ROT[0][1](calibration.MAG_ROT_XY) && MAG_ROT[0][2](calibration.MAG_ROT_XZ) &&
164 MAG_ROT[1][0](calibration.MAG_ROT_YX) && MAG_ROT[1][1](calibration.MAG_ROT_YY) && MAG_ROT[1][2](calibration.MAG_ROT_YZ) &&
165 MAG_ROT[2][0](calibration.MAG_ROT_ZX) && MAG_ROT[2][1](calibration.MAG_ROT_ZY) && MAG_ROT[2][2](calibration.MAG_ROT_ZZ));
166 }
167
168
172
174
178
180 };
181
182
183 /**
184 * Auxiliary data structure for sorting of AHRS calibrations.
185 */
187 /**
188 * Comparison of operation identifiers.
189 *
190 * \param first first operation identifiers
191 * \param second second operation identifiers
192 * \return true if first calibration better than second; else false
193 */
194 inline bool operator()(const std::string& first,
195 const std::string& second) const
196 {
197 using namespace std;
198 using namespace JPP;
199
200 if (!first.empty() && !second.empty()) {
201
202 if (first[0] == second[0])
203 return to_value<int>(first.substr(1)) > to_value<int>(second.substr(1));
204 else
205 return first[0] > second[0];
206
207 } else {
208
209 return first > second;
210 }
211 }
212
213
214 /**
215 * Comparison of AHRS calibrations.
216 *
217 * \param first first AHRS calibration
218 * \param second second AHRS calibration
219 * \return true if first AHRS calibration better than second; else false
220 */
221 inline bool operator()(const JAHRSCalibration& first,
222 const JAHRSCalibration& second) const
223 {
224 if (first.SERIALNUMBER == second.SERIALNUMBER) {
225
226 if (first.TESTEND == second.TESTEND) {
227
228 if (getVersion(first.TESTNAME) == getVersion(second.TESTNAME))
229 return (*this)(first.TESTOPID, second.TESTOPID);
230 else
231 return getVersion(first.TESTNAME) > getVersion(second.TESTNAME);
232
233 } else {
234
235 return first.TESTEND > second.TESTEND;
236 }
237
238 } else {
239
240 return first.SERIALNUMBER > second.SERIALNUMBER;
241 }
242 }
243 };
244}
245
246#endif
I/O manipulators.
Auxiliary class to define a range between two values.
Range of values.
Definition JRange.hh:42
Auxiliary classes and methods for database I/O.
Definition JAHRS.hh:14
int getVersion(const std::string &version)
Get numerical value of AHRS calibration version.
std::istream & operator>>(std::istream &in, JAHRSCalibration &calibration)
Read AHRS calibration from input stream.
std::ostream & operator<<(std::ostream &out, const JAHRSCalibration &calibration)
Write AHRS calibration to output stream.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
Calibration.
Definition JHead.hh:330
Auxiliary data structure for sorting of AHRS calibrations.
bool operator()(const JAHRSCalibration &first, const JAHRSCalibration &second) const
Comparison of AHRS calibrations.
bool operator()(const std::string &first, const std::string &second) const
Comparison of operation identifiers.
Auxiliary data structure to check validity of AHRS calibration data.
bool operator()(const JAHRSCalibration &calibration) const
Check validity of AHRS calibration data.