Jpp 20.0.0-rc.9-29-gccc23c492-D
the software that should make you happy
Loading...
Searching...
No Matches
JPlatypus.cc
Go to the documentation of this file.
1#include <string>
2#include <iostream>
3#include <iomanip>
4#include <vector>
5#include <set>
6#include <map>
7#include <deque>
8#include <algorithm>
9#include <limits>
10
11#include <type_traits>
12#include <functional>
13#include <future>
14#include <mutex>
15#include <thread>
16#include <vector>
17#include <queue>
18
19#include "TROOT.h"
20#include "TFile.h"
21
22#include "JLang/JPredicate.hh"
23#include "JLang/JComparator.hh"
24#include "JLang/JComparison.hh"
25#include "JLang/JFileStream.hh"
26
27#include "JDetector/JDetector.hh"
28#include "JDetector/JDetectorToolkit.hh"
29#include "JDetector/JTripod.hh"
30#include "JDetector/JTransmitter.hh"
31#include "JDetector/JModule.hh"
32#include "JDetector/JHydrophone.hh"
33
34#include "JTools/JHashMap.hh"
35#include "JTools/JRange.hh"
36#include "JTools/JQuantile.hh"
37
38#include "JSupport/JSingleFileScanner.hh"
39
43#include "JAcoustics/JHit.hh"
50
51#include "Jeep/JContainer.hh"
52#include "Jeep/JParser.hh"
53#include "Jeep/JMessage.hh"
54
55
56/**
57 * \file
58 *
59 * Application to make a global fit of the detector geometry to acoustic data.\n
60 * \author mdejong
61 */
62int main(int argc, char **argv)
63{
64 using namespace std;
65 using namespace JPP;
66
67 typedef JContainer< vector<JTripod> > tripods_container;
68 typedef JContainer< vector<JTransmitter> > transmitters_container;
69 typedef JContainer< vector<JHydrophone> > hydrophones_container;
70
71 JSingleFileScanner<JSuperEvt> inputFile;
72 string detectorFile;
73 JLimit_t& numberOfEvents = inputFile.getLimit();
74 JSoundVelocity V = getSoundVelocity; // default sound velocity
75 tripods_container tripods; // tripods
76 transmitters_container transmitters; // transmitters
77 hydrophones_container hydrophones; // hydrophones
78 JFitParameters parameters; // fit parameters
79 size_t threads; // number of parallel threads
80 int debug;
81
82 try {
83
84 JParser<> zap("Application to fit position calibration model to acoustic data.");
85
86 zap['f'] = make_field(inputFile, "output of JAcousticEventBuilder[.sh]");
87 zap['n'] = make_field(numberOfEvents) = JLimit::max();
88 zap['a'] = make_field(detectorFile);
89 zap['@'] = make_field(parameters) = JPARSER::initialised();
90 zap['V'] = make_field(V, "sound velocity") = JPARSER::initialised();
91 zap['T'] = make_field(tripods, "tripod data");
92 zap['Y'] = make_field(transmitters, "transmitter data") = JPARSER::initialised();
93 zap['H'] = make_field(hydrophones, "hydrophone data") = JPARSER::initialised();
94 zap['M'] = make_field(getMechanics, "mechanics data") = JPARSER::initialised();
95 zap['N'] = make_field(threads, "number of threads") = 1;
96 zap['d'] = make_field(debug) = 1;
97
98 zap(argc, argv);
99 }
100 catch(const exception &error) {
101 FATAL(error.what() << endl);
102 }
103
104 ROOT::EnableThreadSafety();
105
106 JDetector detector;
107
108 try {
109 load(detectorFile, detector);
110 }
111 catch(const JException& error) {
112 FATAL(error);
113 }
114
115 JHashMap<int, JEmitter> emitters;
116
117 for (tripods_container::const_iterator i = tripods.begin(); i != tripods.end(); ++i) {
118 {
119 emitters[i->getID()] = JEmitter(i->getID(),
120 i->getUTMPosition() - detector.getUTMPosition());
121 }
122 }
123
124 for (transmitters_container::const_iterator i = transmitters.begin(); i != transmitters.end(); ++i) {
125 try {
126 emitters[i->getID()] = JEmitter(i->getID(),
127 i->getPosition() + detector.getModule(i->getLocation()).getPosition());
128 }
129 catch(const exception&) {} // if no module available, discard transmitter
130 }
131
132 V.set(detector.getUTMZ()); // sound velocity at detector depth
133
134 JGeometry geometry(detector, hydrophones);
135
138
139 try {
140 JPlatypus platypus(geometry, emitters, V, parameters, inputFile, threads);
141 }
142 catch(const exception& error) {
143 FATAL("main " << error.what());
144 }
145
146 JFileOutputStream(3) << SCIENTIFIC(1,10) << JPlatypus::Q.getMean(numeric_limits<float>::max()) << endl;
147}
Acoustics toolkit.
Acoustic emitter.
Acoustic fit parameters.
Acoustic hit.
Fit functions of acoustic model.
int main(int argc, char **argv)
Definition JPlatypus.cc:62
Sound velocity.
Acoustic super event fit toolkit.
Acoustic event fit.
ROOT TTree parameter settings.
Thread pool for global fits using super events.
JContainer< std::vector< JTripod > > tripods_container
Definition JSydney.cc:79
JContainer< std::vector< JTransmitter > > transmitters_container
Definition JSydney.cc:81
JContainer< std::vector< JHydrophone > > hydrophones_container
Definition JSydney.cc:80
Acoustic emitter.
Definition JEmitter.hh:30
Template definition of fit function of acoustic model.
Implementation for depth dependend velocity of sound.
JSoundVelocity & set(const double z0)
Set depth.