68{
   71 
   76 
   79  string                  detectorFile;
   80  JLimit_t&               numberOfEvents = inputFile.getLimit();
 
   86  disable_container       disable;                              
   87  size_t                  threads;                              
   90 
   91  try {
   92 
   93    JParser<> zap(
"Application to fit position calibration model to acoustic data.");
 
   94 
   95    zap[
'f'] = 
make_field(inputFile,       
"output of JAcousticEventBuilder[.sh]");
 
  101    zap[
'T'] = 
make_field(tripods,         
"tripod data");
 
  106    zap[
'N'] = 
make_field(threads,         
"number of threads")              = 1;
 
  107    zap[
's'] = 
make_field(squash,          
"squash transmissions in output");
 
  109 
  110    zap(argc, argv);
  111  }
  112  catch(const exception &error) {
  113    FATAL(error.what() << endl);
 
  114  }
  115 
  116  ROOT::EnableThreadSafety();
  117 
  119 
  120  try {
  122  }
  125  }
  126 
  129 
  130  for (JDetector::const_iterator i = 
detector.begin(); i != 
detector.end(); ++i) {
 
  131    receivers[i->getID()] = i->getLocation();
  132  }
  133 
  134  for (tripods_container::const_iterator i = tripods.begin(); i != tripods.end(); ++i) {
  135    emitters[i->getID()]  = 
JEmitter(i->getID(), i->getUTMPosition() - 
detector.getUTMPosition());
 
  136  }
  137 
  138  for (transmitters_container::const_iterator i = transmitters.begin(); i != transmitters.end(); ++i) {
  139    try {
  140      emitters[i->getID()]  = 
JEmitter(i->getID(), i->getPosition() + 
detector.getModule(i->getLocation()).getPosition());
 
  141    }
  142    catch(const exception&) {}                         
  143  }
  144 
  146 
  149 
  151  
  154 
  155  if (inputFile.size() > 1u) {                         
  156 
  158 
  159    for (const string& file_name : inputFile) {
  160 
  162 
  164 
  165        const JEvent* evt = in.next();
 
  166 
  169        }
  170 
  171        if (!evt->empty()) {
  172          zmap[evt->begin()->getToE()] = file_name;
  173        }
  174      }
  175    }
  177 
  178    inputFile.clear();
  179 
  181      inputFile.push_back(i->second);
  182    }
  183  }
  184 
  187 
  189 
  191  }
  192  
  193
  194
  195
  196  
  197  try {
  198    
  199    JFremantle fremantle(geometry, V, parameters, threads, 2 * threads);
 
  200 
  202 
  204 
  205      STATUS(inputFile.getFilename() << 
'\r'); 
DEBUG(endl);
 
  206 
  207      
  208    
  209      for (const string file_name = inputFile.getFilename(); inputFile.hasNext() && file_name == inputFile.getFilename(); ) {
  210 
  211        const JEvent* evt = inputFile.next();
 
  212 
  213        if (!evt->empty() && emitters.
has(evt->
getID())) {
 
  214          zbuf.push_back(*evt);
  215        }
  216      }
  217 
  218      sort(zbuf.begin(), zbuf.end());                  
  219 
  220      for (buffer_type::iterator p = zbuf.begin(), q; p != zbuf.end(); p = q) {
  221  
  222        for (q = p; ++q != zbuf.end() && q->begin()->getToE() <= p->rbegin()->getToE() + parameters.
Tmax_s; ) {}
 
  223 
  224        if (q == zbuf.end()) {
  225        
  226          if (inputFile.hasNext()) {
  227          
  228            zbuf.erase(zbuf.begin(), p);               
  229 
  230            break;
  231          }
  232        }
  233 
  235      
  237 
  239 
  241 
  242          for (buffer_type::iterator evt = p; evt != q; ++evt) {
  243 
  245 
  247 
  250 
  251            for (JEvent::const_iterator i = evt->begin(); i != __end; ++i) {
  252 
  255 
  256                if (receivers.
has(i->getID()) && geometry.hasLocation(receivers[i->getID()]) && i->getQ() >= parameters.
Qmin * (parameters.
Qmin <= 1.0 ? i->getW() : 1.0)) {
 
  257 
  260                                      receivers[i->getID()],
  261                                      i->getToA(),
  263                                      weight));
  264                }
  265              }
  266            }
  267          }
  268 
  270            fremantle.enqueue(data);
  271          }
  272        }
  273      }
  274    }
  276  }
  277  catch(const exception& error) {
  278    FATAL(
"main " << error.what());
 
  279  }
  280  
  281
  282 
  283
  284
  286 
  288}
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
 
Thread pool for global fits.
 
static output_type * output
optional output
 
static JMATH::JQuantile_t Q
chi2/NDF
 
static int detid
detector identifier
 
static bool squash
squash transmissions in output
 
Utility class to parse command line options.
 
General purpose class for object reading from a list of file names.
 
Object reading from a list of files.
 
virtual bool hasNext() override
Check availability of next element.
 
size_t getMinimumNumberOfEmitters(T __begin, T __end)
Get minimum number of emitters for any string in data.
 
double getWeight(T __begin, T __end)
Get total weight of data points.
 
JContainer< std::vector< JTripod > > tripods_container
 
JContainer< std::vector< JTransmitter > > transmitters_container
 
JContainer< std::vector< JHydrophone > > hydrophones_container
 
size_t getNumberOfEmitters(T __begin, T __end)
Get number of emitters.
 
static const JSoundVelocity getSoundVelocity(1541.0, -17.0e-3, -2000.0)
Function object for velocity of sound.
 
static JDetectorMechanics getMechanics
Function object to get string mechanics.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
std::vector< JHitW0 > buffer_type
hits
 
int getID() const
Get emitter identifier.
 
const int getDetectorID() const
Get detector identifier.
 
double Qmin
minimal quality transmission
 
double deadTime_s
dead time between events [s]
 
size_t Nmin
minimum number of emitters
 
double sigma_s
time-of-arrival resolution [s]
 
double Tmax_s
time window to combine events [s]
 
Global fit of prameterised detector geometry to acoustics data.
 
Template definition of fit function of acoustic model.
 
Implementation for depth dependend velocity of sound.
 
JSoundVelocity & set(const double z0)
Set depth.
 
Acoustic transmission identifier.
 
int getID() const
Get identifier.
 
Auxiliary data structure to unify weights of acoustics data according to the number of pings per emit...
 
Auxiliary wrapper for I/O of container with optional comment (see JComment).
 
double getMean() const
Get mean value.
 
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.
 
static counter_type max()
Get maximum counter value.
 
Auxiliary data structure for floating point format specification.