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)...