Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JMergeTuneHV.cc File Reference

Auxiliary program to merge multiple HV tuning calibrations. More...

#include <iostream>
#include <iomanip>
#include <vector>
#include <set>
#include "JSystem/JTime.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"
#include "JLang/JPredicate.hh"
#include "JSupport/JFilenameSupportkit.hh"
#include "JDetector/JDetectorCalibration.hh"
#include "JDB/JDB.hh"
#include "JDB/JDBToolkit.hh"
#include "JDB/JDBincludes.hh"
#include "JDB/JSelector.hh"
#include "JDB/JSelectorSupportkit.hh"
#include "JSon/JSon.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to merge multiple HV tuning calibrations.

Note that only the calibration in the first given file will be maintained
in case a PMT appears in multiple files.

Author
bjung

Definition in file JMergeTuneHV.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 36 of file JMergeTuneHV.cc.

37 {
38  using namespace std;
39  using namespace JPP;
40 
41  string usr;
42  string pwd;
43  string cookie;
44 
45  vector<string> inputFiles;
46  string outputFile;
47 
48  int debug;
49 
50  try {
51 
52  JParser<> zap("Auxiliary program to merge high-voltage calibration results.");
53 
54  zap['u'] = make_field(usr) = "";
55  zap['!'] = make_field(pwd) = "";
56  zap['C'] = make_field(cookie) = "";
57  zap['f'] = make_field(inputFiles, "input files");
58  zap['o'] = make_field(outputFile, "output file");
59  zap['d'] = make_field(debug, "debug") = 2;
60 
61  zap(argc, argv);
62 
63  } catch(const exception &error) {
64 
65  FATAL(error.what() << endl);
66  }
67 
68  JDateAndTime timer;
69 
70  // Retrieve personalia
71  JPersons person;
72 
73  try {
74 
75  JDB::reset(usr, pwd, cookie);
76 
77  JSelector selector = getSelector<JPersons>(JDB::get()->User());
78  ResultSet& rs = getResultSet(getTable<JPersons>(), selector);
79  rs >> person;
80  rs.Close();
81 
82  } catch (const exception& error) {
83 
84  FATAL(error.what() << endl);
85  }
86 
87  // Merge high-voltage calibrations
88  JHVCalibration merged;
89  set<string> testTypes;
90 
91  for (vector<string>::const_iterator fileIt = inputFiles.cbegin(); fileIt != inputFiles.cend(); ++fileIt) {
92 
93  if (isJSONFile(fileIt->c_str())) {
94 
95  json js;
96  ifstream ifs(fileIt->c_str());
97 
98  ifs >> js;
99  ifs.close();
100 
101  json::const_iterator DBtype = js.find(Test_t + Type_t);
102 
103  if (DBtype != js.end()) {
104 
105  testTypes.insert(DBtype->get<string>());
106 
107  } else {
108 
109  WARNING("No database test type specified for " << *fileIt << endl);
110  }
111 
112  JHVCalibration HVcals;
113 
114  json::const_iterator data = js.find(Tests_t);
115 
116  if (data != js.end()) {
117 
118  HVcals = data->get<JHVCalibration>();
119 
120  } else {
121 
122  WARNING("HV calibration data for " << *fileIt << "could not be found; skip." << endl);
123  continue;
124  }
125 
126  for (JHVCalibration::const_iterator cal = HVcals.cbegin(); cal != HVcals.cend(); ++cal) {
127 
128  if (find_if(merged.cbegin(), merged.cend(), make_predicate(&JHVCalibration_t::getNumber, cal->getNumber())) == merged.cend()) {
129  merged.push_back(*cal);
130  }
131  }
132 
133  } else {
134 
135  WARNING(*fileIt << " is not a JSON file; skip" << endl);
136  continue;
137  }
138  }
139 
140  if (testTypes.size() > 1) {
141 
142  WARNING("Database test type is ambiguous; Assuming " << *testTypes.cbegin() << endl);
143 
144  } else if (testTypes.size() == 0) {
145 
146  ERROR("No database test type specified.");
147  }
148 
149  json js;
150 
151  js[User_t] = person.LOGIN;
152  js[Location_t] = person.LOCATIONID;
153  js[StartTime_t] = timer.toString();
154  js[EndTime_t] = timer().toString();
155  js[Test_t + Type_t] = *testTypes.cbegin();
156  js[Tests_t] = json(merged);
157 
158  ofstream ofs(outputFile.c_str());
159 
160  ofs << setw(2) << setprecision(8);
161  ofs << js;
162 
163  ofs.close();
164 
165  return 0;
166 }
Utility class to parse command line options.
Definition: JParser.hh:1500
#define WARNING(A)
Definition: JMessage.hh:65
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
Definition: JPredicate.hh:128
static const std::string Tests_t
T get(const JHead &header)
Get object from header.
static const std::string Location_t
string outputFile
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
std::vector< JHVCalibration_t > JHVCalibration
PMT high voltage calibration.
#define ERROR(A)
Definition: JMessage.hh:66
static const std::string Test_t
int debug
debug level
Definition: JSirene.cc:63
#define FATAL(A)
Definition: JMessage.hh:67
void reset(T &value)
Reset value.
static const std::string EndTime_t
nlohmann::json json
static const std::string Type_t
ResultSet & getResultSet(const std::string &query)
Get result set.
Definition: JDB.hh:269
static const std::string StartTime_t
static const std::string User_t
Detector calibration key words for JSON I/O.
bool isJSONFile(const char *file_name)
Check file format.