43 using namespace KM3NETDAQ;
63 JParser<> zap(
"Auxiliary program to print high-voltage tuning results.");
65 zap[
'f'] =
make_field(inputFile,
"input file (JSON output of JTuneHV)");
66 zap[
'a'] =
make_field(detectorFile,
"detector file");
67 zap[
'o'] =
make_field(
outputFile,
"output file (for writing failed evaluations to separate JSON output)") =
"";
73 }
catch(
const exception &error) {
75 FATAL(error.what() << endl);
78 if (!
outputFile.empty() && (login.empty() || locationID.empty())) {
80 FATAL(
"Missing user information (please specify via -#login and -#locationID).");
84 const JUUID& UUID = JUUID::rndm();
88 timer.sub(elapsedTime);
95 catch (
const exception& error) {
96 FATAL(error.what() << endl);
99 const JPMTRouter PMTrouter(
detector);
104 string metaInfoStr =
MAKE_STRING(JMeta(argc, argv));
114 ifstream ifs(inputFile.c_str());
123 if (i0 != js.cend()) {
125 istringstream iss(i0->get<
string>());
132 json::const_iterator i1 = js.find(
Data_t);
134 if ((DBAPIVersion.getMajorVersion() == 2) &&
135 (i1 != js.cend() && i1->size() > 0)) {
137 DBTestType = (*i1)[0].at(
Test_t +
Type_t).get<
string>();
155 RIGHT(20) <<
"HV" <<
RIGHT (10) <<
"gain" <<
RIGHT(10) <<
"status" << endl);
157 for (JHVCalibration::const_iterator it = HVcals.cbegin(); it != HVcals.cend(); ++it) {
159 const JUPI_t& pmtUPI = it->getUPI();
160 const JModule& module = PMTrouter.getParentModule(pmtUPI.getNumber());
161 const JPMTIdentifier& pmtID = PMTrouter.getIdentifier (pmtUPI.getNumber());
163 const JLocation_t location(module.getString(), module.getFloor(), pmtID.getTDC());
165 if (it->result !=
OK_t) {
166 failureMap[pmtID.getModuleID()].push_back(*it);
169 NOTICE(
LEFT (30) << pmtUPI <<
"(a.k.a. " << pmtID <<
" / " << location <<
"):" <<
170 FIXED(20,1) << it->supplyVoltage <<
RIGHT(10) << it->result << endl);
177 ERROR(inputFile <<
" is not a JSON file." << endl);
186 NOTICE(endl <<
FILL(105,
'-') <<
" List of failures" << setfill(
' ') << endl);
190 Nfailed +=
i->second.size();
195 WARNING(
"No successful calibrations found for module " <<
i->first <<
" (dead module?)" << endl);
199 for (JHVCalibration::const_iterator
j =
i->second.cbegin();
j !=
i->second.cend(); ++
j) {
201 const JUPI_t& pmtUPI =
j->getUPI();
202 const JModule& module = PMTrouter.getParentModule(pmtUPI.getNumber());
203 const JPMTIdentifier& pmtID = PMTrouter.getIdentifier (pmtUPI.getNumber());
205 const JLocation_t location(module.getString(), module.getFloor(), pmtID.getTDC());
207 NOTICE(
LEFT(30) << pmtUPI <<
"(a.k.a. " << pmtID <<
" / " << location <<
"):" <<
208 right <<
FIXED(20,1) <<
j->supplyVoltage <<
RIGHT(10) <<
j->result << endl);
215 NOTICE(endl <<
FILL(105,
'-') <<
" SUMMARY" << setfill(
' ') << endl);
216 NOTICE(
LEFT(40) <<
"Number of evaluated PMTs:" <<
RIGHT(20) << Ntotal << endl);
217 NOTICE(
LEFT(40) <<
"Number of successful evaluations:" <<
RIGHT(20) << Ntotal - Nfailed << endl);
218 NOTICE(
LEFT(40) <<
"Number of failed evaluations:" <<
RIGHT(20) << Nfailed << endl);
219 NOTICE(
RIGHT(20) <<
'-' <<
LEFT(20) <<
" in missing modules:" <<
RIGHT(20) << Nmissing << endl);
220 NOTICE(
RIGHT(20) <<
'-' <<
LEFT(20) <<
" other:" <<
RIGHT(20) << Nfailed - Nmissing << endl << endl);
227 if (DBAPIVersion.getMajorVersion() == 2) {
248 js[
Start_t] = timer.toString();
249 js[
End_t] = timer().toString();
264 ofs << setw(2) << setprecision(8);
static JDBTestTypesTuneHV & getDBVersionTuneHV
Function object for looking up the HV-tuning database version number corresponding to a specific test...
then usage $script< detector file > minrun maxrun report nIn case of failures
static const std::string Arguments_t
Utility class to parse command line options.
static const std::string Start_t
static const std::string Location_t
static const std::string Code_t
static const std::string Encoding_t
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
JEEP::JVersion JDBAPIVersion
static const std::string Error_t
Utility class to parse parameter values.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary data structure for floating point format specification.
#define MAKE_STRING(A)
Make string.
static const std::string Time_t
Auxiliary data structure for alignment of data.
static const std::string APIVersion_t
static const std::string Configuration_t
static const std::string Test_t
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
std::vector< JHVCalibration_t > JHVCalibration
PMT high voltage calibration.
static const std::string End_t
static const std::string Info_t
Auxiliary data structure for sequence of same character.
static const std::string Message_t
static const std::string Data_t
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
static const std::string Type_t
static const std::string Provenance_t
do set_variable DETECTOR_TXT $WORKDIR detector
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
static const std::string UUID_t
static const std::string Tests_t
bool isJSONFile(const char *file_name)
Check file format.
static const std::string OK_t
static const std::string User_t