30{
   33 
   34  const char* const short_t = "short";
   35  const char* const long_t  = "long";
   36  const char* const fft_t   = "fft";
   37 
   39  string          detectorFile;
   41  string          format;
   42  double          Tmax_s;
   44 
   45  try {
   46 
   47    JParser<> zap(
"Example program to print dynamic detector calibration.");
 
   48 
   52    zap[
'F'] = 
make_field(format)              = short_t, long_t, fft_t;
 
   55 
   56    zap(argc, argv);
   57  }
   58  catch(const exception &error) {
   59    FATAL(error.what() << endl);
 
   60  }
   61 
   62 
   64 
   65  try {
   67  }
   70  }
   71 
   73 
   74  dynamics.load(calibrationFile);
   75 
   76  filebuf buffer;
   77 
   80  }
   81 
   82  ostream os(buffer.is_open() ? &buffer : cout.rdbuf());
   83 
   85 
   86  comment.
add(
"documentation: https://common.pages.km3net.de/jpp/Position_calibration.PDF");
 
   87 
   88  if      (format == short_t)
   89    comment.
add(
"format: string number; UTC [s]; Tx; Ty");
 
   90  else if (format == long_t)
   91    comment.
add(
"format: https://indico.cern.ch/event/1014814/contributions/4259426/attachments/2201529/3724129/KM3NeT_position_file_format.pdf");
 
   92  else if (format == fft_t)
   93    comment.
add(
"format: <T>");
 
   94 
   96 
   98  
   99
  100
  101
  102
  103 
  104  if (format == short_t) {
  105 
  106    os << comment;
  108 
  111        os << setw(4)     << string->first << ';'
  112           << 
FIXED(20,5) << i->getX()     << 
';' 
  113           << 
FIXED( 9,6) << i->getY().tx  << 
';' 
  114           << 
FIXED( 9,6) << i->getY().ty  << endl;
 
  115      }
  116    }
  117  }
  118 
  119  if (format == long_t) {
  120 
  121    os << comment;
  123 
  125 
  126      const double t1 = i->getX();
  127 
  128      dynamics.update(t1);
  129 
  130      os << 
FIXED(20,5) << t1 << 
' '  
  131         << 
FIXED(20,5) << t1 << 
' '  
  132         << setw(4) << 
detector.size() << endl;
 
  133 
  134      for (JDetector::const_iterator module = dynamics.begin(); module != dynamics.end(); ++module) {
  135 
  136        os << setw(4)  << module->getString() << ' '
  137           << setw(2)  << module->getFloor()  << ' '
  138           << setw(10) << module->getID()     << endl;
  139 
  140        os << 
FIXED(9,2) << module->getX() << 
' ' 
  141           << 
FIXED(9,2) << 
module->getY() << ' '
 
  142           << FIXED(9,2) << module->getZ() << ' '
  143           << FIXED(9,2) << -1.0           << ' '
  144           << FIXED(9,2) << -1.0           << ' '
  145           << FIXED(9,2) << -1.0           << endl;
  146      }
  147    }
  148  }
  149 
  150  if (format == fft_t) {
  151 
  152    double xmin = numeric_limits<double>::max();
 
  153    double xmax = numeric_limits<double>::lowest();
 
  154 
  156      if (!string->second.empty()) {
  157        xmin = min(xmin, string->second.getXmin());
 
  158        xmax = max(xmax, string->second.getXmax());
 
  159      }
  160    }
  161    
  162    for (
double x = xmin; 
x <= 
xmax; 
x += Tmax_s) {
 
  163 
  165      
  167        if (!string->second.empty()) {
  168          Q.
put(string->second(x).getLength());
 
  169        }
  170      }
  171      
  173    }
  174  }
  175 
  176  buffer.close();
  177}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
General purpose class for object reading from a list of file names.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
data_type::const_iterator const_iterator
Dynamic detector calibration.