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)) {
233 f1[transceiver.emitter.getID()][transceiver.receiver.getID()].push_back(transceiver.getTransmission(*parameters,
V));
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) {
275 if (p->getQ() >= parameters.Q * (unit(parameters.Q) ? p->getW() : 1.0)) {
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) {}
297 if (
distance(p,q) >= parameters.numberOfHits) {
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.
JContainer< std::vector< JTransmitter > > transmitters_container
void merge(const JEvent &event)
Merge event.
std::map< int, buffer_type > map_type
string -> hits
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
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)
JMODEL::JString getString(const JFit &fit)
Get model parameters of string.
std::vector< JHitW0 > buffer_type
hits
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.
JContainer< std::vector< JHydrophone > > hydrophones_container
Auxiliary wrapper for I/O of container with optional comment (see JComment).
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
JPosition3D getPosition(const Vec &pos)
Get position.
JContainer< std::vector< JTripod > > tripods_container
Implementation for depth dependend velocity of sound.
Auxiliary data structure for average.
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.
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.
static JEmitterID getEmitterID
Function object for emitter identification.
do set_variable DETECTOR_TXT $WORKDIR detector
Match of two events considering overlap in time.
int EMITTERID
waveform identifier
#define DEBUG(A)
Message macros.