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 template<
class JAddress_t>
97 if (this->action ==
"set") {
101 }
else if (this->action ==
"add") {
105 }
else if (this->action ==
"sub") {
109 }
else if (this->action ==
"mul") {
113 }
else if (this->action ==
"div") {
122 catch(
const std::exception& error) {
123 cerr << error.what() << endl;
138 friend inline std::istream&
operator>>(std::istream&
in, JModifier& modifier)
140 return in >> modifier.address
154 friend inline std::ostream&
operator<<(std::ostream& out,
const JModifier& modifier)
156 return out << modifier.address <<
' '
157 << modifier.action <<
' '
158 << modifier.key <<
' '
191 int main(
int argc,
char **argv)
210 JParser<> zap(
"Auxiliary program to edit PMT parameters map.");
212 zap[
'a'] =
make_field(detectorFile,
"detector file.") =
"";
213 zap[
'D'] =
make_field(detectorID,
"detector identifier (in absence of detector file).") = 0;
217 zap[
'E'] =
make_field(mu,
"expectation value for npe given two-fold coincidence") = 0.0;
218 zap[
'T'] =
make_field(T_ns,
"time-over-threshold range.") = JRange_t();
224 catch(
const exception &error) {
225 FATAL(error.what() << endl);
229 if (detectorFile !=
"") {
236 load(detectorFile, detector);
242 if (detectorID == 0) {
244 detectorID = detector.
getID();
246 }
else if (detectorID != detector.
getID()) {
248 FATAL(
"Inconsistent detector identifier " << detectorID <<
" != " << detector.
getID() << endl);
252 for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
254 for (
unsigned int pmt = 0; pmt != module->size(); ++pmt) {
258 if (parameters.find(
id) == parameters.end()) {
260 DEBUG(
"Setting default parameters for PMT " <<
id << endl);
262 parameters[id] = parameters.getDefaultPMTParameters();
271 FATAL(
"Invalid detector identifier " << detectorID << endl);
276 for (JPMTParametersMap::iterator ps = parameters.begin(); ps != parameters.end(); ++ps) {
280 for (
vector< JModifier<JPMTPhysicalAddress> >::const_iterator i = mod.begin(); i != mod.end(); ++i) {
282 if (compare(i->address, address)) {
284 DEBUG(
"Modifying parameters for PMT " << ps->first <<
' ' << i->action <<
' ' << i->key <<
' ' << i->value << endl);
286 if (!i->apply(ps->second)) {
287 ERROR(
"No valid action: " << *i << endl);
296 for (JPMTParametersMap::iterator ps = parameters.begin(); ps != parameters.end(); ++ps) {
298 for (
vector< JModifier<JPMTIdentifier> >::const_iterator i = daq.begin(); i != daq.end(); ++i) {
300 if (compare(ps->first, i->address)) {
302 DEBUG(
"Modifying parameters for PMT " << ps->first <<
' ' << i->action <<
' ' << i->key <<
' ' << i->value << endl);
304 if (!i->apply(ps->second)) {
305 ERROR(
"No valid action: " << *i << endl);
315 DEBUG(
"Correct measured QE for two-hit probability " << mu << endl);
318 parameters.convertHitProbabilityToQE(mu);
324 }
else if (mu < 0.0) {
326 FATAL(
"Invalid expection value for two-hit probability " << mu << endl);
330 if (T_ns != JRange_t()) {
332 DEBUG(
"Correct measured QE for time-over-threshold range " << T_ns << endl);
336 for (JPMTParametersMap::iterator i = parameters.begin(); i != parameters.end(); ++i) {
341 cpu.
getNPE(T_ns.getUpperLimit(), NPE),
345 cpu.
getNPE(T_ns.getUpperLimit(), NPE),
353 parameters.comment.add(
JMeta(argc, argv));
357 out << parameters << endl;
Utility class to parse command line options.
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.
const T & getValue(const std::string &key) const
Get value.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int getID() const
Get identifier.
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.
virtual double getNPE(const double tot_ns, const double eps=1.0e-3) const
Get number of photo-electrons.
std::istream & operator>>(std::istream &in, JAANET::JHead &header)
Read header from input.
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.
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
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
#define DEBUG(A)
Message macros.
int main(int argc, char *argv[])