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