30int main(
int argc, 
char **argv)
 
   37  JLimit_t&      numberOfEvents = inputFile.getLimit();
 
   44    JParser<> zap(
"Example program to histogram summary data.");
 
   54  catch(
const exception& error) {
 
   55    FATAL(error.what() << endl);
 
   59  const double factor = 1.0e-3;   
 
   65  TProfile h1(
"h1", NULL,  32,-0.5, 31.5);
 
   66  TProfile h2(
"h2", NULL,  32,-0.5, 31.5);
 
   68  TH2D     hu(
"hu", NULL, 201, -0.5, +200.5, 201, -0.5, +200.5);
 
   70  TH2D     hv(
"hv", NULL, 51, -0.5, +50.5, 200, 0.0, 50.0);
 
   71  TH2D     hw(
"hw", NULL, 51, -0.5, +50.5, 200, 0.0, 50.0);
 
   73  TH2D     hx(
"hx", NULL, NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5, 200, 0.0, 50.0);
 
   74  TH2D     hy(
"hy", NULL, NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5, 200, 0.0, 50.0);
 
   76  size_t   udp[] = { 0, 0, 0, 0 };
 
   88          << setw(6) << summaryslice->size()          << endl);
 
   92    for (JDAQSummaryslice::const_iterator frame = summaryslice->begin(); frame != summaryslice->end(); ++frame) {
 
   97      double R[2] = { 0.0 };
 
  100      int upper[2] = { 0 };
 
  104        const int index = (!frame->testHighRateVeto(pmt) && !frame->testFIFOStatus(pmt) ? 0 : 1);
 
  107        R[index] += correct ? 
getRate(*frame, pmt, factor) : frame->getRate(pmt, factor);
 
  114        h0.Fill(correct ? 
getRate(*frame, pmt, factor) : frame->getRate(pmt, factor), frame->getWeight(pmt, factor));
 
  116        h1.Fill((Double_t) pmt, (frame->testHighRateVeto(pmt) ? 1.0 : 0.0));
 
  117        h2.Fill((Double_t) pmt, (frame->testFIFOStatus  (pmt) ? 1.0 : 0.0));
 
  120      hu.Fill((
double) frame->getUDPMaximalSequenceNumber(),
 
  121              (
double) frame->getUDPNumberOfReceivedPackets());
 
  123      if (N[0] != 0) { hv.Fill((
double) frame->getUDPMaximalSequenceNumber(), R[0] / N[0]); }
 
  124      if (N[1] != 0) { hw.Fill((
double) frame->getUDPMaximalSequenceNumber(), R[1] / N[1]); }
 
  128        hx.Fill((
double) N[1], R[0] / N[0]);
 
  130        if (lower[0] != 0 && upper[0] != 0) {
 
  131          hy.Fill((
double) N[1], R[0] / N[0]);
 
  135      const bool status = (frame->getUDPNumberOfReceivedPackets() == frame->getUDPMaximalSequenceNumber() + 1  &&
 
  136                           frame->hasUDPTrailer());
 
  139      udp[1] += (status ? 1 : 0);
 
  140      udp[2] += max(frame->getUDPMaximalSequenceNumber() + 1,
 
  141                    frame->getUDPNumberOfReceivedPackets());
 
  142      udp[3] += frame->getUDPNumberOfReceivedPackets();
 
  144      h1.Fill((Double_t) 31, (frame->testWhiteRabbitStatus() ? 1.0 : 0.0));
 
  145      h2.Fill((Double_t) 31, (status ? 1.0 : 0.0));
 
  152    for (
int i = 0; i != 
sizeof(udp)/
sizeof(udp[0]); ++i) {
 
  153      cout << 
"UDP[" << i << 
"] = " << setw(12) << udp[i] << endl;
 
  156    cout << 
"Estimated packet loss probability                       " << 
SCIENTIFIC(12,3) << (double) (udp[2] - udp[3]) / (double) (udp[2]) << endl;
 
  157    cout << 
"Estimated packet loss probability (worst-case-scenario) " << 
SCIENTIFIC(12,3) << (double) (udp[0] - udp[1]) / (double) (udp[3]) << endl;