33{
   36 
   39  
   42  int                     Nmin;
   43  double                  Tmax_us;
   45  string                  disableFile;
   47 
   48  try { 
   49 
   50    JParser<> zap(
"Auxiliary program to set disable status of transmission based on time-of-arrival histograms.");
 
   51    
   52    zap[
'f'] = 
make_field(inputFile,       
"input file (output from JCanberra).");
 
   54    zap[
'N'] = 
make_field(Nmin,            
"minimum number of entries")      = 1;
 
   55    zap[
'T'] = 
make_field(Tmax_us,         
"maximal time [us]");
 
   57    zap[
'!'] = 
make_field(disableFile,     
"disable transmission file")      = 
"";
 
   59 
   60    zap(argc, argv);
   61  }
   62  catch(const exception &error) {
   63    FATAL(error.what() << endl);
 
   64  }
   65 
   66 
   67  inputFile = getFilenames(inputFile);
   68 
   69  disable_container disable;
   70 
   71  if (disableFile != "" && getFileStatus(disableFile.c_str())) {
   72    disable.load(disableFile.c_str());
   73  }
   74 
   75  disable.comment.add(
JMeta(argc, argv));
 
   76 
   78 
   79  TH1D ha("ha", NULL, 1000, 0.0, 1.0e4);
   80  TH1D hb("hb", NULL, 1000, 0.0, 1.0e3);
   81 
   82  for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
   83 
   84    NOTICE(
"Processing " << *i << endl) ;
 
   85 
   86    TFile in(i->c_str(), "read");
   87    
   88    TIter iter(in.GetListOfKeys());
   89 
   90    for (TKey* key; (
key = (TKey*) iter.Next()) != NULL; ) {
 
   91 
   92      if (TString(
key->GetName()).EndsWith(
".toa")) {
 
   93 
   94        TH1* h1 = 
dynamic_cast<TH1*
>(
key->ReadObj());
 
   95 
   96        if (h1 != NULL) {
   97 
   98          TString buffer(h1->GetName());
   99 
  100          const char* regexp = "[^0-9][0-9]* [0-9]*[^0-9]";
  101 
  102          buffer = buffer(TRegexp(regexp));
  103          buffer = buffer(1, buffer.Length() - 2);
  104 
  105          if (buffer.Length() > 0 && buffer.IsDigit()) {
  106 
  108 
  109            istringstream(buffer.Data()) >> id;
  110 
  111            const int N = h1->GetEntries();
  112 
  113            if (N > 0 && N < Nmin) {
  114 
  115              NOTICE(
"disable: " << setw(2) << 
id.tx << 
' ' << setw(8) << 
id.rx << 
' ' << setw(6) << N << 
" < " << setw(6) << Nmin << endl);
 
  116 
  117              disable.insert(id);
  118            }
  119 
  120            ha.Fill(N);
  121            
  122            if (N > 0) {
  123 
  125 
  126              h1->GetQuantiles(Q.size(), R.data(), Q.data());
  127 
  128              const double T_us = (*R.rbegin() - *R.begin()) * 1.0e6;
  129 
  130              hb.Fill(T_us);
  131 
  132              DEBUG(
"transmission: " << setw(2) << 
id.tx << 
' ' << setw(8) << 
id.rx << 
' ' << setw(6) << N << 
' ' << 
FIXED(6,1) << T_us << 
" [us]" << endl);
 
  133              
  134              if (T_us > Tmax_us) {
  135 
  136                NOTICE(
"disable: " << setw(2) << 
id.tx << 
' ' << setw(8) << 
id.rx << 
' ' << 
FIXED(6,1) << T_us << 
" > " << 
FIXED(6,1) << Tmax_us << 
" [us]" << endl);
 
  137 
  138                disable.insert(id);
  139              }
  140            }
  141 
  142          } else {
  143 
  144            ERROR(
"Histogram name " << h1->GetName() << 
" not compatible with regular expression " << regexp << 
"." << endl);
 
  145          }
  146        }
  147      }
  148    }
  149    
  150    in.Close();
  151  }
  152 
  153  if (disableFile != "") {
  154    disable.store(disableFile.c_str());
  155  }
  156 
  157  out.Write();
  158  out.Close();
  159}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Acoustic transmission identifier.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
Auxiliary data structure for return type of make methods.