92 JParser<> zap(
"Application to fit position calibration model to acoustic data.");
94 zap[
'f'] =
make_field(inputFile,
"output of JAcousticEventBuilder[.sh]");
96 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
105 zap[
'N'] =
make_field(jobs,
"number of parallel jobs") = 1;
110 catch(
const exception &error) {
111 FATAL(error.what() << endl);
114 ROOT::EnableThreadSafety();
116 const int sleep_us = 100;
131 receivers[
i->getID()] =
i->getLocation();
134 for (tripods_container::const_iterator
i =
tripods.begin();
i !=
tripods.end(); ++
i) {
135 emitters[
i->getID()] =
JEmitter(
i->getID(),
i->getUTMPosition() -
detector.getUTMPosition());
138 for (transmitters_container::const_iterator
i = transmitters.begin();
i != transmitters.end(); ++
i) {
142 catch(
const exception&) {}
155 if (inputFile.size() > 1
u) {
159 for (
const string& file_name : inputFile) {
167 if (JFremantle::oid ==
"")
168 JFremantle::oid = evt->
getOID();
169 else if (JFremantle::oid != evt->
getOID())
170 FATAL(
"Invalid detector identifier " << evt->
getOID() <<
" != " << JFremantle::oid << endl);
173 zmap[evt->begin()->getToE()] = file_name;
182 inputFile.push_back(
i->second);
204 typedef deque<JEvent> buffer_type;
206 for (buffer_type zbuf; inputFile.hasNext(); ) {
208 STATUS(inputFile.getFilename() <<
'\r');
DEBUG(endl);
212 for (
const string file_name = inputFile.getFilename(); inputFile.hasNext() && file_name == inputFile.getFilename(); ) {
214 const JEvent* evt = inputFile.next();
216 if (emitters.has(evt->
getID())) {
217 zbuf.push_back(*evt);
221 sort(zbuf.begin(), zbuf.end());
223 for (buffer_type::iterator p = zbuf.begin(), q; p != zbuf.end(); p = q) {
225 for (q = p; ++q != zbuf.end() && q->begin()->getToE() <= p->rbegin()->getToE() +
parameters.Tmax_s; ) {}
227 if (q == zbuf.end()) {
229 if (inputFile.hasNext()) {
231 zbuf.erase(zbuf.begin(), p);
246 for (buffer_type::iterator evt = p; evt != q; ++evt) {
255 for (JEvent::const_iterator
i = evt->begin();
i != __end; ++
i) {
260 if (receivers.has(
i->getID()) && geometry.hasLocation(receivers[
i->getID()]) &&
i->getQ() >=
parameters.Qmin * (unit(
parameters.Qmin) ?
i->getW() : 1.0)) {
262 data.push_back(
JHit(emitter,
264 receivers[
i->getID()],
269 buffer.insert(evt->
getID());
277 while (fremantle.backlog() > jobs) {
278 this_thread::sleep_for(chrono::microseconds(sleep_us));
281 fremantle.enqueue(data);
288 catch(
const exception& error) {
289 FATAL(
"main " << error.what());
Utility class to parse command line options.
Q(UTCMax_s-UTCMin_s)-livetime_s
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
double getWeight(T __begin, T __end)
Get total weight of data points.
JContainer< std::vector< JTransmitter > > transmitters_container
static JDetectorMechanics getMechanics
Function object to get string mechanics.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Auxiliary data structure to unify weights of acoustics data according to the number of pings per emit...
*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)...
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
Global fit of prameterised detector geometry to acoustics data.
size_t getNumberOfEmitters(T __begin, T __end)
Get number of emitters.
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
JContainer< std::set< JTransmission_t > > disable_container
const std::string & getOID() const
Get detector identifier.
JPosition3D getPosition(const Vec &pos)
Get position.
JContainer< std::vector< JTripod > > tripods_container
Implementation for depth dependend velocity of sound.
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.
Thread pool for global fits.
Object reading from a list of files.
const JLimit & getLimit() const
Get limit.
do set_variable DETECTOR_TXT $WORKDIR detector
int getID() const
Get emitter identifier.
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Acoustic transmission identifier.
Auxiliary data structure for floating point format specification.
Template definition of fit function of acoustic model.
#define DEBUG(A)
Message macros.