62 int main(
int argc,
char **argv)
87 JParser<> zap(
"Main program to trigger events in acoustic data.");
89 zap[
'f'] =
make_field(inputFile,
"output of JConvertDB -q toashort");
90 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
94 zap[
'a'] =
make_field(detectorFile,
"detector file");
99 zap[
'p'] =
make_field(precision,
"precision time-of-arrival") = 1.0e-6;
104 catch(
const exception &error) {
105 FATAL(error.what() << endl);
130 if (
i->getFloor() == 0) {
137 catch(
const exception&) {
143 i->getPosition() + pos,
144 i->getT0() * 1.0e-9);
148 for (tripods_container::const_iterator
i =
tripods.begin();
i !=
tripods.end(); ++
i) {
150 i->getUTMPosition() -
detector.getUTMPosition());
153 for (transmitters_container::const_iterator
i = transmitters.begin();
i != transmitters.end(); ++
i) {
158 catch(
const exception&) {
177 public map<int, JQuantile>
179 long long int sum()
const
181 long long int count = 0;
183 for (const_iterator
i = this->begin();
i != this->end(); ++
i) {
184 count +=
i->second.getCount();
205 while (inputFile.hasNext()) {
207 if (inputFile.getCounter()%10000 == 0) {
208 STATUS(
"counter: " << setw(8) << inputFile.getCounter() <<
'\r' << flush);
DEBUG(endl);
214 oid = parameters->
DETID;
217 if (oid != parameters->
DETID) {
218 FATAL(
"Invalid detector identifier " << parameters->
DETID <<
" != " << oid << endl);
225 number_of_entries[parameters->
EMITTERID].put(1);
227 if (emitters.has(
id)) {
229 if (receivers.has(parameters->
DOMID)) {
237 number_of_misses[id].put(1);
240 catch(
const exception&) {
241 number_of_aliens[parameters->
EMITTERID].put(1);
246 for (map_type::const_iterator
i = number_of_entries.begin();
i != number_of_entries.end(); ++
i) {
247 STATUS(
"number of entries: " << setw(3) <<
i->first <<
' ' << setw(8) <<
i->second.getCount() << endl);
250 for (map_type::const_iterator
i = number_of_aliens.begin();
i != number_of_aliens.end(); ++
i) {
251 STATUS(
"number of aliens: " << setw(3) <<
i->first <<
' ' << setw(8) <<
i->second.getCount() << endl);
254 for (map_type::const_iterator
i = number_of_misses.begin();
i != number_of_misses.end(); ++
i) {
255 STATUS(
"number of misses: " << setw(3) <<
i->first <<
' ' << setw(8) <<
i->second.getCount() << endl);
270 buffer_type::iterator __end = unique(receiver->second.begin(), receiver->second.end(),
JTransmission::equals(precision));
274 for (buffer_type::const_iterator p = receiver->second.begin(); p != __end; ++p) {
276 buffer.push_back(*p);
281 sort(buffer.begin(), buffer.end());
287 for (buffer_type::const_iterator p = buffer.begin(); p != buffer.end(); ++p) {
289 buffer_type::const_iterator q = p;
293 while (++q != buffer.end() && q->getToE() - p->getToE() <=
parameters.TMax_s) {}
299 JEvent event(oid, number_of_triggers.sum(),
i->first, p, q);
301 number_of_triggers[
i->first].put(event.size());
303 DEBUG(
"trigger: " << endl << event);
309 }
else if (match(out, event)) {
326 STATUS(
"number of toes: " << setw(3) <<
i->first <<
' ' << setw(8) << buffer.size());
327 if (Q.getCount() > 0) {
329 ' ' <<
FIXED(6,1) << Q.getXmin() <<
330 ' ' <<
FIXED(6,1) << Q.getXmax());
334 for (JTriggerOutput::const_iterator event = data.begin();
event != data.end(); ++event) {
336 number_of_events[
event->getID()].put(event->size());
343 for (map_type::const_iterator
i = number_of_triggers.begin();
i != number_of_triggers.end(); ++
i) {
344 STATUS(
"number of triggers: " << setw(3) <<
i->first <<
' ' << setw(8) <<
i->second.getCount() << endl);
347 for (map_type::const_iterator
i = number_of_events.begin();
i != number_of_events.end(); ++
i) {
348 STATUS(
"number of events: " << setw(3) <<
i->first <<
' ' << setw(8) <<
i->second.getCount() <<
' ' <<
FIXED(7,3) <<
i->second.getMean() << endl);
Utility class to parse command line options.
Q(UTCMax_s-UTCMin_s)-livetime_s
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
int main(int argc, char *argv[])
JContainer< std::vector< JTransmitter > > transmitters_container
void merge(const JEvent &event)
Merge event.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
General purpose class for hash map of unique elements.
ROOT TTree parameter settings.
Match of two events considering overlap in time.
Recording of objects on file according a format that follows from the file name extension.
then usage $script< input file >[option] nPossible options count
std::string DETID
constraint
*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
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary data structure for floating point format specification.
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
Data structure for detector geometry and calibration.
JMODEL::JString getString(const JFit &fit)
Get model parameters of string.
std::vector< JHitW0 > buffer_type
hits
Data structure for hydrophone.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
Auxiliary class for defining the range of iterations of objects.
static const JSoundVelocity getSoundVelocity(1541.0,-17.0e-3,-2000.0)
Function object for velocity of sound.
I/O formatting auxiliaries.
JContainer< std::vector< JHydrophone > > hydrophones_container
Data structure for transmitter.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int getID() const
Get identifier.
JPosition3D getPosition(const Vec &pos)
Get position.
JTransmission getTransmission(const JToAshort &data, const JAbstractSoundVelocity &V) const
Get transmission.
ROOT TTree parameter settings.
JContainer< std::vector< JTripod > > tripods_container
General purpose messaging.
Implementation for depth dependend velocity of sound.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Acoustic trigger parameters.
Auxiliary class to define a range between two values.
General purpose class for object reading from a list of file names.
Utility class to parse command line options.
static const int PIEZO_DISABLE
Enable (disable) use of piezo if this status bit is 0 (1);.
Auxiliary class to compare transmissions.
static const int HYDROPHONE_DISABLE
Enable (disable) use of hydrophone if this status bit is 0 (1);.
Data structure for position in three dimensions.
const JLimit & getLimit() const
Get limit.
bool equals(const JFirst_t &first, const JSecond_t &second, const double precision=std::numeric_limits< double >::min())
Check equality.
std::map< int, range_type > map_type
static JEmitterID getEmitterID
Function object for emitter identification.
do set_variable DETECTOR_TXT $WORKDIR detector
Data structure for tripod.
int EMITTERID
waveform identifier
#define DEBUG(A)
Message macros.