10 #include <type_traits> 
   77     JFremantle(
const std::string&   oid,
 
   87       for (
size_t i = 0; i < 
N; ++i) {
 
   89         thread worker([
this, katoomba]() {
 
   96               unique_lock<mutex> lock(
in);
 
   98               cv.wait(lock, [
this]() { 
return stop || !input.empty(); });
 
  100               if (
stop && input.empty()) {
 
  104               data.swap(input.front());
 
  109             const auto result = fremantle(data.begin(), data.end());
 
  111             if (
result.chi2 / 
result.ndf <= fremantle.parameters.chi2perNDF) {
 
  115               for (data_type::const_iterator i = 
result.begin; i != 
result.end; ++i) {
 
  116                 range.include(i->getValue());
 
  120                                             range.getLowerLimit(),
 
  121                                             range.getUpperLimit(),
 
  129                 unique_lock<mutex> lock(out);
 
  131                 this->output.
put(evt);
 
  137         workers.emplace_back(move(worker));
 
  150         unique_lock<mutex> lock(
in);
 
  157       for (
auto& worker : workers) {
 
  173         unique_lock<mutex> lock(
in);
 
  185     void enqueue(data_type& data)
 
  190         unique_lock<mutex> lock(
in);
 
  193           throw runtime_error(
"The thread pool has been stopped.");
 
  196         input.emplace(move(data));
 
  204     queue <data_type>    input;
 
  207     condition_variable   cv;
 
  221 int main(
int argc, 
char **argv)
 
  237   transmitters_container  transmitters;                         
 
  238   hydrophones_container   hydrophones;                          
 
  241   disable_container       disable;                              
 
  248     JParser<> zap(
"Application to fit position calibration model to acoustic data.");
 
  250     zap[
'f'] = 
make_field(inputFile,       
"output of JAcousticEventBuilder[.sh]");
 
  252     zap[
'n'] = 
make_field(numberOfEvents)                                    = JLimit::max();
 
  260     zap[
'u'] = 
make_field(unify,           
"unify weighing of pings");
 
  262     zap[
'N'] = 
make_field(jobs,            
"number of parallel jobs")        = 1;
 
  263     zap[
's'] = 
make_field(sleep_us,        
"sleep time [us]")                = 100;
 
  268   catch(
const exception &error) {
 
  269     FATAL(error.what() << endl);
 
  272   ROOT::EnableThreadSafety();
 
  288   for (JDetector::const_iterator i = 
detector.begin(); i != 
detector.end(); ++i) {
 
  289     receivers[i->getID()] = i->getLocation();
 
  292   for (tripods_container::const_iterator i = 
tripods.begin(); i != 
tripods.end(); ++i) {
 
  293     emitters[i->getID()]  = 
JEmitter(i->getID(),
 
  294                                      i->getUTMPosition() - 
detector.getUTMPosition());
 
  297   for (transmitters_container::const_iterator i = transmitters.begin(); i != transmitters.end(); ++i) {
 
  299       emitters[i->getID()]  = 
JEmitter(i->getID(),
 
  302     catch(
const exception&) {
 
  325     for (
const string& file_name : inputFile) {
 
  335         else if (oid != evt->
getOID())             
 
  336           FATAL(
"Invalid detector identifier " << evt->
getOID() << 
" != " << oid << endl);
 
  339           zmap[evt->begin()->getToE()] = file_name;
 
  348       inputFile.push_back(i->second);
 
  358     JFremantle fremantle(oid, katoomba, 
outputFile, jobs);
 
  360     typedef deque<JEvent> buffer_type;
 
  362     for (buffer_type zbuf; inputFile.hasNext(); ) {
 
  364       STATUS(inputFile.getFilename() << 
'\r'); 
DEBUG(endl);
 
  368       for (
const string file_name = inputFile.getFilename(); inputFile.hasNext() && file_name == inputFile.getFilename(); ) {
 
  370         const JEvent* evt = inputFile.next();
 
  372         if (emitters.has(evt->
getID())) {
 
  373           zbuf.push_back(*evt);
 
  377       sort(zbuf.begin(), zbuf.end());                
 
  379       for (buffer_type::iterator p = zbuf.begin(), q; p != zbuf.end(); p = q) {
 
  381         for (q = p; ++q != zbuf.end() && q->begin()->getToE() <= p->rbegin()->getToE() + 
parameters.Tmax_s; ) {}
 
  383         if (q == zbuf.end()) {
 
  385           if (inputFile.hasNext()) {
 
  387             zbuf.erase(zbuf.begin(), p);             
 
  397           for (buffer_type::const_iterator i = p; i != q; ++i) {
 
  398             numberOfPings[i->getID()] += 1;
 
  402             DEBUG(
"Number of pings " << setw(2) << i->first << 
' ' << setw(3) << i->second << endl);
 
  405           int minimum_number_of_pings = numeric_limits<int>::max();
 
  408             minimum_number_of_pings = min(minimum_number_of_pings, i->second);
 
  413           for (buffer_type::iterator evt = p; evt != q; ++evt) {
 
  415             sort(evt->begin(), evt->end(), 
compare);
 
  419             const JEmitter& emitter = emitters[evt->getID()];
 
  420             const double    signal  = (unify ? (double) minimum_number_of_pings / (
double) numberOfPings[evt->getID()] : 1.0);
 
  422             for (JEvent::const_iterator i = evt->begin(); i != __end; ++i) {
 
  427                 if (receivers.has(i->getID()) && geometry.
hasLocation(receivers[i->getID()]) && i->getQ() >= 
parameters.Qmin) {
 
  431                                           receivers[i->getID()],
 
  438           while (fremantle.backlog() > jobs) {
 
  439             this_thread::sleep_for(chrono::microseconds(sleep_us));
 
  442           fremantle.enqueue(data);
 
  448   catch(
const exception& error) {
 
  449     FATAL(
"main " << error.what());
 
Worker class for fit function of acoustic model. 
 
Utility class to parse command line options. 
 
int main(int argc, char *argv[])
 
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member. 
 
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. 
 
General purpose class for hash map of unique elements. 
 
ROOT TTree parameter settings. 
 
Recording of objects on file according a format that follows from the file name extension. 
 
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
 
JEvt getEvt(const JHead &header, const JModel &model)
Get event. 
 
*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)
 
Data structure for detector geometry and calibration. 
 
Data structure for hydrophone. 
 
size_t getNumberOfEmitters(T __begin, T __end)
Get number of emitters. 
 
then usage $script[port]< option > nPossible stop
 
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. 
 
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 
 
const std::string & getOID() const 
Get detector identifier. 
 
JPosition3D getPosition(const Vec &pos)
Get position. 
 
static struct JACOUSTICS::@4 compare
Auxiliary data structure to sort transmissions. 
 
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...
 
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
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. 
 
Acoustic transmission identifier. 
 
bool hasLocation(const JLocation &location) const 
Check if this detector has given location. 
 
Template interface of object output for single data type. 
 
Custom probability density function of time-of-arrival. 
 
const JLimit & getLimit() const 
Get limit. 
 
Fit functions of acoustic model. 
 
virtual bool put(const T &object)=0
Object output. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
int getID() const 
Get identifier. 
 
Data structure for tripod. 
 
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. 
 
Template definition of fit function of acoustic model. 
 
#define DEBUG(A)
Message macros. 
 
Data structure for optical module.