37{
40
41 string login;
42 string locationID;
43 int elapsedTime = 0;
44
47
49
50 try {
51
53
57
58 JParser<> zap(
"Auxiliary program to merge high-voltage calibration results.");
59
60 zap[
'f'] =
make_field(inputFiles,
"input files");
64
65 zap(argc, argv);
66
67 } catch(const exception &error) {
68
69 FATAL(error.what() << endl);
70 }
71
72 if (login.empty() || locationID.empty()) {
73 FATAL(
"Missing user information (please specify via -#login and -#locationID)." << endl);
74 }
75
76
77 const JUUID& UUID = JUUID::rndm();
78
80
81 timer.
sub(elapsedTime);
82
83
84
85
89
91
92 for (vector<string>::const_iterator fileIt = inputFiles.cbegin(); fileIt != inputFiles.cend(); ++fileIt) {
93
94 NOTICE(
"Merging " << (*fileIt) << endl);
95
97
99 ifstream ifs(fileIt->c_str());
100
101 ifs >> js;
102 ifs.close();
103
104
105
106 json::const_iterator i0 = js.find(APIVersion_t);
107
108 if (i0 != js.cend()) {
109
110 istringstream iss(i0->get<string>());
111
112 iss >> DBAPIVersion;
113 }
114
116
117 json::const_iterator i1 = js.find(Data_t);
118
120 (i1 != js.cend() && i1->size() > 0) ) {
121
123
124 JHVCalibration_t::setVersion(getDBVersionTuneHV(*j));
125
127 metaInfoStr += (*i1)[0].at(Provenance_t + Info_t).at(Configuration_t).get<string>();
128
129 } else {
130
132
133 JHVCalibration_t::setVersion(getDBVersionTuneHV(*j));
134
136 }
137
138
139
140 for (JHVCalibration::const_iterator cal = HVcals.cbegin(); cal != HVcals.cend(); ++cal) {
141
142 if (find_if(merged.cbegin(), merged.cend(), make_predicate(&JHVCalibration_t::getNumber, cal->getNumber())) == merged.cend()) {
143 merged.push_back(*cal);
144 }
145 }
146
147 } else {
148
149 WARNING(*fileIt <<
" is not a JSON file; skip" << endl);
150 continue;
151 }
152 }
153
154 if (testTypes.size() > 1) {
155
156 WARNING(
"Ambiguous database test types; Assuming " << *testTypes.crbegin() << endl);
157
158 } else if (testTypes.size() == 0) {
159
160 FATAL(
"No database test type specified.");
161 }
162
163
165
167
168 json error = { {Message_t,
"" },
169 {Code_t, OK_t },
170 {Arguments_t, json::array() } };
171
172 json metaData = { {Configuration_t, metaInfoStr },
174
176 {User_t, login },
177 {Location_t, locationID },
178 {Start_t + Time_t, timer.
toString() },
179 {End_t + Time_t, timer().
toString() },
180 {Test_t + Type_t, *(testTypes.crbegin()) },
181 {Tests_t,
json(merged) } };
182
184 js[Data_t + Type_t] =
MAKE_STRING(
"ProductTestSession");
186 js[Error_t] =
json(error);
189 js[Data_t][0] =
json(data);
190
191 } else {
192
193 js[User_t] = login;
194 js[Location_t] = locationID;
195 js[Test_t + Type_t] = *(testTypes.crbegin());
196 js[Start_t + Time_t] = timer.
toString();
197 js[End_t + Time_t] = timer().
toString();
198 js[Tests_t] =
json(merged);
199 }
200
202
203 ofs << setw(2) << setprecision(8);
204 ofs << js;
205
206 ofs.close();
207
208 return 0;
209}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_STRING(A)
Make string.
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
Utility class to parse parameter values.
Utility class to parse command line options.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool isJSONFile(const char *file_name)
Check file format.
Auxiliary data structure for general purpose version number.
version_type getMajorVersion() const
Get major version.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary class for date and time.
std::string toString() const
Get ASCII formatted date and time.
void sub(const time_t t1)
Subtract given time.