66int main(
const int argc, 
const char * 
const argv[])
 
   86    JParser<> zap(
"Auxiliary program to compute the PMT thresholds according to the small time-over-threshold fraction.");
 
   92    zap[
'f'] = 
make_field(inputFile,         
"list of file names (output of JCalibrateToT)");
 
   95    zap[
't'] = 
make_field(fraction,          
"maximal fraction of signal allowed for noise.") = 0.5;
 
   96    zap[
'T'] = 
make_field(testType,          
"test type")                                     = 
"TH-TUNING-SEA-v1";
 
  101  catch(
const exception& error) {
 
  102    FATAL(error.what() << endl);
 
  106  if (inputFile.empty()) {
 
  107    FATAL(
"No input files.");
 
  115    JDB::reset(usr, pwd, cookie);
 
  123  catch(
const exception& error) {
 
  124    FATAL(error.what() << endl);
 
  128  const JDAQHeader header = getDAQHeader(inputFile[0].c_str());
 
  141      detector[parameters.DOMID][parameters.CABLEPOS] = parameters;
 
  146  catch(
const exception& error) {
 
  147    FATAL(error.what() << endl);
 
  151  struct parameters_type {
 
  163  for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
 
  165    const JDAQHeader header = getDAQHeader(i->c_str());
 
  173    TFile* in = TFile::Open(i->c_str(), 
"exist");
 
  175    if (in == NULL || !in->IsOpen()) {
 
  176      FATAL(
"File: " << *i << 
" not opened." << endl);
 
  179    for (detector_type::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  181      if (!module->second.empty()) {
 
  187          for (
int ix = 1; ix <= h2s->GetXaxis()->GetNbins(); ++ix) {
 
  192            for (
int iy = 1; iy <= h2s->GetYaxis()->GetNbins(); ++iy) {
 
  194              const double x = h2s->GetYaxis()->GetBinCenter(iy);
 
  195              const double y = h2s->GetBinContent(ix, iy);
 
  204            const JUPI_t upi = 
module->second.at(ix-1).PMTUPI;
 
  206            data[upi].push_back({ getPMTThreshold(upi).value, signal, noise});
 
  211          WARNING(
"No histogram for module " << module->first << 
"; skip." << endl);
 
  222  for (map_type::iterator i = data.begin(); i != data.end(); ++i) {
 
  224    sort(i->second.begin(), i->second.end(), 
make_comparator(¶meters_type::threshold));
 
  226    int threshold = i->second.begin()->threshold;
 
  228    for (data_type::const_iterator p = i->second.begin(); p != i->second.end(); ++p) {
 
  230      if (p->noise <= fraction * p->signal) {
 
  232        threshold = p->threshold;
 
  238    if (
debug >= 
debug_t || threshold > i->second.begin()->threshold) {
 
  240      cout << 
"PMT " << left << setw(32) << i->first << 
" -> " << right << setw(3) << threshold << 
" (" << i->second.begin()->threshold << 
")" << endl;
 
  242      for (data_type::const_iterator p = i->second.begin(); p != i->second.end(); ++p) {
 
  243        DEBUG(setw(3) << p->threshold << 
' ' << 
FIXED(7,0) << p->noise << 
"/" << 
FIXED(7,0) << p->signal << 
' ' << (p->noise <= fraction * p->signal) << endl);
 
  264    out << setw(2) << setprecision(8);