29 static const char WILDCARD_RING =
'*';
30 static const int WILDCARD_POSITION = -1;
31 static const int WILDCARD = -1;
43 return (((first == second)) ||
48 ((first.
ring == WILDCARD_RING || second.
ring == WILDCARD_RING) &&
49 (first.
position == WILDCARD_POSITION || second.
position == WILDCARD_POSITION)));
62 return (((first == second)) ||
67 ((first.
getID() == WILDCARD || second.
getID() == WILDCARD) &&
68 (first.
getTDC() == WILDCARD || second.
getTDC() == WILDCARD)));
75 struct JEmptyAddress {
76 friend inline std::istream&
operator>>(std::istream& in, JEmptyAddress&
object) {
return in; }
77 friend inline std::ostream&
operator<<(std::ostream& out,
const JEmptyAddress&
object) {
return out; }
84 template<
class JAddress_t = JEmptyAddress>
106 if (this->action ==
"set") {
110 }
else if (this->action ==
"add") {
114 }
else if (this->action ==
"sub") {
118 }
else if (this->action ==
"mul") {
122 }
else if (this->action ==
"div") {
131 catch(
const std::exception& error) {
132 cerr << error.what() << endl;
147 friend inline std::istream&
operator>>(std::istream& in, JModifier& modifier)
149 return in >> modifier.address
163 friend inline std::ostream&
operator<<(std::ostream& out,
const JModifier& modifier)
165 return out << modifier.address <<
' '
166 << modifier.action <<
' '
167 << modifier.key <<
' '
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) {
381 cpu.
getNPE(T_ns.getUpperLimit()),
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;
Data structure for detector geometry and calibration.
int main(int argc, char **argv)
General purpose messaging.
#define DEBUG(A)
Message macros.
PMT analogue signal processor.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Auxiliary class to define a range between two values.
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.
void convertHitProbabilityToQE(const double mu)
Convert the hit probabilities to QEs for given expectation value.
const JPMTParameters & getDefaultPMTParameters() const
Get default PMT parameters.
Data structure for PMT parameters.
JProperties getProperties(const JEquationParameters &equation=JPMTParameters::getEquationParameters())
Get properties of this class.
Data structure for PMT physical address.
char ring
ring number ['A','F']
int position
position within ring [1,6]
int getTDC() const
Get TDC.
const T & getValue(const std::string &key) const
Get value.
virtual const char * what() const override
Get error message.
int getID() const
Get identifier.
Utility class to parse command line options.
Auxiliary class to assign a custom value following the reading of a specific textual value.
std::istream & operator>>(std::istream &in, JAHRSCalibration &calibration)
Read AHRS calibration from input stream.
std::ostream & operator<<(std::ostream &out, const JAHRSCalibration &calibration)
Write AHRS calibration to output stream.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
bool hasDetectorAddressMap(const int id)
Check if detector address map is available.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Type definition of range.
PMT analogue signal processor.
virtual double getNPE(const double tot_ns) const override
Get number of photo-electrons.
double getIntegralOfChargeProbability(const double xmin, const double xmax, const int NPE) const
Get integral of probability.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...