38   static const int         WILDCARD    =  -1;
 
   40   static const char        EOL         = 
';';                 
 
   42   static const std::string reset_t     = 
"reset";             
 
   43   static const std::string set_t       = 
"set";               
 
   44   static const std::string add_t       = 
"add";               
 
   45   static const std::string sub_t       = 
"sub";               
 
   46   static const std::string rot_t       = 
"rot";               
 
   47   static const std::string mul_t       = 
"mul";               
 
   48   static const std::string via_t       = 
"via";               
 
   49   static const std::string assign_t    = 
"assign";            
 
   51   static const std::string rand_t      = 
"rand";              
 
   52   static const std::string randset_t   =  rand_t + set_t;     
 
   53   static const std::string randadd_t   =  rand_t + add_t;     
 
   54   static const std::string randsub_t   =  rand_t + sub_t;     
 
   55   static const std::string randrot_t   =  rand_t + rot_t;     
 
   56   static const std::string randmul_t   =  rand_t + mul_t;     
 
   57   static const std::string randvia_t   =  rand_t + via_t;     
 
   59   static const std::string RESET_t     = 
"RESET";             
 
   60   static const std::string SET_t       = 
"SET";               
 
   61   static const std::string ADD_t       = 
"ADD";               
 
   62   static const std::string SUB_t       = 
