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);