95 public JClonable< JMatch<hit_type>, JMatch3D>
142 public JClonable< JMatch<hit_type>, JMatch1D>
153 JMatch1D(
const double V,
const double Rmax_m,
const double Zmax_m,
const double Tmax_s) :
186 return fabs(first.
getZ() - second.
getZ()) <= Zmax_m;
259 const double t0 =
root.getToA() *
V -
u->getLength();
263 for (T p = __begin; p != __end; ++p) {
267 if (fabs(t1 - t0) <=
Dmax_m) {
269 }
else if (
n +
distance(p,__end) == Nmin) {
300 out <<
"event: " << setw(6) <<
event.getCounter() <<
' ' <<
FIXED(12,2) << 0.5 * (
event.begin()->getToA() +
event.rbegin()->getToA()) <<
" [s] " << setw(4) <<
event.size() << endl;
315 int main(
int argc,
char **argv)
323 JLimit_t& numberOfEvents = inputFile.getLimit();
326 int factoryLimit = 100000;
327 int numberOfHits = 0;
330 double DMax_m = 500.0;
331 double ZMax_m = 200.0;
332 double TMaxExtra_s = 100.0e-6;
333 double TMaxVertex_s = 1.0e-2;
334 double gridAngle_deg = 10.0;
360 JParser<> zap(
"Main program to trigger acoustic data.");
363 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
370 zap[
'a'] =
make_field(detectorFile,
"detector file");
371 zap[
'W'] =
make_field(waveform,
"waveform identifier");
376 catch(
const exception &error) {
377 FATAL(error.what() << endl);
393 const double v0 =
V(cylinder.
getZmax());
395 if (parameters.TMax_s < parameters.DMax_m / v0) {
397 parameters.TMax_s = parameters.DMax_m / v0;
399 NOTICE(
"Set maximal time [s] " <<
FIXED(7,3) << parameters.TMax_s << endl);
402 const JMatch3D match3D(v0, parameters.DMax_m, parameters.TMaxExtra_s);
403 const JMatch1D match1D(v0, parameters.DMax_m, parameters.ZMax_m, parameters.TMaxExtra_s);
407 const JCheck check(X, Y, Z, v0, parameters.TMaxVertex_s, parameters.numberOfHits);
417 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
419 if (module->getFloor() != 0) {
421 receivers[module->getID()] =
JReceiver(module->getID(),
423 module->getT0() * 1.0e-9);
427 TH1D h0(
"h0", NULL, 21, -0.5, 20.5);
431 for (
size_t i = 2; i <= 5; ++i) {
432 M1[i] =
new TH1D(
MAKE_CSTRING(
"M[" << i <<
"]"), NULL, 1001, -0.5, 1000.5);
458 FATAL(
"Invalid detector identifier " << p->
DETID <<
" != " <<
detector.getID() << endl);
467 const double toa = p->
TOA_S();
489 const chrono::steady_clock::time_point t0 = chrono::steady_clock::now();
491 size_t trigger_counter = 0;
493 for (buffer_type::const_iterator p =
data.begin(), q = p; p !=
data.end(); ++p) {
498 const chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
502 <<
FIXED(8,1) << p->getToA() <<
" [s]" <<
' '
503 << setw(6) << chrono::duration_cast<chrono::seconds>(t1 - t0).count() <<
" [s]" <<
' '
504 << setw(6) << trigger_counter << endl);
509 while (q !=
data.end() && q->getToA() - p->getToA() <= parameters.TMax_s) { ++q; }
511 if (
distance(p,q) >= parameters.numberOfHits) {
515 if (
distance(p,q) < parameters.factoryLimit) {
519 buffer_type::iterator
root = buffer.begin();
520 buffer_type::iterator __p = buffer.begin();
521 buffer_type::iterator __q = buffer.begin();
528 for (buffer_type::const_iterator i = p; ++i != q; ) {
529 if (match3D(*
root,*i)) {
548 const double W = 1.0 / (double) rotator.size();
552 for (buffer_type::iterator i =
root; i != __q; ++i) {
556 buffer_type::iterator __z = partition(__p, __q,
JBind2nd(match1D,*
root));
574 trigger_counter += 1;
590 trigger_counter += 1;
595 if (!out[1].empty()) {
597 if (out[0].empty()) {
601 }
else if (
overlap(out[0],out[1])) {
603 out[0].
merge(out[1]);
619 if (!out[0].empty()) {
629 for (TH1D* h1 : M1) {
ROOT TTree parameter settings.
Algorithms for hit clustering and sorting.
int main(int argc, char **argv)
Data structure for detector geometry and calibration.
Recording of objects on file according a format that follows from the file name extension.
General purpose class for hash map of unique elements.
Base class for match operations for cluster and hit-preprocessing methods.
General purpose messaging.
#define DEBUG(A)
Message macros.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
I/O formatting auxiliaries.
#define MAKE_CSTRING(A)
Make C-string.
Utility class to parse parameter values.
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
1D match criterion for acoustic signals.
virtual bool operator()(const hit_type &first, const hit_type &second) const override
Match operator.
JMatch1D(const double V, const double Rmax_m, const double Zmax_m, const double Tmax_s)
Constructor.
3D match criterion for acoustic signals.
JMatch3D(const double V, const double Dmax_m, const double Tmax_s)
Constructor.
virtual bool operator()(const hit_type &first, const hit_type &second) const override
Match operator.
Utility class to parse parameter values.
double getY() const
Get y position.
double getX() const
Get x position.
Data structure for angles in three dimensions.
double getZmin() const
Get minimal z position.
double getZmax() const
Get maximal z position.
Direction set covering (part of) solid angle.
Data structure for position in three dimensions.
const JPosition3D & getPosition() const
Get position.
Data structure for vector 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.
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.
Function object interface for hit matching.
Auxiliary classes and methods for acoustic position calibration.
void print(std::ostream &out, const JEvent &event)
Print event.
static const JSoundVelocity getSoundVelocity(1541.0, -17.0e-3, -2000.0)
Function object for velocity of sound.
JAbstractHistogram< double > JHistogram_t
Type definition for scan along axis.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
JPosition3D getPiezoPosition()
Get relative position of piezo in optical module.
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
static const double PI
Mathematical constants.
double getDistance(const JFirst_t &first, const JSecond_t &second)
Get distance between objects.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::vector< JHitW0 > buffer_type
hits
JBinder2nd< JHit_t > JBind2nd(const JMatch< JHit_t > &match, const JHit_t &second)
Auxiliary method to create JBinder2nd object.
static const struct JTRIGGER::clusterize clusterize
Auxiliary data structure for floating point format specification.
Auxiliary data structure for final check on event.
JCheck(const JHistogram_t &X, const JHistogram_t &Y, const JHistogram_t &Z, const double V, const double Tmax_s, const int Nmin)
Constructor.
bool operator()(const hit_type &root, T __begin, T __end) const
Check event.
std::vector< JVector3D > U
bool is_valid() const
Check validity.
int getCounter() const
Get counter.
Match of two events considering overlap in time.
void merge(const JEvent &event)
Merge event.
double getT(const double t_s) const
Get corrected time.
Implementation for depth dependend velocity of sound.
JSoundVelocity & set(const double z0)
Set depth.
Time-of-arrival data from acoustic piezo sensor or hydrophone.
uint32_t DOMID
DAQ run number.
uint32_t QUALITYFACTOR
The ticks (16ns) part of the DAQ frame timestamp.
uint32_t QUALITYNORMALISATION
A measure of how good the waveform match was to the signal.
int32_t WAVEFORMID
DOM unique identifeir.
int32_t RUN
detector identifier
double TOA_S() const
Time of Arrival, expressed in seconds relative to Unix epoch (1 January 1970 00:00:00 UTC)
double getToA() const
Get calibrated time of arrival.
hit_type()
Default constructor.
hit_type(const JPosition3D &position, const JTransmission &transmission)
Constructor.
Template class for object cloning.
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.