Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JPrintDynamics.cc File Reference

Example program to print dynamic detector calibration. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDynamics/JDynamics.hh"
#include "JTools/JQuantile.hh"
#include "JAcoustics/JEvt.hh"
#include "JAcoustics/JSupport.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JMeta.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to print dynamic detector calibration.

Author
mdejong

Definition in file JPrintDynamics.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 29 of file JPrintDynamics.cc.

30{
31 using namespace std;
32 using namespace JPP;
33
34 const char* const short_t = "short";
35 const char* const long_t = "long";
36 const char* const fft_t = "fft";
37
39 string detectorFile;
40 string outputFile;
41 string format;
42 double Tmax_s;
43 int debug;
44
45 try {
46
47 JParser<> zap("Example program to print dynamic detector calibration.");
48
49 zap['a'] = make_field(detectorFile);
50 zap['+'] = make_field(calibrationFile);
51 zap['o'] = make_field(outputFile) = "";
52 zap['F'] = make_field(format) = short_t, long_t, fft_t;
53 zap['T'] = make_field(Tmax_s) = 1000.0;
54 zap['d'] = make_field(debug) = 1;
55
56 zap(argc, argv);
57 }
58 catch(const exception &error) {
59 FATAL(error.what() << endl);
60 }
61
62
64
65 try {
66 load(detectorFile, detector);
67 }
68 catch(const JException& error) {
69 FATAL(error);
70 }
71
72 JDynamics dynamics(detector, 0.0);
73
74 dynamics.load(calibrationFile);
75
76 filebuf buffer;
77
78 if (outputFile != "") {
79 buffer.open(outputFile.c_str(), ios::out);
80 }
81
82 ostream os(buffer.is_open() ? &buffer : cout.rdbuf());
83
84 JComment comment;
85
86 comment.add("documentation: https://common.pages.km3net.de/jpp/Position_calibration.PDF");
87
88 if (format == short_t)
89 comment.add("format: string number; UTC [s]; Tx; Ty");
90 else if (format == long_t)
91 comment.add("format: https://indico.cern.ch/event/1014814/contributions/4259426/attachments/2201529/3724129/KM3NeT_position_file_format.pdf");
92 else if (format == fft_t)
93 comment.add("format: <T>");
94
95 DEBUG(comment);
96
97 comment.add(JMeta(argc, argv));
98 /*
99 for (JMultipleFileScanner<JMeta> in(calibrationFile); in.hasNext(); ) {
100 comment.add(*in.next());
101 }
102 */
103
104 if (format == short_t) {
105
106 os << comment;
107 os << setw(4) << detector.getID() << ' ' << detector.getUTMGrid() << ' ' << detector.getUTMPosition() << endl;
108
109 for (JDynamics::JPosition::const_iterator string = dynamics.position.begin(); string != dynamics.position.end(); ++string) {
110 for (typename JDynamics::JPosition::function_type::const_iterator i = string->second.begin(); i != string->second.end(); ++i) {
111 os << setw(4) << string->first << ';'
112 << FIXED(20,5) << i->getX() << ';'
113 << FIXED( 9,6) << i->getY().tx << ';'
114 << FIXED( 9,6) << i->getY().ty << endl;
115 }
116 }
117 }
118
119 if (format == long_t) {
120
121 os << comment;
122 os << setw(4) << detector.getID() << ' ' << detector.getUTMGrid() << ' ' << detector.getUTMPosition() << endl;
123
124 for (typename JDynamics::JPosition::function_type::const_iterator i = dynamics.position.begin()->second.begin(); i != dynamics.position.begin()->second.end(); ++i) {
125
126 const double t1 = i->getX();
127
128 dynamics.update(t1);
129
130 os << FIXED(20,5) << t1 << ' '
131 << FIXED(20,5) << t1 << ' '
132 << setw(4) << detector.size() << endl;
133
134 for (JDetector::const_iterator module = dynamics.begin(); module != dynamics.end(); ++module) {
135
136 os << setw(4) << module->getString() << ' '
137 << setw(2) << module->getFloor() << ' '
138 << setw(10) << module->getID() << endl;
139
140 os << FIXED(9,2) << module->getX() << ' '
141 << FIXED(9,2) << module->getY() << ' '
142 << FIXED(9,2) << module->getZ() << ' '
143 << FIXED(9,2) << -1.0 << ' '
144 << FIXED(9,2) << -1.0 << ' '
145 << FIXED(9,2) << -1.0 << endl;
146 }
147 }
148 }
149
150 if (format == fft_t) {
151
152 double xmin = numeric_limits<double>::max();
153 double xmax = numeric_limits<double>::lowest();
154
155 for (JDynamics::JPosition::const_iterator string = dynamics.position.begin(); string != dynamics.position.end(); ++string) {
156 if (!string->second.empty()) {
157 xmin = min(xmin, string->second.getXmin());
158 xmax = max(xmax, string->second.getXmax());
159 }
160 }
161
162 for (double x = xmin; x <= xmax; x += Tmax_s) {
163
164 JQuantile Q;
165
166 for (JDynamics::JPosition::const_iterator string = dynamics.position.begin(); string != dynamics.position.end(); ++string) {
167 if (!string->second.empty()) {
168 Q.put(string->second(x).getLength());
169 }
170 }
171
172 os << FIXED(9,5) << Q.getMean() << endl;
173 }
174 }
175
176 buffer.close();
177}
string outputFile
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Detector data structure.
Definition JDetector.hh:96
General exception.
Definition JException.hh:24
Utility class to parse command line options.
Definition JParser.hh:1698
General purpose class for object reading from a list of file names.
collection_type::const_iterator const_iterator
Definition JPolfit.hh:184
const double xmax
const double xmin
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
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
Detector file.
Definition JHead.hh:227
data_type::const_iterator const_iterator
Definition JDynamics.hh:328
Dynamic detector calibration.
Definition JDynamics.hh:86
Auxiliary class for comment.
Definition JComment.hh:43
JComment & add(const std::string &comment)
Add comment.
Definition JComment.hh:100
Auxiliary class for ROOT I/O of application specific meta data.
Definition JMeta.hh:72
Auxiliary data structure for running average, standard deviation and quantiles.
Definition JQuantile.hh:46
void put(const double x, const double w=1.0)
Put value.
Definition JQuantile.hh:133
double getMean() const
Get mean value.
Definition JQuantile.hh:252