193 typedef JHVTable::JHVTableTypes JHVTableType_t;
206 double minHV = -1500;
207 double maxHV = - 800;
224 JParser<> zap(
"Auxiliary program to treat failed high-voltage tuning results.");
226 zap[
'f'] =
make_field(inputFile,
"input file");
236 }
catch(
const exception &error) {
238 FATAL(error.what() << endl);
241 if (login.empty() || locationID.empty()) {
242 FATAL(
"Missing user information (please specify via -#login and -#locationID).");
246 const JUUID& UUID = JUUID::rndm();
250 timer.
sub(elapsedTime);
261 if (isJSONFile(inputFile.c_str())) {
265 ifstream ifs(inputFile.c_str());
272 json::const_iterator i0 = js.find(APIVersion_t);
274 if (i0 != js.cend()) {
276 istringstream iss(i0->get<
string>());
283 json::const_iterator i1 = js.find(Data_t);
286 (i1 != js.cend() && i1->size() > 0)) {
288 DBTestType = (*i1)[0].at(Test_t + Type_t).get<
string>();
290 JHVCalibration_t::setVersion(getDBVersionTuneHV(DBTestType));
293 metaInfoStr += (*i1)[0].at(Provenance_t + Info_t).at(Configuration_t).get<
string>();
297 DBTestType = js.at(Test_t + Type_t).get<
string>();
299 JHVCalibration_t::setVersion(getDBVersionTuneHV(DBTestType));
306 if (pmtSet.empty()) {
308 for (JHVCalibration::iterator it = HVcals.begin(); it != HVcals.end(); ++it) {
310 if (it->result != OK_t) {
311 toEdit.push_back(*it);
319 JHVCalibration::iterator pmt = find_if(HVcals.begin(), HVcals.end(),
320 make_predicate(&JHVCalibration_t::getNumber, it->getNumber()));
321 if (pmt != HVcals.end()) {
323 if (pmt->result == OK_t) {
324 WARNING(
"Editing " << OK_t <<
" result for " << pmt->getUPI() << endl);
327 toEdit.push_back(*pmt);
334 ERROR(inputFile <<
" is not a JSON file." << endl);
338 if (!HVtable.second.empty()) {
340 NOTICE(
"Setting " << (HVtable.first == JHVTableType_t::VENDOR_HV ?
"vendor " :
"run-specific ") <<
341 "PMT high-voltages from file " << HVtable.second <<
"..." << endl);
343 JHVTable getHV(HVtable.second.c_str(), HVtable.first);
345 for (JHVCalibration::iterator i = toEdit.begin(); i != toEdit.end(); ++i) {
348 const double HV = getHV(upi.
getNumber());
350 if (HV > minHV && HV < maxHV) {
352 i->supplyVoltage = getHV(upi.
getNumber());
357 WARNING(
"Invalid high-voltage for PMT " << upi <<
" (" <<
FIXED(7,1) << HV <<
358 " not within [ " <<
FIXED(7,1) << minHV <<
", " <<
FIXED(7,1) << maxHV <<
"]); skip." << endl);
364 NOTICE(
"Setting high-voltages manually..." << endl);
366 for (JHVCalibration::iterator i = toEdit.begin(); i != toEdit.end(); ++i) {
368 NOTICE(
"Please specify high-voltage for " <<
RIGHT(30) << i->getUPI() <<
":" << endl);
373 while (manualHV < minHV || manualHV > maxHV) {
375 WARNING(
"Specified high-voltage is not within range [" <<
376 FIXED(7,1) << minHV <<
", " <<
FIXED(7,1) << maxHV <<
377 "]; Please specify again." << endl);
382 i->supplyVoltage = manualHV;
392 json error = { {Message_t,
"" },
394 {Arguments_t, json::array() } };
396 json metaData = { {Configuration_t, metaInfoStr },
399 json data = { {Provenance_t + Info_t,
json(metaData) },
401 {Location_t, locationID },
402 {Start_t + Time_t, timer.
toString() },
403 {End_t + Time_t, timer().
toString() },
404 {Test_t + Type_t, DBTestType },
405 {Tests_t,
json(toEdit) } };
408 js[Data_t + Type_t] =
MAKE_STRING(
"ProductTestSession");
410 js[Error_t] =
json(error);
413 js[Data_t][0] =
json(data);
418 js[Location_t] = locationID;
419 js[Test_t + Type_t] = DBTestType;
420 js[Start_t + Time_t] = timer.
toString();
421 js[End_t + Time_t] = timer().
toString();
422 js[Tests_t] =
json(toEdit);
428 ofs << setw(2) << setprecision(8);