129 JLimit_t& numberOfEvents = inputFile.getLimit();
140 JParser<> zap(
"Example program to plot hydrophone data.");
143 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
147 zap[
'T'] =
make_field(tripods,
"tripod data");
156 catch(
const exception &error) {
157 FATAL(error.what() << endl);
175 for (hydrophones_container::const_iterator i = hydrophones.begin(); i != hydrophones.end(); ++i) {
177 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
179 if (i->getLocation() == module->getLocation()) {
181 receivers[module->getID()] =
JReceiver(module->getID(),
182 module->getPosition() + i->getPosition(),
183 module->getT0() * 1.0e-9);
189 for (tripods_container::const_iterator i = tripods.begin(); i != tripods.end(); ++i) {
190 emitters[i->getID()] =
JEmitter(i->getID(),
191 i->getUTMPosition() -
detector.getUTMPosition());
194 for (transmitters_container::const_iterator i = transmitters.begin(); i != transmitters.end(); ++i) {
196 emitters[i->getID()] =
JEmitter(i->getID(),
197 i->getPosition() +
detector.getModule(i->getLocation()).getPosition());
199 catch(
const exception&) {
208 TH1D h0(
MAKE_CSTRING(
"Q0 " << T0), NULL, 100, 0.0, 8.0);
209 TH1D h1(
MAKE_CSTRING(
"Q1 " << T1), NULL, 100, 0.0, 8.0);
220 if (!evt->empty() && emitters.
has(evt->
getID())) {
224 for (JEvent::const_iterator hit = evt->begin(); hit != evt->end(); ++hit) {
225 if (receivers.
has(hit->getID())) {
226 buffer[hit->getID()].push_back(*hit);
236 if (hit->getQ() >= Q) {
239 const JPosition3D& p2 = receivers[hit->getID()].getPosition();
244 const double t0 = evt->begin()->getToE() + D * Vi;
245 const double t1 = hit->getToA() - t0;
247 H1[key_type(hit->getID(), evt->
getID())]->Fill(t1);
249 const double Q = log10(hit->getQ());
251 if (T0(t1)) { h0.Fill(Q); }
252 if (T1(t1)) { h1.Fill(Q); }
261 out << h0 << h1 << H1;
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Data structure for position in three dimensions.
double getDistance(const JVector3D &pos) const
Get distance to point.
double getZ() const
Get z position.
Utility class to parse command line options.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
General purpose class for object reading from a list of file names.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
virtual const pointer_type & next() override
Get next element.
static JEmitterID getEmitterID
Function object for emitter identification.
JContainer< std::vector< JTripod > > tripods_container
JContainer< std::vector< JTransmitter > > transmitters_container
JContainer< std::vector< JHydrophone > > hydrophones_container
double getQ(const double D_m, const double f_kHz, const double d_m)
Get relative quality for given frequency at given distance.
static const JSoundVelocity getSoundVelocity(1541.0, -17.0e-3, -2000.0)
Function object for velocity of sound.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
int getID() const
Get emitter identifier.
Implementation for depth dependend velocity of sound.
JSoundVelocity & set(const double z0)
Set depth.
virtual double getInverseVelocity(const double D_m, const double z1, const double z2) const override
Get inverse velocity of sound.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary class for defining the range of iterations of objects.