Jpp  19.1.0
the software that should make you happy
Functions
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:69
#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
Definition: JQuadrature.cc:24
const double xmin
Definition: JQuadrature.cc:23
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).
Definition: JSTDTypes.hh:14
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:326
Dynamic detector calibration.
Definition: JDynamics.hh:84
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