"SUB";               
 
   86       return (action != 
"" && !data.empty());
 
   96     bool apply(
JModule& module)
 const 
   98       switch (data.size()) {
 
  101         return  apply(module, action);                                                     
 
  104         return  apply(module, action, data[0]);                                            
 
  107         return  apply(module, action, 
JVector3D(data[0], data[1], 0.0));                   
 
  110         return  apply(module, action, 
JVector3D(data[0], data[1], data[2]));               
 
  113         return  apply(module, action, 
JQuaternion3D(data[0], data[1], data[2], data[3]));  
 
  128     friend inline std::istream& 
operator>>(std::istream& 
in, JModifier& modifier)
 
  132       if (in >> modifier.id >> modifier.action) {
 
  134         modifier.data.clear();
 
  136         for (
double x; in >> x; ) {
 
  137           modifier.data.push_back(x);
 
  140         in.clear(ios_base::eofbit);
 
  154     friend inline std::ostream& 
operator<<(std::ostream& out, 
const JModifier& modifier)
 
  158       out << modifier.action;
 
  181     static bool apply(
JModule& module, 
const std::string& action)
 
  183       if        (action == reset_t) {
 
  187         for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt) {
 
  194       } 
else if (action == RESET_t) {
 
  201       } 
else if (action == SET_t) {
 
  225     static bool apply(
JModule& module, 
const std::string& action, 
const double value)
 
  227       if        (action == set_t) {                          
 
  231       } 
else if (action == add_t) {
 
  235       } 
else if (action == sub_t) {
 
  239       } 
else if (action == rot_t) {
 
  249       } 
else if (action == mul_t) {
 
  260       } 
else if (action == via_t) {
 
  264       } 
else if (action == SET_t) {
 
  268       } 
else if (action == ADD_t) {
 
  272       } 
else if (action == SUB_t) {
 
  276       } 
else if (action == randadd_t) {                      
 
  278         module.
add(gRandom->Gaus(0.0, value));
 
  280       } 
else if (action == randsub_t) {
 
  282         module.
sub(gRandom->Gaus(0.0, value));
 
  284       } 
else if (action == randrot_t){
 
  294       } 
else if (action == randmul_t) {
 
  305       } 
else if (action == randvia_t) {
 
  307         module.
add(gRandom->Gaus(0.0, value) * module.
getFloor());
 
  309       } 
else if (action == assign_t) {
 
  311         module.
setID((
int) value);
 
  330     static bool apply(
JModule& module, 
const std::string& action, 
const JVector3D& pos)
 
  333                               gRandom->Gaus(0.0, pos.
getY()),
 
  334                               gRandom->Gaus(0.0, pos.
getZ()));
 
  338       else if (action == add_t)
 
  340       else if (action == sub_t)
 
  342       else if (action == randset_t)                      
 
  344       else if (action == randadd_t)
 
  346       else if (action == randsub_t)
 
  367       else if (action == ADD_t)
 
  369       else if (action == SUB_t)
 
  386   inline const JModifier& getModifier(
const int id, 
const JModifier& modifier)
 
  392     const string::size_type pos = modifier.action.find(rand_t);
 
  394     if (pos != string::npos) {
 
  396       JModifier& 
result = buffer[id][modifier.action][modifier.data.size()];
 
  398       if (!result.is_valid()) {      
 
  401         result.action = modifier.action.substr(pos + rand_t.length());
 
  403         for (
size_t i = 0; i != modifier.data.size(); ++i) {
 
  404           result.data.push_back(gRandom->Gaus(0.0, modifier.data[i]));
 
  420   template<
class JAddress_t>
 
  438     bool apply(
JPMT& pmt)
 const 
  442         if        (action == set_t) {
 
  446         } 
else if (action == reset_t) {
 
  457       catch(
const std::exception&) {}
 
  470     friend inline std::istream& 
operator>>(std::istream& in, JPMTModifier& modifier)
 
  472       return in >> 
static_cast<JAddress_t&
>(modifier) >> modifier.action >> modifier.value;
 
  483     friend inline std::ostream& 
operator<<(std::ostream& out, 
const JPMTModifier& modifier)
 
  485       out << static_cast<const JAddress_t&>(modifier);
 
  487       out << modifier.action;
 
  489       out << modifier.value;
 
  508     static const char SEPARATOR = 
'-';
 
  525     friend inline std::istream& 
operator>>(std::istream& in, JRange_t& 
range)
 
  527       if (in >> range.first) {
 
  529         range.second = range.first;
 
  531         if (in.peek() == (int) JRange_t::SEPARATOR) {
 
  554     friend inline std::ostream& 
operator<<(std::ostream& out, 
const JRange_t& range)
 
  556       return out << range.first << JRange_t::SEPARATOR << range.second;
 
  651 int main(
int argc, 
char **argv)
 
  673     JParser<> zap(
"Auxiliary program to modify detector.");
 
  690   catch(
const exception &error) {
 
  691     FATAL(error.what() << endl);
 
  707   if ((keep.empty() ? 0 : 1  +
 
  708        rm  .empty() ? 0 : 1  +
 
  709        id  .empty() ? 0 : 1) > 1) {
 
  710     FATAL(
"Use either option -k, -r or -m." << endl);
 
  716   if (
detector.setToLatestVersion()) {
 
  717     NOTICE(
"Set detector version to " << 
detector.getVersion() << endl);
 
  726       istringstream 
is(*i);
 
  733   for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ) {
 
  735     bool __rm__ = !keep.empty() && rm.empty();
 
  750       __rm__ = find(
id.begin(), 
id.end(), module->
getID()) == 
id.end();
 
  753     const auto range = del.equal_range(module->
getString());
 
  755     for (
auto i = range.first; i != range.second; ++i) {
 
  756       if (i->second == module->
getFloor()) {
 
  770     for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  772       if (module->
getID() == i->id || i->id == WILDCARD ){
 
  774         DEBUG(
"Modifier"                                                                                                << 
' ' 
  776               << setw(10) << module->
getID()                                                                            << 
' ' 
  777               << 
"action" << 
' ' << i->action << 
JEEPZ() << i->data << endl);
 
  779         if (!i->apply(*module)) {
 
  780           ERROR(
"No valid action: " << *i << endl);
 
  789     for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  791       if (module->
getString() == i->id || i->id == WILDCARD) {
 
  793         const JModifier& modifier = getModifier(module->
getString(), *i);
 
  795         DEBUG(
"Modifier"                                                                                                << 
' ' 
  797               << setw(10) << module->
getID()                                                                            << 
' ' 
  798               << 
"action" << 
' ' << modifier.action << 
JEEPZ() << modifier.data << endl);
 
  800         if (!modifier.apply(*module)) {
 
  801           ERROR(
"No valid action: " << *i << endl);
 
  808   for (
vector< JPMTModifier<JPMTIdentifier> >::const_iterator i = pmt.begin(); i != pmt.end(); ++i) {
 
  810     for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  812       if (module->
getID() == i->getModuleID() || i->getModuleID() == WILDCARD) {
 
  814         DEBUG(
"PMT modifier"                                                                       << 
' ' 
  815               << 
"(" << setw(10) << module->
getID() << 
"," << setw(2) << i->getPMTAddress() << 
")" << 
' ' 
  816               << 
"action" << 
' ' << i->action << 
' '  
  817               << 
"value"  << 
' ' << i->value  << endl);
 
  819         if        (i->getPMTAddress() == WILDCARD) {
 
  822             if (!i->apply(module->
getPMT(pmt))) {
 
  823               ERROR(
"No valid action: " << *i << endl);
 
  827         } 
else if (i->getPMTAddress() <  0                         ||
 
  829                    !i->apply(module->
getPMT(i->getPMTAddress()))) {
 
  830           ERROR(
"No valid action: " << *i << endl);
 
  839       FATAL(
"Invalid detector identifier " << 
detector.getID() << endl);
 
  844     for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  848       for (
vector< JPMTModifier<JPMTPhysicalAddress> >::const_iterator i = alt.begin(); i != alt.end(); ++i) {
 
  852         DEBUG(
"PMT modifier"                                                        << 
' ' 
  853               << 
"(" << setw(10) << module->
getID() << 
"," << setw(2) << tdc << 
")" << 
' ' 
  854               << 
"action" << 
' ' << i->action << 
' '  
  855               << 
"value"  << 
' ' << i->value  << endl);
 
  857         if (!i->apply(module->
getPMT(tdc))) {
 
  858           ERROR(
"No valid action: " << *i << endl);
 
void set(const int bit)
Set PMT status. 
 
Utility class to parse command line options. 
 
static const JGetPMTStatusBit getPMTStatusBit
Function object to map key to PMT status bit. 
 
int main(int argc, char *argv[])
 
int getFloor() const 
Get floor number. 
 
Data structure for a composite optical module. 
 
static const double HYDROPHONE_DELAYTIME_US
Hydrophone delay time [us]. 
 
JQuaternion3D getConjugate() const 
Get conjugate of this quaternion. 
 
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. 
 
Auxiliary class for controlling PMT status. 
 
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. 
 
void reset(const int bit)
Reset PMT status. 
 
Data structure for detector geometry and calibration. 
 
const JModuleAddressMap & get(const int id) const 
Get module address map. 
 
const JQuaternion3D & getQuaternion() const 
Get quaternion. 
 
JModule & sub(const JVector3D &pos)
Subtract position. 
 
Lookup table for PMT addresses in optical module. 
 
I/O formatting auxiliaries. 
 
static const double PIEZO_DELAYTIME_US
Piezo delay time [us]. 
 
Data structure for vector in three dimensions. 
 
void setQuaternion(const JQuaternion3D &quaternion)
Set quaternion. 
 
#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. 
 
bool is_valid(const json &js)
Check validity of JSon data. 
 
Data structure for PMT geometry and calibration. 
 
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file. 
 
JPosition3D getPosition(const Vec &pos)
Get position. 
 
double getY() const 
Get y position. 
 
Auxiliary data structure for streaming of STL containers. 
 
const JPosition3D & getPosition() const 
Get position. 
 
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map. 
 
static const JModule & getInstance()
Get reference to unique instance of this class object. 
 
const JPMT & getPMT(const int index) const 
Get PMT. 
 
void rotate(const JRotation3D &R)
Rotate module. 
 
General purpose messaging. 
 
Auxiliary data structure for sequence of same character. 
 
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi mv $WORKDIR/fit.root $MODULE_ROOT typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
 
Data structure for unit quaternion in three dimensions. 
 
Direct access to module in detector data structure. 
 
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. 
 
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. 
 
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
 
JModule & set(const JVector3D &pos)
Set position. 
 
double getZ() const 
Get z position. 
 
JModule & add(const JVector3D &pos)
Add position. 
 
#define DEBUG(A)
Message macros. 
 
double getT0() const 
Get time offset.