60 int main(
int argc, 
char **argv)
 
   76   transmitters_container  transmitters;                         
 
   77   hydrophones_container   hydrophones;                          
 
   80   disable_container       disable;                              
 
   87     JParser<> zap(
"Application to fit position calibration model to acoustic data.");
 
   89     zap[
'f'] = 
make_field(inputFile,       
"output of JAcousticEventBuilder[.sh]");
 
   91     zap[
'n'] = 
make_field(numberOfEvents)                                    = JLimit::max();
 
   99     zap[
'u'] = 
make_field(unify,           
"unify weighing of pings");
 
  102                           "Precede name of data structure by a '+' or '-' " 
  103                           "to add or remove data types in the output, respectively." 
  105     zap[
'D'] = 
make_field(Tmax_s,          
"deadtime [s]")                   = 100.0e-3;
 
  110   catch(
const exception &error) {
 
  111     FATAL(error.what() << endl);
 
  129   for (JDetector::const_iterator i = 
detector.begin(); i != 
detector.end(); ++i) {
 
  130     receivers[i->getID()] = i->getLocation();
 
  133   for (tripods_container::const_iterator i = 
tripods.begin(); i != 
tripods.end(); ++i) {
 
  134     emitters[i->getID()]  = 
JEmitter(i->getID(),
 
  135                                      i->getUTMPosition() - 
detector.getUTMPosition());
 
  138   for (transmitters_container::const_iterator i = transmitters.begin(); i != transmitters.end(); ++i) {
 
  140       emitters[i->getID()]  = 
JEmitter(i->getID(),
 
  143     catch(
const exception&) {
 
  160   TH1D h0(
"chi2/NDF", NULL, 50000,  0.0, 1000.0);
 
  161   TH1D h1(
"h1",       NULL,    51, -0.5,   50.5);
 
  162   TH1D hn(
"hn",       NULL,   100,  0.0,    6.0);
 
  166                                   range.getLength() + 1, 
range.getLowerLimit() - 0.5, 
range.getUpperLimit() + 0.5));
 
  170                                   range.getLength() + 1, 
range.getLowerLimit() - 0.5, 
range.getUpperLimit() + 0.5));
 
  172   for (Int_t i = 1; i <= HA->GetXaxis()->GetNbins(); ++i) {
 
  173     HA->GetXaxis()->SetBinLabel(i, 
MAKE_CSTRING(geometry.at(i-1).first));
 
  174     HB->GetXaxis()->SetBinLabel(i, 
MAKE_CSTRING(geometry.at(i-1).first));
 
  179   if (inputFile.size() > 1
u) {                                        
 
  183     for (
const string& file_name : inputFile) {
 
  193         else if (oid != evt->
getOID())             
 
  194           FATAL(
"Invalid detector identifier " << evt->
getOID() << 
" != " << oid << endl);
 
  197           zmap[evt->begin()->getToE()] = file_name;
 
  206       inputFile.push_back(i->second);
 
  220   catch(
const exception&) {}
 
  222   int counter[] = { 0, 0 };
 
  224   typedef deque<JEvent> buffer_type;
 
  226   for (buffer_type zbuf; inputFile.hasNext(); ) {
 
  228     STATUS(inputFile.getFilename() << 
'\r'); 
DEBUG(endl);
 
  232     for (
const string file_name = inputFile.getFilename(); inputFile.hasNext() && file_name == inputFile.getFilename(); ) {
 
  234       const JEvent* evt = inputFile.next();
 
  236       if (!evt->empty() && emitters.has(evt->
getID())) {
 
  237         zbuf.push_back(*evt);
 
  241     sort(zbuf.begin(), zbuf.end());                
 
  243     for (buffer_type::iterator p = zbuf.begin(), q; p != zbuf.end(); p = q) {
 
  245       for (q = p; ++q != zbuf.end() && q->begin()->getToE() <= p->rbegin()->getToE() + 
parameters.Tmax_s; ) {}
 
  247       if (q == zbuf.end()) {
 
  249         if (inputFile.hasNext()) {
 
  251           zbuf.erase(zbuf.begin(), p);             
 
  265         for (buffer_type::const_iterator i = p; i != q; ++i) {
 
  266           numberOfPings[i->getID()] += 1;
 
  270           DEBUG(
"Number of pings " << setw(2) << i->first << 
' ' << setw(3) << i->second << endl);
 
  273         int minimum_number_of_pings = numeric_limits<int>::max();
 
  276           minimum_number_of_pings = min(minimum_number_of_pings, i->second);
 
  282         for (buffer_type::iterator evt = p; evt != q; ++evt) {
 
  288           const JEmitter& emitter = emitters[evt->getID()];
 
  289           const double    weight  = (unify ? (double) minimum_number_of_pings / (
double) numberOfPings[evt->getID()] : 1.0);
 
  291           for (JEvent::const_iterator i = evt->begin(); i != __end; ++i) {
 
  296               if (receivers.has(i->getID()) && geometry.
hasLocation(receivers[i->getID()]) && i->getQ() >= 
parameters.Qmin * (unit(
parameters.Qmin) ? i->getW() : 1.0)) {
 
  298                 data.push_back(
JHit(emitter,
 
  300                                     receivers[i->getID()],
 
  305                 buffer.insert(evt->getID());
 
  313           for (data_type::const_iterator hit = data.begin(); hit != data.end(); ++hit) {
 
  314             HA[hit->getID()]->Fill(geometry.
getIndex(hit->getString()), hit->getFloor(), 1.0);
 
  319           const auto result = katoomba(data.begin(), data.end());
 
  321           for (data_type::const_iterator hit = 
result.begin; hit != 
result.end; ++hit) {
 
  322             HB[hit->getID()]->Fill(geometry.
getIndex(hit->getString()), hit->getFloor(), 1.0);
 
  327             cout << 
"result:"                                                     << 
' ' 
  331             for (data_type::const_iterator hit = 
result.begin; hit != 
result.end; ++hit) {
 
  355             if (selection.is_valid<
JEvent>()) {
 
  357               for (buffer_type::iterator i = p; i != q; ++i) {
 
  363                 for (JEvent::iterator hit = out.begin(); hit != out.end(); ++hit) {
 
  386   STATUS(
"Number of events written / rejected: " << counter[0] << 
" / " << counter[1] << endl);
 
Worker class for complete fit procedure 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. 
 
JKatoomba< JAbstractMinimiser > evaluator
 
Recording of objects on file according a format that follows from the file name extension. 
 
Auxiliary class for ROOT class selection. 
 
*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
 
#define MAKE_CSTRING(A)
Make C-string. 
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Dynamic ROOT object management. 
 
Auxiliary data structure for floating point format specification. 
 
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
 
floor_range getRangeOfFloors(const JDetector &detector)
Get range of floors. 
 
Data structure for detector geometry and calibration. 
 
Data structure for hydrophone. 
 
size_t getNumberOfEmitters(T __begin, T __end)
Get number of emitters. 
 
Scanning of objects from a single file according a format that follows from the extension of each fil...
 
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. 
 
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
 
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 
 
set_variable E_E log10(E_{fit}/E_{#mu})"
 
const std::string & getOID() const 
Get detector identifier. 
 
JPosition3D getPosition(const Vec &pos)
Get position. 
 
JTreeWriter object output. 
 
General purpose messaging. 
 
static const JStringCounter getNumberOfStrings
Function object to count unique strings. 
 
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 $
 
JTreeWriter< T > & getTreeWriter()
Get TreeWriter. 
 
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. 
 
Fit function of acoustic model. 
 
JEvt getEvt(const JHead &header, const JModel &model)
Get event. 
 
bool hasLocation(const JLocation &location) const 
Check if this detector has given location. 
 
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. 
 
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. 
 
JKatoomba< JGandalf > gandalf
 
Data structure for optical module.