50 JUPITable(
const char*
const fileName)
55 ifstream
in(fileName);
57 for (
string buffer;
getline(
in, buffer); ) {
59 istringstream
is(buffer);
95 if (p != number2upi.end()) {
99 if (q != p->second.end()) {
126 int main(
int argc,
char **argv)
143 double HVstepMin = 2 * 3.14;
171 JParser<> zap(
"Example program to find optimal HV-settings.");
173 zap[
'f'] =
make_field(inputFile,
"input file (ROOT format)");
175 zap[
'a'] =
make_field(detectorFile,
"detector file");
176 zap[
'b'] =
make_field(UPIFile,
"PMT UPI ASCII table");
183 catch(
const exception &error) {
184 FATAL(error.what() << endl);
187 if (login.empty() || locationID.empty()) {
189 FATAL(
"Missing user information (please specify via -#login and -#locationID).");
191 }
else if (testType.empty()) {
193 FATAL(
"Missing database test type (please specify via -#testType).");
197 FATAL(
"Missing run numbers.");
203 const JUUID& UUID = JUUID::rndm();
207 timer.
sub(elapsedTime);
214 catch (
const exception& error) {
215 FATAL(error.what() << endl);
220 JUPITable fetchUPI(UPIFile.c_str());
225 TFile input(inputFile.c_str(),
"READ");
239 JHVInterpolator::setMinHVDistance(HVstepMin);
240 JHVInterpolator::setHVRange (HVrange);
241 JHVInterpolator::setGainRange (gainRange);
243 NOTICE(
"Searching optimal high-voltage settings..." << endl <<
244 LEFT(30) <<
"UPI" <<
CENTER(35) <<
"(identifer / location)" <<
RIGHT(35) <<
"Inter-/Extrapolated high-voltage [-]" << endl);
248 const string&
name = it->first;
253 const int seppos = name.find(
'.');
254 const int moduleID = stoi(name.substr(0, seppos));
255 const int tdc = stoi(name.substr(seppos + 1, seppos + 3));
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);
265 NOTICE(
LEFT(30) << pmtUPI <<
"(a.k.a. " << name <<
" / " << location <<
"): ");
272 NOTICE(right <<
FIXED(20,2) << result <<
" +/- " <<
FIXED(4,2) << error << endl);
278 WARNING(
"Could not find high-voltage corresponding to target gain; Setting zero." << endl);
289 metaInfo.push_back(
JMeta(argc, argv));
294 metaInfo.push_back(*
in.next());
298 TFile output(inputFile.c_str(),
"RECREATE");
312 if (APIversion.getMajorVersion() == 2) {
333 js[
Start_t] = timer.toString();
334 js[
End_t] = timer().toString();
337 }
else if (APIversion.getMajorVersion() == 1) {
348 FATAL(
"Invalid API version <" << APIversion <<
"> accepted major versions 1 and 2." << endl);
353 ofs << setw(2) << setprecision(8);
static JDBTestTypesTuneHV & getDBVersionTuneHV
Function object for looking up the HV-tuning database version number corresponding to a specific test...
static const std::string Arguments_t
Utility class to parse command line options.
static const std::string Start_t
static const std::string Location_t
int main(int argc, char *argv[])
static const std::string Code_t
const JModule & getModule(const JObjectID &id) const
Get module parameters.
Data structure for a composite optical module.
static const std::string Encoding_t
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
static const JPBS_t PMT(3, 4, 2, 3)
PBS of photo-multiplier tube (PMT)
static const double FITTOT_GAIN_MAX
Default maximal gain.
static const double FITTOT_GAIN_MIN
Default minimal gain.
Router for direct addressing of module data in detector data structure.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
static const std::string Error_t
Utility class to parse parameter values.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Universal product identifier (UPI).
Dynamic ROOT object management.
Auxiliary data structure for floating point format specification.
Data structure for detector geometry and calibration.
void sub(const time_t t1)
Subtract given time.
#define MAKE_STRING(A)
Make string.
static const std::string Time_t
Auxiliary data structure for alignment of data.
Scanning of objects from a single file according a format that follows from the extension of each fil...
static const std::string APIVersion_t
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
I/O formatting auxiliaries.
static const std::string Configuration_t
Auxiliary data structure to store high-voltage versus gain data and interpolate the nominal high-volt...
static const std::string Test_t
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double getHV() const
Get interpolated high-voltage.
int getID() const
Get identifier.
Data structure for PMT geometry, calibration and status.
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
bool is_valid() const
Check validity.
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
static const std::string End_t
const double NOMINAL_GAIN
Specification for normalized gain corresponding to a one photo-electron pulse.
static const std::string Info_t
General purpose messaging.
Auxiliary data structure for sequence of same character.
double getHVError() const
Get error estimate on interpolated high-voltage.
then fatal The output file must have the wildcard in the name
static const std::string Message_t
const JPMT & getPMT(const JPMTIdentifier &id) const
Get PMT parameters.
Direct access to module in detector data structure.
static const std::string Data_t
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Auxiliary class to define a range between two values.
then fatal The output file must have the wildcard in the e g root fi eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Auxiliary class for date and time.
Utility class to parse command line options.
Data structure for PMT high-voltage calibration.
Product breakdown structure (PBS).
static const std::string Type_t
Object reading from a list of files.
Exception for accessing a value in a collection that is outside of its range.
static const std::string Provenance_t
do set_variable DETECTOR_TXT $WORKDIR detector
Auxiliary data structure for general purpose version number.
static const std::string UUID_t
static const std::string Tests_t
static const std::string OK_t
static const std::string Fail_t
static const std::string User_t
bool interpolateHV(const double gainTarget)
Inter-/Extrapolate the high-voltage value corresponding to the target gain value. ...