Jpp  test_elongated_shower_pde
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 }
JDetector detector
Definition: JRunAnalyzer.hh:23
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:68
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
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