43{
46
48 JLimit_t& numberOfEvents = inputFile.getLimit();
50 string detectorFile;
51 double Tmax_s;
52 string ahrsFile;
55
56 try {
57
58 JParser<> zap(
"Example program to monitor AHRS data.");
59
66 zap[
'c'] =
make_field(ahrsFile,
"output of JAHRSCalibration");
68
69
70 zap(argc, argv);
71 }
72 catch(const exception &error) {
73 FATAL(error.what() << endl);
74 }
75
77
78 try {
80 }
83 }
84
86
89
92
94
95 for (
int counter = 0; inputFile.
hasNext(); ++counter) {
96
97 STATUS(
"counter: " << setw(8) << counter <<
'\r' << flush);
DEBUG(endl);
98
99 const JAHRS* parameters = inputFile.
next();
100
102
104
106 data[parameters->
DOMID].push_back(*parameters);
107 }
108 }
109 }
110
112
114
115 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
116 if (frange(module->getFloor())) {
117
118 const JModule buffer = demo.
getModule(module->getID(), module->getLocation());
119
121
123
124 const double phi = (
JVector3Z_t.
getDot(q1.twist) >= 0.0 ? +1.0 : -1.0) * q1.twist.getAngle();
125
126 DOM_heading_map[module->getID()] = phi;
127 cout << "Heading from detector file: " << module->getID() << " " << module->getString() << " " << module->getFloor() << " " << phi/M_PI*180. << " [deg]" << endl;
128 }
129 }
130
132
133
138
139 JGraph_t PD_all;
140
141 for (map_type::iterator module =
data.begin(); module !=
data.end(); ++module) {
142
143 if (!module->second.empty()) {
144 const JLocation location = router.getModule(module->first);
145
147
148 for (buffer_type::const_iterator p = module->second.begin(); p != module->second.end(); ) {
149
151
152 buffer_type::const_iterator q = p;
154
155 for ( ; q != module->second.end() && q->UNIXTIME - p->UNIXTIME <= Tmax_s * 1.0e3; ++q) {
157 }
158
161 JDirection3D d(cos(DOM_heading_map[module->first]),sin(DOM_heading_map[module->first]),0);
162
163 u.rotate(Q);
165 d.rotate_back(Q);
166
167 const double t1 = p->UNIXTIME * 1.0e-3 + 0.5*Tmax_s;
168
169 ZO[module->first].put(t1, atan2(u.getDY(), u.getDX()));
170 ZA[module->first].put(t1, sqrt(u.getDX()*u.getDX() + u.getDY()* u.getDY()));
171 PD[module->first].put(t1, atan2(d.getDY(), d.getDX()));
172 PD_all.put(location.
getString(), atan2(d.getDY(), d.getDX()));
173 XO[module->first].put(t1, atan2(
x.getDY(),
x.getDX()));
174
175 p = q;
176 }
177 }
178 }
179
180
182
184 const JLocation location = router.getModule(i->first);
186 }
187
189 const JLocation location = router.getModule(i->first);
191 }
192
194 const JLocation location = router.getModule(i->first);
196 }
197
199 const JLocation location = router.getModule(i->first);
201 }
202
203 out <<
JGraph(PD_all,
"all_off");
204
205
206 out.Write();
207 out.Close();
208}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Data structure for compass in three dimensions.
JQuaternion3D getQuaternion() const
Get quaternion.
Logical location of module.
int getFloor() const
Get floor number.
int getString() const
Get string number.
Router for direct addressing of module data in detector data structure.
Data structure for a composite optical module.
Data structure for direction in three dimensions.
Data structure for unit quaternion in three dimensions.
double getDot(const JVector3D &vector) const
Get dot product.
Utility class to parse command line options.
General purpose class for object reading from a list of file names.
virtual bool hasNext() override
Check availability of next element.
virtual const pointer_type & next() override
Get next element.
static JRotation getRotation
Function object to get rotation matrix to go from first to second module.
JDetectorBuilder & getDetectorBuilder()
Get detector builder.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
static const JVector3D JVector3Z_t(0, 0, 1)
unit z-vector
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::vector< JHitW0 > buffer_type
hits
bool is_valid(const json &js)
Check validity of JSon data.
std::map< int, range_type > map_type
Auxiliary class to map module identifier to AHRS calibration.
Auxiliary data structure to check validity of AHRS data.
long long int UNIXTIME
[ms]
Auxiliary interface for building detector.
const JModule & getModule(const int id=-1, const JLocation &location=JLocation()) const
Get module.
Auxiliary data structure for decomposition of quaternion in twist and swing quaternions.
Auxiliary class to determine average of set of values.
void put(const JValue_t &value, const double w=1.0)
Put value.
Auxiliary data structure to build TGraph.
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.