29 static const char WILDCARD_RING =
'*';
30 static const int WILDCARD_POSITION = -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)) ||
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 <<
' '
209 int main(
int argc,
char **argv)
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);
254 parameters.comment.clear();
257 parameters.comment.add(
JMeta(argc,argv));
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);
264 if (!
i->apply(parameters.getDefaultPMTParameters())) {
265 ERROR(
"No valid action: " << *
i << endl);
269 if (detectorFile !=
"") {
276 load(detectorFile, detector);
282 if (detectorID == 0) {
284 detectorID = detector.
getID();
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);
302 parameters[id] = parameters.getDefaultPMTParameters();
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);
358 parameters.convertHitProbabilityToQE(mu);
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);
401 parameters.comment.add(
JMeta(argc, argv));
405 out << parameters << endl;
Utility class to parse command line options.
int main(int argc, char *argv[])
JParserTemplateElement< JType_t > getOption(JType_t &object, const std::string &name, const std::string &help="")
Auxiliary method for creation of template parser element object.
double getIntegralOfChargeProbability(const double xmin, const double xmax, const int NPE) const
Get integral of probability.
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)...
JProperties getProperties(const JEquationParameters &equation=JPMTParameters::getEquationParameters())
Get properties of this class.
Data structure for detector geometry and calibration.
const JModuleAddressMap & get(const int id) const
Get module address map.
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
int getTDC() const
Get TDC.
static const char WILDCARD
const T & getValue(const std::string &key) const
Get value.
Type definition of range.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int getID() const
Get identifier.
virtual double getNPE(const double tot_ns) const override
Get number of photo-electrons.
Auxiliary class for map of PMT parameters.
char ring
ring number ['A','F']
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
General purpose messaging.
PMT analogue signal processor.
std::istream & operator>>(std::istream &in, JAANET::JHead &header)
Read header from input.
Auxiliary class to assign a custom value following the reading of a specific textual value...
virtual const char * what() const override
Get error message.
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
Utility class to parse command line options.
int position
position within ring [1,6]
PMT analogue signal processor.
Data structure for PMT physical address.
Data structure for PMT parameters.
do set_variable DETECTOR_TXT $WORKDIR detector
#define DEBUG(A)
Message macros.