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.");
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 {
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);
255 js[
User_t] = person.LOGIN;
264 out << setw(2) << setprecision(8);
#define DEBUG(A)
Message macros.
#define ASSERT(A,...)
Assert macro.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Auxiliary class for PMT thresholds.
Utility class to parse command line options.
int getDetectorID() const
Get detector identifier.
int getRunNumber() const
Get run number.
static const char *const _2SToT
Histogram naming.
ResultSet & getResultSet(const std::string &query)
Get result set.
std::vector< JServer > getServernames()
Get list of names of available database servers.
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::vector< event_type > data_type
static const std::string Tests_t
static const std::string User_t
static const std::string Location_t
static const std::string Time_t
static const std::string Test_t
static const std::string OK_t
static const std::string End_t
static const std::string Type_t
static const std::string Start_t
std::map< int, range_type > map_type
Auxiliary data structure for floating point format specification.
Type definition of range.
Wrapper class for server name.
Universal product identifier (UPI).
Template definition for getting table specific selector.
Data structure for PMT threshold calibration.
Auxiliary class for date and time.
std::string toString() const
Get ASCII formatted date and time.