44 static const int WILDCARD = -1;
70 static const std::string randset_t = rand_t + set_t;
71 static const std::string randadd_t = rand_t + add_t;
72 static const std::string randsub_t = rand_t + sub_t;
73 static const std::string randrot_t = rand_t + rot_t;
74 static const std::string randmul_t = rand_t + mul_t;
75 static const std::string randdiv_t = rand_t + div_t;
76 static const std::string randtilt_t = rand_t + tilt_t;
94 if (action == reset_t) {
103 for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt) {
108 }
else if (action == RESET_t) {
133 if (action == set_t) {
137 }
else if (action == setx_t) {
141 }
else if (action == addx_t) {
145 }
else if (action == subx_t) {
149 }
else if (action == sety_t) {
153 }
else if (action == addy_t) {
157 }
else if (action == suby_t) {
161 }
else if (action == setz_t) {
165 }
else if (action == addz_t) {
169 }
else if (action == subz_t) {
173 }
else if (action == add_t) {
177 }
else if (action == sub_t) {
181 }
else if (action == rot_t) {
191 }
else if (action == mul_t) {
206 }
else if (action == div_t) {
221 }
else if (action == SET_t) {
225 }
else if (action == ADD_t) {
229 }
else if (action == SUB_t) {
233 }
else if (action == ROT_t) {
237 }
else if (action == randadd_t) {
239 module.
add(gRandom->Gaus(0.0, value));
241 }
else if (action == randsub_t) {
243 module.
sub(gRandom->Gaus(0.0, value));
245 }
else if (action == randrot_t){
255 }
else if (action == randmul_t) {
263 }
else if (action == randdiv_t) {
271 }
else if (action == assign_t) {
273 module.
setID((
int) value);
299 if (action == tilt_t) {
301 const double Tx =
first;
302 const double Ty = second;
303 const double Tz = sqrt(1.0 - Tx*Tx - Ty*Ty);
305 const double x = Tx * module.
getZ() + module.
getX();
306 const double y = Ty * module.
getZ() + module.
getY();
307 const double z = Tz * module.
getZ();
311 }
else if (action == locate_t) {
315 }
else if (action == swap_t) {
317 std::swap(module[(
int) first], module[(
int) second]);
339 gRandom->Gaus(0.0, pos.
getY()),
340 gRandom->Gaus(0.0, pos.
getZ()));
344 else if (action == add_t)
346 else if (action == sub_t)
348 else if (action == randset_t)
350 else if (action == randadd_t)
352 else if (action == randsub_t)
373 else if (action == ADD_t)
375 else if (action == SUB_t)
400 else if (action == reset_t)
407 catch(
const std::exception&) {
427 else if (action == reset_t)
434 catch(
const std::exception&) {
458 return (action !=
"" && !
data.empty());
468 bool apply(
JModule& module)
const
470 switch (
data.size()) {
473 return ::apply(module, action);
476 return ::apply(module, action,
data[0]);
479 return ::apply(module, action,
data[0],
data[1]);
500 friend inline std::istream&
operator>>(std::istream&
in, JModifier& modifier)
502 if (in >> modifier.action) {
504 modifier.data.clear();
506 for (
double x; in >>
x; ) {
507 modifier.data.push_back(x);
510 in.clear(std::ios_base::eofbit);
524 friend inline std::ostream&
operator<<(std::ostream& out,
const JModifier& modifier)
526 out << modifier.action;
551 inline const JModifier& getModifier(
const int id,
const JModifier& modifier)
557 const string::size_type pos = modifier.action.find(rand_t);
559 if (pos != string::npos) {
561 JModifier&
result = buffer[id][modifier.action][modifier.data.size()];
563 if (!result.is_valid()) {
565 result.action = modifier.action.substr(pos + rand_t.length());
567 for (
size_t i = 0;
i != modifier.data.size(); ++
i) {
568 result.data.push_back(gRandom->Gaus(0.0, modifier.data[
i]));
584 struct JModuleModifier {
598 bool apply(
JModule& module)
const
600 return ::apply(module, action, value);
611 friend inline std::istream&
operator>>(std::istream& in, JModuleModifier& modifier)
613 return in >> modifier.action >> modifier.value;
624 friend inline std::ostream&
operator<<(std::ostream& out,
const JModuleModifier& modifier)
626 out << modifier.action;
628 out << modifier.value;
642 struct JPMTModifier {
656 bool apply(
JPMT& pmt)
const
658 return ::apply(pmt, action, value);
669 friend inline std::istream&
operator>>(std::istream& in, JPMTModifier& modifier)
671 return in >> modifier.action >> modifier.value;
682 friend inline std::ostream&
operator<<(std::ostream& out,
const JPMTModifier& modifier)
684 out << modifier.action;
686 out << modifier.value;
708 static const char SEPARATOR =
'-';
727 if (in >> range.
first) {
731 if (in.peek() == (int) JRange_t::SEPARATOR) {
756 return out << range.
first << JRange_t::SEPARATOR << range.
second;
768 inline void print(std::ostream& out,
const JModule& module,
const JModifier& modifier)
773 out <<
"Modifier" <<
' '
775 << setw(10) << module.
getID() <<
' '
776 <<
"action " << modifier << endl;
792 out <<
"module modifier" <<
' '
793 <<
"(" << setw(10) <<
id.getID() <<
")" <<
' '
794 <<
"action" <<
' ' << modifier.action <<
' '
795 <<
"value" <<
' ' << modifier.value << endl;
806 inline void print(std::ostream& out,
const JPMTIdentifier& pmt,
const JPMTModifier& modifier)
811 out <<
"PMT modifier" <<
' '
812 <<
"(" << setw(10) << pmt.
getID() <<
"," << setw(2) << pmt.
getPMTAddress() <<
")" <<
' '
813 <<
"action" <<
' ' << modifier.action <<
' '
814 <<
"value" <<
' ' << modifier.value << endl;
916 int main(
int argc,
char **argv)
930 JModuleModifier> > wip;
945 JParser<> zap(
"Auxiliary program to modify detector.");
960 zap[
'O'] =
make_field(option,
"sort modules: "\
961 "0 -> no sort; 1 -> module identifier; 2 -> module location") = 0, 1, 2;
962 zap[
'q'] =
make_field(squash,
"squash meta data");
967 catch(
const exception &error) {
968 FATAL(error.what() << endl);
973 const int ns = ((keep.empty() ? 0 : 1) +
974 (
rm .empty() ? 0 : 1) +
975 (
id .empty() ? 0 : 1) +
976 (del .empty() ? 0 : 1));
979 FATAL(
"Use either option -k, -r, -m or -D." << endl);
997 if (
detector.setToLatestVersion()) {
998 NOTICE(
"Set detector version to " <<
detector.getVersion() << endl);
1012 istringstream
is(*
i);
1025 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ) {
1027 bool __rm__ = !keep.empty() &&
rm.empty();
1042 __rm__ = find(
id.begin(),
id.end(), module->
getID()) ==
id.end();
1045 const auto range = del.equal_range(module->
getString());
1063 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
1065 if (module->
getID() ==
i->first ||
i->first == WILDCARD ){
1068 print(cout, *module,
i->second);
1071 if (!
i->second.apply(*module)) {
1072 ERROR(
"No valid action: " <<
i->first <<
' ' <<
i->second << endl);
1081 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
1083 if (module->
getString() ==
i->first ||
i->first == WILDCARD) {
1085 const JModifier modifier = getModifier(module->
getString(),
i->second);
1088 print(cout, *module,
i->second);
1091 if (!modifier.apply(*module)) {
1092 ERROR(
"No valid action: " <<
i->first <<
' ' <<
i->second << endl);
1101 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
1105 if (module->
getString() ==
i->first ||
i->first == WILDCARD) {
1107 const JModifier modifier = getModifier(module->
getString(),
i->second);
1110 print(cout, *module,
i->second);
1113 if (!modifier.apply(*module)) {
1114 ERROR(
"No valid action: " <<
i->first <<
' ' <<
i->second << endl);
1124 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
1126 if (module->
getID() ==
i->first ||
i->first == WILDCARD ){
1129 print(cout, *module,
i->second);
1132 if (!
i->second.apply(*module)) {
1133 ERROR(
"No valid action: " <<
i->first <<
' ' <<
i->second << endl);
1142 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
1144 if (module->
getID() ==
i->first.getModuleID() ||
i->first.getModuleID() == WILDCARD) {
1147 print(cout,
i->first,
i->second);
1150 if (
i->first.getPMTAddress() == WILDCARD) {
1153 if (!
i->second.apply(module->
getPMT(pmt))) {
1154 ERROR(
"No valid action: " <<
i->first <<
' ' <<
i->second << endl);
1158 }
else if (
i->first.getPMTAddress() >= 0 &&
1160 !
i->second.apply(module->
getPMT(
i->first.getPMTAddress()))) {
1161 ERROR(
"No valid action: " <<
i->first <<
' ' <<
i->second << endl);
1171 FATAL(
"Invalid detector identifier " <<
detector.getID() << endl);
1176 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
1185 print(cout,
id,
i->second);
1188 if (!
i->second.apply(module->
getPMT(
id.getPMTAddress()))) {
1189 ERROR(
"No valid action: " <<
i->first <<
' ' <<
i->second << endl);
Utility class to parse command line options.
static const JGetPMTStatusBit getPMTStatusBit
Function object to map key to PMT status bit.
Q(UTCMax_s-UTCMin_s)-livetime_s
int main(int argc, char *argv[])
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
int getFloor() const
Get floor number.
Data structure for a composite optical module.
JQuaternion3D getConjugate() const
Get conjugate of this quaternion.
void setLocation(const JLocation &location)
Set location.
const JCalibration & getCalibration() const
Get calibration.
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
bool is_valid(const json &js)
Check validity of JSon data.
bool hasDetectorAddressMap(const int id)
Check if detector address map is available.
Utility class to parse parameter values.
std::iterator_traits< T >::value_type getAverage(T __begin, T __end)
Get average.
int getNumberOfPMTs(const JModule &module)
Get number of PMTs.
void subT0(const double t0)
Subtract time offset.
Lookup table for PMT addresses in detector.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Data structure for time calibration.
static const JGetModuleStatusBit getModuleStatusBit
Function object to map key to module status bit.
JRange_t()
Default constructor.
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
const JQuaternion3D & getQuaternion() const
Get quaternion.
JModule & sub(const JVector3D &pos)
Subtract position.
Lookup table for PMT addresses in optical module.
int getStatus() const
Get status.
Type definition of range.
I/O formatting auxiliaries.
Data structure for vector in three dimensions.
void setQuaternion(const JQuaternion3D &quaternion)
Set quaternion.
Logical location of module.
const JLocation & getLocation() const
Get location.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values.
int getID() const
Get identifier.
Auxiliary class for handling status.
This class represents a rotation around the z-axis.
Data structure for PMT geometry, calibration and status.
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
JPosition3D getPosition(const Vec &pos)
Get position.
int getPMTAddress() const
Get PMT address (= TDC).
double getY() const
Get y position.
const JPosition3D & getPosition() const
Get position.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
const JPMT & getPMT(const int index) const
Get PMT.
void rotate(const JRotation3D &R)
Rotate module.
General purpose messaging.
void setStatus(const JStatus &status)
Set status.
Data structure for unit quaternion in three dimensions.
Direct access to module in detector data structure.
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
int getString() const
Get string number.
std::istream & operator>>(std::istream &in, JAANET::JHead &header)
Read header from input.
const JPMTAddressTranslator & getAddressTranslator(const int tdc) const
Get PMT address translator.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
void setT0(const double t0)
Set time offset.
Auxiliary class to define a range between two values.
Utility class to parse command line options.
Auxiliary class for object identification.
Wrapper class around string.
void setCalibration(const JCalibration &cal)
Set calibration.
void setID(const int id)
Set identifier.
double getX() const
Get x position.
Base class for data structures with artithmetic capabilities.
void addT0(const double t0)
Add time offset.
Data structure for position in three dimensions.
Data structure for PMT physical address.
JQuaternion3D & normalise()
Normalise quaternion.
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 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
JModule & set(const JVector3D &pos)
Set position.
double getZ() const
Get z position.
JModule & add(const JVector3D &pos)
Add position.
double getT0() const
Get time offset.
static const std::string string_t
string