127{
130
131 string inputFile;
135
142
145 -80 - 1e-2);
149
151
152
153 try {
154
156
163
165
170
171 JParser<> zap(
"Example program to find optimal HV-settings.");
172
173 zap[
'f'] =
make_field(inputFile,
"input file (ROOT format)");
180
182 }
183 catch(const exception &error) {
185 }
186
188
189 FATAL(
"Missing user information (please specify via -#login and -#locationID).");
190
192
193 FATAL(
"Missing database test type (please specify via -#testType).");
194
196
197 FATAL(
"Missing run numbers.");
198 }
199
200
202
204
206
208
210
211 try {
213 }
214 catch (const exception& error) {
216 }
217
219
221
222
223
224
225 TFile input(inputFile.c_str(),
"READ");
226
228
230
231 input.Close();
232
233
234
235
236
238
242
243 NOTICE(
"Searching optimal high-voltage settings..." <<
endl <<
244 LEFT(30) <<
"UPI" <<
CENTER(35) <<
"(identifer / location)" <<
RIGHT(35) <<
"Inter-/Extrapolated high-voltage [-]" <<
endl);
245
247
248 const string& name =
it->first;
250
251
252
253 const int seppos = name.find(
'.');
254 const int moduleID =
stoi(name.substr(0,
seppos));
256
257 const JModule&
module = router.getModule(moduleID);
259
261 const string location =
MAKE_STRING(right <<
FILL(4,
'0') <<
module.getLocation().getString() <<
'.' <<
262 right <<
FILL(2,
'0') <<
module.getLocation().getFloor() <<
'.' <<
263 right <<
FILL(2,
'0') << tdc);
264
265 NOTICE(
LEFT(30) <<
pmtUPI <<
"(a.k.a. " << name <<
" / " << location <<
"): ");
266
268
270 const double error =
data.getHVError();
271
273
275
276 } else {
277
278 WARNING(
"Could not find high-voltage corresponding to target gain; Setting zero." <<
endl);
279
281 }
282 }
283
284
285
288
291
293
296 }
297
298 TFile output(inputFile.c_str(),
"RECREATE");
299
302 }
303
305
306 output.Close();
307
308
309
311
313
317
320
328
336
337 }
else if (
APIversion.getMajorVersion() == 1) {
338
345
346 } else {
347
348 FATAL(
"Invalid API version <" <<
APIversion <<
"> accepted major versions 1 and 2." <<
endl);
349 }
350
352
355
357}
#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
Router for direct addressing of module data in detector data structure.
Data structure for a composite optical module.
Data structure for PMT geometry, calibration and status.
Utility class to parse parameter values.
Template definition of a multi-dimensional oscillation probability interpolation table.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
static const double FITTOT_GAIN_MAX
Default maximal gain.
static const double FITTOT_GAIN_MIN
Default minimal gain.
static const JPBS_t PMT(3, 4, 2, 3)
PBS of photo-multiplier tube (PMT)
static JDBTestTypesTuneHV & getDBVersionTuneHV
Function object for looking up the HV-tuning database version number corresponding to a specific test...
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
const double NOMINAL_GAIN
Specification for normalized gain corresponding to a one photo-electron pulse.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
static const std::string Tests_t
static const std::string APIVersion_t
static const std::string User_t
static const std::string Encoding_t
static const std::string Message_t
static const std::string UUID_t
static const std::string Code_t
static const std::string Location_t
static const std::string Time_t
static const std::string Data_t
static const std::string Test_t
static const std::string OK_t
static const std::string Arguments_t
static const std::string Configuration_t
static const std::string End_t
static const std::string Fail_t
static const std::string Provenance_t
static const std::string Info_t
static const std::string Error_t
static const std::string Type_t
static const std::string Start_t
Auxiliary data structure for alignment of data.
Auxiliary data structure for sequence of same character.
Auxiliary data structure for floating point format specification.
Auxiliary data structure to store high-voltage versus gain data and interpolate the nominal high-volt...
static void setHVRange(const JRange< double > range)
Set valid gain range.
static void setMinHVDistance(const double minDist)
Set minimal separation distance for high-voltage.
static void setGainRange(const JRange< double > range)
Set valid gain range.
Universal product identifier (UPI).
Data structure for PMT high-voltage calibration.
static void setVersion(const int version)
Set HV-tuning database test type.
Auxiliary data structure for general purpose version number.
static const JUUID & rndm()
Generate random UUID.
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.