Jpp  pmt_effective_area_update_2
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 "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 117 of file JHydrophone.cc.

118 {
119  using namespace std;
120  using namespace JPP;
121 
122  typedef JContainer< vector<JTripod> > tripods_container;
123  typedef JContainer< vector<JHydrophone> > hydrophones_container;
124 
126  JMultipleFileScanner<JToAshort> toashortFile;
127  string detectorFile;
128  JLimit_t& numberOfEvents = inputFile.getLimit();
129  string outputFile;
130  JSoundVelocity V = getSoundVelocity; // default sound velocity
131  tripods_container tripods; // tripods
132  hydrophones_container hydrophones; // hydrophones
133  double Q;
134  int debug;
135 
136  try {
137 
138  JParser<> zap("Example program to plot hydrophone data.");
139 
140  zap['f'] = make_field(inputFile);
141  zap['n'] = make_field(numberOfEvents) = JLimit::max();
142  zap['i'] = make_field(toashortFile);
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  map<int, vector<double> > buffer; // emitter identifier -> times-of-emission
194 
195  while (inputFile.hasNext()) {
196 
197  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
198 
199  const JEvent* evt = inputFile.next();
200 
201  if (!evt->empty()) {
202  buffer[evt->getID()].push_back((*evt)[0].getToE());
203  }
204  }
205  STATUS(endl);
206 
207 
208  const JRange<double> T0(-0.05, +0.05);
209  const JRange<double> T1(-0.01, +0.01);
210 
211  TH1D h0(MAKE_CSTRING("Q0 " << T0), NULL, 100, 0.0, 8.0);
212  TH1D h1(MAKE_CSTRING("Q1 " << T1), NULL, 100, 0.0, 8.0);
213 
214  JManager<key_type, TH1D> H1(new TH1D("[%]", NULL, 50000, -5.0e-2, +5.0e-2));
215 
216  for (int counter = 0; toashortFile.hasNext(); ++counter) {
217 
218  if (counter%1000 == 0) {
219  STATUS("counter: " << setw(8) << counter << '\r' << flush); DEBUG(endl);
220  }
221 
222  const JToAshort* parameters = toashortFile.next();
223 
224  const int id = getEmitterID(parameters->EMITTERID);
225 
226  if (parameters->QUALITYFACTOR >= Q) {
227 
228  if (emitters.has(id) && receivers.has(parameters->DOMID) && !buffer[id].empty()) {
229 
230  const JTransceiver transceiver(emitters[id], receivers[parameters->DOMID]);
231 
232  const JTransmission transmission = transceiver.getTransmission(*parameters, V);
233 
234  double t1 = numeric_limits<double>::max();
235  double w1 = 1.0 / (double) buffer[id].size();
236 
237  for (vector<double>::const_iterator i = buffer[id].begin(); i != buffer[id].end(); ++i) {
238 
239  const double ti = transmission.getToE() - *i;
240 
241  if (fabs(ti) < fabs(t1)) {
242  t1 = ti;
243  }
244  }
245 
246  H1[key_type(parameters->DOMID, id)]->Fill(t1); //, w1);
247 
248  H1->Fill(t1);
249 
250  const double Q = log10(transmission.getQ());
251 
252  if (T0(t1)) { h0.Fill(Q); }
253  if (T1(t1)) { h1.Fill(Q); }
254  }
255  }
256  }
257  STATUS(endl);
258 
259  TFile out(outputFile.c_str(), "recreate");
260 
261  out << h0 << h1 << H1;
262 
263  out.Write();
264  out.Close();
265 }
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
double getQ() const
Get quality.
General purpose class for hash map of unique keys.
Definition: JHashMap.hh:72
do rm f tmp H1
#define STATUS(A)
Definition: JMessage.hh:63
Detector data structure.
Definition: JDetector.hh:81
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
#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
string outputFile
double getToE() const
Get estimated time of emission.
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.
Acoustic transmission.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
Definition: JManager.hh:43
Detector file.
Definition: JHead.hh:196
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
Acoustic transceiver.
Definition: JTransceiver.hh:29
int debug
debug level
Definition: JSirene.cc:63
Implementation for velocity of sound.
#define FATAL(A)
Definition: JMessage.hh:67
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.
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.
int EMITTERID
waveform identifier
Definition: JToAshort.hh:27