222 JParser<> zap(
"Auxiliary program to edit PMT parameters map.");
224 zap[
'a'] =
make_field(detectorFile,
"detector file.") =
"";
225 zap[
'D'] =
make_field(detectorID,
"detector identifier (in absence of detector file).") = 0;
230 zap[
'E'] =
make_field(mu,
"expectation value for npe given two-fold coincidence") = 0.0;
237 catch(
const exception &error) {
238 FATAL(error.what() << endl);
242 for (
vector< JModifier<> >::const_iterator i = hdr.begin(); i != hdr.end(); ++i) {
244 DEBUG(
"Modifying default PMT parameters " << i->action <<
' ' << i->key <<
' ' << i->value << endl);
246 if (!i->apply(
parameters.getDefaultPMTParameters())) {
247 ERROR(
"No valid action: " << *i << endl);
251 if (detectorFile !=
"") {
258 load(detectorFile, detector);
264 if (detectorID == 0) {
266 detectorID = detector.
getID();
268 }
else if (detectorID != detector.
getID()) {
270 FATAL(
"Inconsistent detector identifier " << detectorID <<
" != " << detector.
getID() << endl);
274 for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
276 for (
unsigned int pmt = 0; pmt != module->size(); ++pmt) {
282 DEBUG(
"Setting default parameters for PMT " <<
id << endl);
293 FATAL(
"Invalid detector identifier " << detectorID << endl);
302 for (
vector< JModifier<JPMTPhysicalAddress> >::const_iterator i = mod.begin(); i != mod.end(); ++i) {
304 if (compare(i->address, address)) {
306 DEBUG(
"Modifying parameters for PMT " << ps->first <<
' ' << i->action <<
' ' << i->key <<
' ' << i->value << endl);
308 if (!i->apply(ps->second)) {
309 ERROR(
"No valid action: " << *i << endl);
320 for (
vector< JModifier<JPMTIdentifier> >::const_iterator i = daq.begin(); i != daq.end(); ++i) {
322 if (compare(ps->first, i->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);
337 DEBUG(
"Correct measured QE for two-hit probability " << mu << endl);
346 }
else if (mu < 0.0) {
348 FATAL(
"Invalid expection value for two-hit probability " << mu << endl);
354 DEBUG(
"Correct measured QE for time-over-threshold range " << T_ns << endl);
362 i->second.QE *= (cpu.getIntegralOfChargeProbability(i->second.threshold,
363 cpu.getNPE(T_ns.getUpperLimit()),
366 cpu.getIntegralOfChargeProbability(cpu.getNPE(T_ns.getLowerLimit()),
367 cpu.getNPE(T_ns.getUpperLimit()),
Utility class to parse command line options.
bool hasDetectorAddressMap(const int id)
Check if detector address map is available.
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Lookup table for PMT addresses in detector.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
const JModuleAddressMap & get(const int id) const
Get module address map.
Type definition of range.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int getID() const
Get identifier.
Auxiliary class for map of PMT parameters.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
PMT analogue signal processor.
virtual const char * what() const override
Get error message.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Data structure for PMT physical address.
do set_variable DETECTOR_TXT $WORKDIR detector
#define DEBUG(A)
Message macros.