Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JEditTripod.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <iomanip>
3 #include <vector>
4 
5 #include "JDetector/JTripod.hh"
6 
7 #include "JSupport/JMeta.hh"
8 
9 #include "Jeep/JContainer.hh"
10 #include "Jeep/JPrint.hh"
11 #include "Jeep/JParser.hh"
12 #include "Jeep/JMessage.hh"
13 
14 
15 namespace {
16 
17  using namespace JPP;
18 
19  static const std::string set_t = "set"; //!< Set position
20  static const std::string add_t = "add"; //!< Add position
21  static const std::string sub_t = "sub"; //!< Subtract position
22 
23  /**
24  * Auxiliary class to apply tripod modifications.
25  */
26  class JModifier {
27  public:
28  /**
29  * Default constructor.
30  */
31  JModifier()
32  {}
33 
34 
35  /**
36  * Apply modification to given tripod.
37  *
38  * \param tripod tripod
39  * \return true if valid action; else false
40  */
41  bool apply(JTripod& tripod) const
42  {
43  if (action == set_t)
44  tripod.setUTMPosition(pos);
45  else if (action == add_t)
46  tripod.add(pos);
47  else if (action == sub_t)
48  tripod.sub(pos);
49  else
50  return false;
51 
52  return true;
53  }
54 
55 
56  /**
57  * Read modifier from input.
58  *
59  * \param in input stream
60  * \param modifier modifier
61  * \return input stream
62  */
63  friend inline std::istream& operator>>(std::istream& in, JModifier& modifier)
64  {
65  return in >> modifier.id >> modifier.action >> modifier.pos;
66  }
67 
68 
69  /**
70  * Write modifier to output.
71  *
72  * \param out output stream
73  * \param modifier modifier
74  * \return output stream
75  */
76  friend inline std::ostream& operator<<(std::ostream& out, const JModifier& modifier)
77  {
78  out << modifier.id;
79  out << ' ';
80  out << modifier.action;
81  out << ' ';
82  out << modifier.pos;
83 
84  return out;
85  }
86 
87 
88  int id;
89  std::string action;
90  JUTMPosition pos;
91  };
92 }
93 
94 /**
95  * \file
96  *
97  * Auxiliary program to modify tripod configuration.
98  *
99  * Syntax:
100  * <pre>
101  * -T "<tripod identifier> (set|add|sub) east north z"
102  * </pre>
103  *
104  * \author mdejong
105  */
106 int main(int argc, char **argv)
107 {
108  using namespace std;
109  using namespace JPP;
110 
111  typedef JContainer< vector<JTripod> > tripods_container;
112 
113  string tripodFile;
114  vector<JModifier> mod;
115  int debug;
116 
117  try {
118 
119  JParser<> zap("Auxiliary program to modify tripod configuration.");
120 
121  zap['f'] = make_field(tripodFile, "tripod file");
122  zap['T'] = make_field(mod, "tripod modifier") = JPARSER::initialised();
123  zap['d'] = make_field(debug) = 1;
124 
125  zap(argc, argv);
126  }
127  catch(const exception &error) {
128  FATAL(error.what() << endl);
129  }
130 
131  tripods_container tripods;
132 
133  tripods.load(tripodFile.c_str());
134 
135  tripods.comment.add(JMeta(argc, argv));
136 
137  for (vector<JModifier>::const_iterator i = mod.begin(); i != mod.end(); ++i) {
138 
139  for (tripods_container::iterator tripod = tripods.begin(); tripod != tripods.end(); ++tripod) {
140 
141  if (tripod->getID() == i->id) {
142 
143  DEBUG("Modifier" << ' '
144  << "(" << FILL(2,'0') << tripod->getID() << FILL() << ")" << ' '
145  << "action" << ' ' << i->pos << endl);
146 
147  if (!i->apply(*tripod)) {
148  ERROR("No valid action: " << *i << endl);
149  }
150  }
151  }
152  }
153 
154  tripods.store(tripodFile.c_str());
155 }
Auxiliary class for ROOT I/O of application specific meta data.
Definition: JMeta.hh:70
Utility class to parse command line options.
Definition: JParser.hh:1500
JUTMPosition & sub(const JUTMPosition &pos)
Subtract UTM position.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:66
void setUTMPosition(const JUTMPosition &position)
Set UTM position.
Definition: JUTMPosition.hh:95
Data structure for UTM position.
Definition: JUTMPosition.hh:36
I/O formatting auxiliaries.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
Definition: JContainer.hh:39
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
int getID() const
Get identifier.
Definition: JObjectID.hh:50
ROOT I/O of application specific meta data.
#define ERROR(A)
Definition: JMessage.hh:66
int debug
debug level
Definition: JSirene.cc:63
General purpose messaging.
Auxiliary data structure for sequence of same character.
Definition: JManip.hh:327
#define FATAL(A)
Definition: JMessage.hh:67
std::istream & operator>>(std::istream &in, JAANET::JHead &header)
Read header from input.
Definition: JHead.hh:1549
Utility class to parse command line options.
Data structure for tripod.
Definition: JTripod.hh:32
std::ostream & operator<<(std::ostream &stream, const CLBCommonHeader &header)
JUTMPosition & add(const JUTMPosition &pos)
Add UTM position.
Data structure for tripod.
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
Definition: JCanberra.sh:36
Container I/O.
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
int main(int argc, char *argv[])
Definition: Main.cpp:15