194 typedef JHVTable::JHVTableTypes JHVTableType_t;
207 double minHV = -1500;
208 double maxHV = - 800;
225 JParser<> zap(
"Auxiliary program to treat failed high-voltage tuning results.");
227 zap[
'f'] =
make_field(inputFile,
"input file");
237 }
catch(
const exception &error) {
239 FATAL(error.what() << endl);
242 if (login.empty() || locationID.empty()) {
243 FATAL(
"Missing user information (please specify via -#login and -#locationID).");
247 const JUUID& UUID = JUUID::rndm();
251 timer.
sub(elapsedTime);
262 if (isJSONFile(inputFile.c_str())) {
266 ifstream ifs(inputFile.c_str());
273 json::const_iterator i0 = js.find(APIVersion_t);
275 if (i0 != js.cend()) {
277 istringstream iss(i0->get<
string>());
284 json::const_iterator i1 = js.find(Data_t);
287 (i1 != js.cend() && i1->size() > 0)) {
289 DBTestType = (*i1)[0].at(Test_t + Type_t).get<
string>();
291 JHVCalibration_t::setVersion(getDBVersionTuneHV(DBTestType));
294 metaInfoStr += (*i1)[0].at(Provenance_t + Info_t).at(Configuration_t).get<
string>();
298 DBTestType = js.at(Test_t + Type_t).get<
string>();
300 JHVCalibration_t::setVersion(getDBVersionTuneHV(DBTestType));
307 if (pmtSet.empty()) {
309 for (JHVCalibration::iterator it = HVcals.begin(); it != HVcals.end(); ++it) {
311 if (it->result != OK_t) {
312 toEdit.push_back(*it);
320 JHVCalibration::iterator pmt = find_if(HVcals.begin(), HVcals.end(),
321 make_predicate(&JHVCalibration_t::getNumber, it->getNumber()));
322 if (pmt != HVcals.end()) {
324 if (pmt->result == OK_t) {
325 WARNING(
"Editing " << OK_t <<
" result for " << pmt->getUPI() << endl);
328 toEdit.push_back(*pmt);
335 ERROR(inputFile <<
" is not a JSON file." << endl);
339 if (!HVtable.second.empty()) {
341 NOTICE(
"Setting " << (HVtable.first == JHVTableType_t::VENDOR_HV ?
"vendor " :
"run-specific ") <<
342 "PMT high-voltages from file " << HVtable.second <<
"..." << endl);
344 JHVTable getHV(HVtable.second.c_str(), HVtable.first);
346 for (JHVCalibration::iterator i = toEdit.begin(); i != toEdit.end(); ++i) {
349 const double HV = getHV(upi.
getNumber());
351 if (HV > minHV && HV < maxHV) {
353 i->supplyVoltage = getHV(upi.
getNumber());
358 WARNING(
"Invalid high-voltage for PMT " << upi <<
" (" <<
FIXED(7,1) << HV <<
359 " not within [ " <<
FIXED(7,1) << minHV <<
", " <<
FIXED(7,1) << maxHV <<
"]); skip." << endl);
365 NOTICE(
"Setting high-voltages manually..." << endl);
367 for (JHVCalibration::iterator i = toEdit.begin(); i != toEdit.end(); ++i) {
369 NOTICE(
"Please specify high-voltage for " <<
RIGHT(30) << i->getUPI() <<
":" << endl);
374 while (manualHV < minHV || manualHV > maxHV) {
376 WARNING(
"Specified high-voltage is not within range [" <<
377 FIXED(7,1) << minHV <<
", " <<
FIXED(7,1) << maxHV <<
378 "]; Please specify again." << endl);
383 i->supplyVoltage = manualHV;
393 json error = { {Message_t,
"" },
395 {Arguments_t, json::array() } };
397 json metaData = { {Configuration_t, metaInfoStr },
400 json data = { {Provenance_t + Info_t,
json(metaData) },
402 {Location_t, locationID },
403 {Start_t + Time_t, timer.
toString() },
404 {End_t + Time_t, timer().
toString() },
405 {Test_t + Type_t, DBTestType },
406 {Tests_t,
json(toEdit) } };
409 js[Data_t + Type_t] =
MAKE_STRING(
"ProductTestSession");
411 js[Error_t] =
json(error);
414 js[Data_t][0] =
json(data);
419 js[Location_t] = locationID;
420 js[Test_t + Type_t] = DBTestType;
421 js[Start_t + Time_t] = timer.
toString();
422 js[End_t + Time_t] = timer().
toString();
423 js[Tests_t] =
json(toEdit);
429 ofs << setw(2) << setprecision(8);