42{
   45 
   47  JLimit_t&       numberOfEvents = inputFile.getLimit();
 
   49  string          detectorFile;
   50  string          ahrsFile;
   51  double          precision;
   55 
   56  try {
   57 
   58    JParser<> zap(
"Program to monitor AHRS data.");
 
   59    
   60    zap[
'f'] = 
make_field(inputFile,    
"output of JConvertDB -q ahrs");
 
   64    zap[
'c'] = 
make_field(ahrsFile,     
"output of JAHRSCalibration");
 
   65    zap[
'p'] = 
make_field(precision,    
"precision")   = 1.0e-6;
 
   69 
   70    zap(argc, argv);
   71  }
   72  catch(const exception &error) {
   73    FATAL(error.what() << endl);
 
   74  }
   75 
   76 
   78 
   79  try {
   81  }
   84  }
   85 
   87 
   90 
   92 
   94 
   95  TH1D  h0("h0", NULL, 100, 0.0, 5.0);
   96  TH1D  h1("h1", NULL, 100, 0.0, 5.0);
   97  TH2D  h2("h2", NULL, 100, 0.0, 5.0, 100, 0.0, 5.0);
   98  TH1D  hn("hn", NULL, 100, 0.0, 1.0e4);
   99  
  100  TH2D* ha = new TH2D("ha", NULL, 
  101                      string.size(), -0.5, string.size() - 0.5,
  103 
  104  for (Int_t i = 1; i <= ha->GetXaxis()->GetNbins(); ++i) {
  105    ha->GetXaxis()->SetBinLabel(i, 
MAKE_CSTRING(
string.at(i-1)));
 
  106  }
  107  for (Int_t i = 1; i <= ha->GetYaxis()->GetNbins(); ++i) {
  109  }
  110 
  111  TH2D* hb = (TH2D*) ha->Clone("hb");
  112  TH2D* hc = (TH2D*) ha->Clone("hc");
  113  TH2D* hd = (TH2D*) ha->Clone("hd");
  114 
  116 
  118 
  119  for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  120    if (module->getFloor() != 0) {
  121      data[module->getID()] = 0;
 
  122    }
  123  }
  124 
  126 
  128 
  130 
  131    const JAHRS* parameters = inputFile.
next();
 
  132 
  133    if (router.hasModule(parameters->
DOMID)) {
 
  134 
  136 
  138 
  145        
  146        h0.Fill(A);
  149        
  151 
  153 
  155 
  158          }
  159        }
  160 
  162          buffer[parameters->
DOMID].push_back(*parameters);
 
  163        else
  165                << setw(16)   << parameters->
UNIXTIME << 
' ' 
  166                << setw(4)    << parameters->
DUID     << 
' ' 
  167                << setw(2)    << parameters->
FLOORID  << 
' ' 
  176      }
  177    }
  178  }
  180 
  181 
  183 
  185    
  186    if (i->second.size() >= 2u) {
  187 
  189 
  190      for (vector<JAHRS>::const_iterator q = i->second.begin(), p = q++; q != i->second.end(); ++p, ++q) {
  191 
  192        if ((fabs(p->AHRS_A0 - q->AHRS_A0) > precision ||
  193             fabs(p->AHRS_A1 - q->AHRS_A1) > precision ||
  194             fabs(p->AHRS_A2 - q->AHRS_A2) > precision)
  195            &&
  196            (fabs(p->AHRS_H0 - q->AHRS_H0) > precision ||
  197             fabs(p->AHRS_H1 - q->AHRS_H1) > precision ||
  198             fabs(p->AHRS_H2 - q->AHRS_H2) > precision)) {
  199 
  201        }
  202      }
  203    }
  204  }
  205 
  206  for (map_type::const_iterator i = 
data.begin(); i != 
data.end(); ++i) {
 
  207 
  208    const JLocation& location = router.getModule(i->first);
 
  209    
  210    hn.Fill(i->second);
  211 
  213  }
  214 
  216 
  217    for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  218 
  219      map_type::const_iterator p = 
data.find(module->getID());
 
  220 
  221      if (p != 
data.end()) {
 
  222        cout << 
getLabel(module->getLocation()) << 
' ' << setw(8) << module->getID() << 
' ' << setw(6) << p->second << endl;
 
  223      }
  224    }
  225  }
  226  
  228 
  230 
  231    out << h0  << h1  << h2 << hn;
  232    out << *ha << *hb << *hc << *hd;
  233 
  234    out.Write();
  235    out.Close();
  236  }
  237 
  239 
  240  int n_no_data_compass = 0;
  241  for (map_type::const_iterator i = 
data.begin(); i != 
data.end(); ++i) {
 
  242    if (i->second > 0) {
  243      q1.put(i->second);
  244    }
  245    else {
  246      n_no_data_compass++;
  247    }
  248  }
  249 
  250  for (vector<double>::const_iterator i = Q.begin(); i != Q.end(); ++i) {
  252         << 
FIXED(5,0) << n_no_data_compass << 
' ' 
  253         << 
FIXED(8,3) << q1.getQuantile(*i));
 
  254  }
  256 
  257  return 0;
  258}
#define DEBUG(A)
Message macros.
 
#define QAQC(A)
QA/QC output macro.
 
int qaqc
QA/QC file descriptor.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
#define MAKE_CSTRING(A)
Make C-string.
 
Logical location of module.
 
int getFloor() const
Get floor number.
 
int getString() const
Get string number.
 
Router for direct addressing of module data in detector data structure.
 
Utility class to parse command line options.
 
General purpose class for object reading from a list of file names.
 
virtual bool hasNext() override
Check availability of next element.
 
counter_type getCounter() const
Get counter.
 
virtual const pointer_type & next() override
Get next element.
 
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
 
floor_range getRangeOfFloors(const JDetector &detector)
Get range of floors.
 
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.
 
int getIndex()
Get index for user I/O manipulation.
 
static const double H
Planck constant [eV s].
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
bool is_valid(const json &js)
Check validity of JSon data.
 
std::map< int, range_type > map_type
 
Auxiliary data structure for floating point format specification.
 
Auxiliary class to map module identifier to AHRS calibration.
 
Auxiliary data structure to check validity of AHRS data.
 
long long int UNIXTIME
[ms]
 
Router for mapping of string identifier to index.
 
Auxiliary class for defining the range of iterations of objects.
 
static counter_type max()
Get maximum counter value.