Jpp  16.0.0-rc.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JHydrophone.cc File Reference

Example program to plot hydrophone data. More...

#include <iostream>
#include <iomanip>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "JDB/JToAshort.hh"
#include "JDB/JSupport.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JTripod.hh"
#include "JDetector/JHydrophone.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JTreeScanner.hh"
#include "JTools/JHashMap.hh"
#include "JTools/JRange.hh"
#include "JLang/JComparator.hh"
#include "JLang/JComparison.hh"
#include "JROOT/JManager.hh"
#include "JROOT/JRootToolkit.hh"
#include "JAcoustics/JEmitterID.hh"
#include "JAcoustics/JSoundVelocity.hh"
#include "JAcoustics/JEmitter.hh"
#include "JAcoustics/JReceiver.hh"
#include "JAcoustics/JTransceiver.hh"
#include "JAcoustics/JAcousticsToolkit.hh"
#include "JAcoustics/JAcousticsSupportkit.hh"
#include "JAcoustics/JHit.hh"
#include "JAcoustics/JEvent.hh"
#include "JAcoustics/JSupport.hh"
#include "Jeep/JContainer.hh"
#include "Jeep/JPrint.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 plot hydrophone data.

Author
mdejong

Definition in file JHydrophone.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 119 of file JHydrophone.cc.

