231 JParser<> zap(
"Auxiliary program to edit PMT parameters map.");
233 zap[
'a'] =
make_field(detectorFile,
"detector file.") =
"";
234 zap[
'D'] =
make_field(detectorID,
"detector identifier (in absence of detector file).") = 0;
239 zap[
'E'] =
make_field(mu,
"expectation value for npe given two-fold coincidence (" << mu .
getOption() <<
" -> " << mu .getCustom() <<
")") = 0.0;
240 zap[
'T'] =
make_field(T_ns,
"time-over-threshold rang (" << T_ns.getOption() <<
" -> " << T_ns.getCustom() <<
")") =
JRange_t();
243 zap[
'q'] =
make_field(squash,
"squash meta data");
248 catch(
const exception &error) {
249 FATAL(error.what() << endl);
260 for (
vector< JModifier<> >::const_iterator i = hdr.begin(); i != hdr.end(); ++i) {
262 DEBUG(
"Modifying default PMT parameters " << i->action <<
' ' << i->key <<
' ' << i->value << endl);
265 ERROR(
"No valid action: " << *i << endl);
269 if (detectorFile !=
"") {
282 if (detectorID == 0) {
286 }
else if (detectorID !=
detector.getID()) {
288 FATAL(
"Inconsistent detector identifier " << detectorID <<
" != " <<
detector.getID() << endl);
292 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
294 for (
unsigned int pmt = 0; pmt != module->size(); ++pmt) {
298 if (parameters.find(
id) == parameters.end()) {
300 DEBUG(
"Setting default parameters for PMT " <<
id << endl);
311 FATAL(
"Invalid detector identifier " << detectorID << endl);
316 for (JPMTParametersMap::iterator ps = parameters.begin(); ps != parameters.end(); ++ps) {
320 for (
vector< JModifier<JPMTPhysicalAddress> >::const_iterator i = mod.begin(); i != mod.end(); ++i) {
322 if (compare(i->address, address)) {
324 DEBUG(
"Modifying parameters for PMT " << ps->first <<
' ' << i->action <<
' ' << i->key <<
' ' << i->value << endl);
326 if (!i->apply(ps->second)) {
327 ERROR(
"No valid action: " << *i << endl);
336 for (JPMTParametersMap::iterator ps = parameters.begin(); ps != parameters.end(); ++ps) {
338 for (
vector< JModifier<JPMTIdentifier> >::const_iterator i = daq.begin(); i != daq.end(); ++i) {
340 if (compare(ps->first, i->address)) {
342 DEBUG(
"Modifying parameters for PMT " << ps->first <<
' ' << i->action <<
' ' << i->key <<
' ' << i->value << endl);
344 if (!i->apply(ps->second)) {
345 ERROR(
"No valid action: " << *i << endl);
355 DEBUG(
"Correct measured QE for two-hit probability " << mu << endl);
364 }
else if (mu < 0.0) {
366 FATAL(
"Invalid expection value for two-hit probability " << mu << endl);
372 DEBUG(
"Correct measured QE for time-over-threshold range " << T_ns << endl);
376 for (JPMTParametersMap::iterator i = parameters.begin(); i != parameters.end(); ++i) {
380 i->second.QE *= (cpu.getIntegralOfChargeProbability(i->second.threshold,
381 cpu.getNPE(T_ns.getUpperLimit()),
384 cpu.getIntegralOfChargeProbability(cpu.getNPE(T_ns.getLowerLimit()),
385 cpu.getNPE(T_ns.getUpperLimit()),
393 for (JPMTParametersMap::iterator i = parameters.begin(); i != parameters.end(); ++i) {
394 i->second.QE = QE.
constrain(i->second.QE);
405 out << parameters << endl;
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Lookup table for PMT addresses in detector.
const JModuleAddressMap & get(const int id) const
Get module address map.
Auxiliary class for map of PMT parameters.
const JPMTParameters & getDefaultPMTParameters() const
Get default PMT parameters.
void convertHitProbabilityToQE(const double mu)
Convert the hit probabilities to QEs for given expectation value.
Data structure for PMT physical address.
virtual const char * what() const override
Get error message.
Utility class to parse command line options.
Auxiliary class to assign a custom value following the reading of a specific textual value.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
bool hasDetectorAddressMap(const int id)
Check if detector address map is available.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
JParserTemplateElement< JType_t > getOption(JType_t &object, const std::string &name, const std::string &help="")
Auxiliary method for creation of template parser element object.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Type definition of range.
PMT analogue signal processor.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...