120 {
121  using namespace std;
122  using namespace JPP;
123 
124  typedef JContainer< vector<JTripod> > tripods_container;
125  typedef JContainer< vector<JHydrophone> > hydrophones_container;
126 
128  string detectorFile;
129  JLimit_t& numberOfEvents = inputFile.getLimit();
130  string outputFile;
131  JSoundVelocity V = getSoundVelocity; // default sound velocity
132  tripods_container tripods; // tripods
133  hydrophones_container hydrophones; // hydrophones
134  double Q;
135  int debug;
136 
137  try {
138 
139  JParser<> zap("Example program to plot hydrophone data.");
140 
141  zap['f'] = make_field(inputFile);
142  zap['n'] = make_field(numberOfEvents) = JLimit::max();
143  zap['o'] = make_field(outputFile) = "hydrophone.root";
144  zap['a'] = make_field(detectorFile);
145  zap['V'] = make_field(V, "sound velocity") = JPARSER::initialised();
146  zap['T'] = make_field(tripods, "tripod data");
147  zap['H'] = make_field(hydrophones, "hydrophone data") = JPARSER::initialised();
148  zap['W'] = make_field(getEmitterID, "waveform identification data") = JPARSER::initialised();
149  zap['Q'] = make_field(Q, "quality") = 0.0;
150  zap['d'] = make_field(debug) = 2;
151 
152  zap(argc, argv);
153  }
154  catch(const exception &error) {
155  FATAL(error.what() << endl);
156  }
157 
158 
160 
161  try {
162  load(detectorFile, detector);
163  }
164  catch(const JException& error) {
165  FATAL(error);
166  }
167 
168  V.set(detector.getUTMZ());
169 
170  JHashMap<int, JReceiver> receivers;
171  JHashMap<int, JEmitter> emitters;
172 
173  for (hydrophones_container::const_iterator i = hydrophones.begin(); i != hydrophones.end(); ++i) {
174 
175  for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
176 
177  if (i->getLocation() == module->getLocation()) {
178 
179  receivers[module->getID()] = JReceiver(module->getID(),
180  module->getPosition() + i->getPosition(),
181  module->getT0() * 1.0e-9);
182  break;
183  }
184  }
185  }
186 
187  for (tripods_container::const_iterator i = tripods.begin(); i != tripods.end(); ++i) {
188  emitters[i->getID()] = JEmitter(i->getID(),
189  i->getUTMPosition() - detector.getUTMPosition());
190  }
191 
192 
193  const JRange<double> T0(-0.05, +0.05);
194  const JRange<double> T1(-0.01, +0.01);
195 
196  TH1D h0(MAKE_CSTRING("Q0 " << T0), NULL, 100, 0.0, 8.0);
197  TH1D h1(MAKE_CSTRING("Q1 " << T1), NULL, 100, 0.0, 8.0);
198 
199  JManager<key_type, TH1D> H1(new TH1D("[%]", NULL, 50000, -5.0e-2, +5.0e-2));
200 
201 
202  while (inputFile.hasNext()) {
203 
204  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
205 
206  const JEvent* evt = inputFile.next();
207 
208  if (!evt->empty() && emitters.has(evt->getID())) {
209 
211 
212  for (JEvent::const_iterator hit = evt->begin(); hit != evt->end(); ++hit) {
213  if (receivers.has(hit->getID())) {
214  buffer[hit->getID()].push_back(*hit);
215  }
216  }
217 
218  for (map<int, vector<JTransmission> >::iterator i = buffer.begin(); i != buffer.end(); ++i) {
219 
220  sort(i->second.begin(), i->second.end(), make_comparator(&JTransmission::getQ, JComparison::gt()));
221 
222  vector<JTransmission>::const_iterator hit = i->second.begin();
223 
224  if (hit->getQ() >= Q) {
225 
226  const JPosition3D& p1 = emitters [evt->getID()].getPosition();
227  const JPosition3D& p2 = receivers[hit->getID()].getPosition();
228 
229  const double D = p2.getDistance(p1);
230  const double Vi = V.getInverseVelocity(D, p1.getZ(), p2.getZ());
231 
232  const double t0 = evt->begin()->getToE() + D * Vi;
233  const double t1 = hit->getToA() - t0;
234 
235  H1[key_type(hit->getID(), evt->getID())]->Fill(t1);
236 
237  const double Q = log10(hit->getQ());
238 
239  if (T0(t1)) { h0.Fill(Q); }
240  if (T1(t1)) { h1.Fill(Q); }
241  }
242  }
243  }
244  }
245  STATUS(endl);
246 
247  TFile out(outputFile.c_str(), "recreate");
248 
249  out << h0 << h1 << H1;
250 
251  out.Write();
252  out.Close();
253 }
Utility class to parse command line options.
Definition: JParser.hh:1500
General exception.
Definition: JException.hh:23
Acoustic receiver.
Definition: JReceiver.hh:27
Q(UTCMax_s-UTCMin_s)-livetime_s
TPaveText * p1
Greater than.
Definition: JComparison.hh:73
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
Definition: JComparator.hh:185
General purpose class for hash map of unique keys.
Definition: JHashMap.hh:72
#define STATUS(A)
Definition: JMessage.hh:63
Detector data structure.
Definition: JDetector.hh:89
#define MAKE_CSTRING(A)
Make C-string.
Definition: JPrint.hh:151
then for HISTOGRAM in h0 h1
Definition: JMatrixNZ.sh:71
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:66
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
string outputFile
double getDistance(const JVector3D &pos) const
Get distance to point.
Definition: JVector3D.hh:270
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
static const JSoundVelocity getSoundVelocity(1541.0,-17.0e-3,-2000.0)
Function object for velocity of sound.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
Definition: JManager.hh:43
Detector file.
Definition: JHead.hh:224
Acoustic emitter.
Definition: JEmitter.hh:27
Auxiliary wrapper for I/O of container with optional comment (see JComment).
Definition: JContainer.hh:39
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
set_variable E_E log10(E_{fit}/E_{#mu})"
int debug
debug level
Definition: JSirene.cc:63
double getQ(const double D_m, const double f_kHz, const double d_m)
Get relative quality for given frequency at given distance.
Implementation for depth dependend velocity of sound.
#define FATAL(A)
Definition: JMessage.hh:67
p2
Definition: module-Z:fit.sh:74
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
General purpose class for object reading from a list of file names.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
Acoustic event.
Data structure for position in three dimensions.
Definition: JPosition3D.hh:36
const JLimit & getLimit() const
Get limit.
Definition: JLimit.hh:73
static JEmitterID getEmitterID
Function object for emitter identification.
Definition: JEmitterID.hh:119
do set_variable DETECTOR_TXT $WORKDIR detector
int getID() const
Get identifier.
then fatal Not enough tripods
do echo Generating $dir eval D
Definition: JDrawLED.sh:53
double getZ() const
Get z position.
Definition: JVector3D.hh:115