Jpp  18.0.1-rc.2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JMoveTripod.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <fstream>
3 #include <string>
4 #include <iomanip>
5 #include <vector>
6 #include <set>
7 
8 #include "JDetector/JTripod.hh"
9 
10 #include "Jeep/JComment.hh"
11 #include "Jeep/JPrint.hh"
12 #include "Jeep/JParser.hh"
13 #include "Jeep/JMessage.hh"
14 
15 
16 namespace {
17 
18  using namespace JPP;
19 
20  /**
21  * Wild card for tripod identifier.
22  */
23  static const int WILDCARD = -1;
24 
25  static const std::string setx_t = "setx"; //!< Set East"
26  static const std::string sety_t = "sety"; //!< Set North"
27  static const std::string setz_t = "setz"; //!< Set depth
28  static const std::string addx_t = "addx"; //!< Add East"
29  static const std::string addy_t = "addy"; //!< Add North"
30  static const std::string addz_t = "addz"; //!< Add depth
31  static const std::string subx_t = "subx"; //!< Subtract East"
32  static const std::string suby_t = "suby"; //!< Subtract North"
33  static const std::string subz_t = "subz"; //!< Subtract depth
34 
35  /**
36  * Auxiliary class to apply tripod modifications.
37  */
38  struct JModifier {
39  /**
40  * Default constructor.
41  */
42  JModifier()
43  {}
44 
45 
46  /**
47  * Apply modification to given tripod.
48  *
49  * \param tripod tripod
50  * \return true if valid action; else false
51  */
52  bool apply(JTripod& tripod) const
53  {
54  if (action == setx_t)
55  tripod.setUTMPosition(JUTMPosition(value, tripod.getUTMNorth(), tripod.getUTMZ()));
56  else if (action == addx_t)
57  tripod.add(JUTMPosition(value, 0.0, 0.0));
58  else if (action == subx_t)
59  tripod.sub(JUTMPosition(value, 0.0, 0.0));
60  else if (action == sety_t)
61  tripod.setUTMPosition(JUTMPosition(tripod.getUTMEast(), value, tripod.getUTMZ()));
62  else if (action == addy_t)
63  tripod.add(JUTMPosition(0.0, value, 0.0));
64  else if (action == suby_t)
65  tripod.sub(JUTMPosition(0.0, value, 0.0));
66  else if (action == setz_t)
67  tripod.setUTMPosition(JUTMPosition(tripod.getUTMEast(), tripod.getUTMNorth(), value));
68  else if (action == addz_t)
69  tripod.add(JUTMPosition(0.0, 0.0, value));
70  else if (action == subz_t)
71  tripod.sub(JUTMPosition(0.0, 0.0, value));
72  else
73  return false;
74 
75  return true;
76  }
77 
78 
79  /**
80  * Read modifier from input.
81  *
82  * \param in input stream
83  * \param modifier modifier
84  * \return input stream
85  */
86  friend inline std::istream& operator>>(std::istream& in, JModifier& modifier)
87  {
88  return in >> modifier.id >> modifier.action >> modifier.value;
89  }
90 
91 
92  /**
93  * Write modifier to output.
94  *
95  * \param out output stream
96  * \param modifier modifier
97  * \return output stream
98  */
99  friend inline std::ostream& operator<<(std::ostream& out, const JModifier& modifier)
100  {
101  return out << modifier.id << ' ' << modifier.action << ' ' << modifier.value;
102  }
103 
104 
105  int id;
106  std::string action;
107  double value;
108  };
109 }
110 
111 /**
112  * \file
113  *
114  * Auxiliary program to modify tripod configuration.
115  *
116  * Syntax:
117  * <pre>
118  * -T "<tripod identifier> (setx|addx|subx) East"
119  * -T "<tripod identifier> (sety|addy|suby) North"
120  * -T "<tripod identifier> (setz|addz|subz) depth"
121  * </pre>
122  *
123  * \author mdejong
124  */
125 int main(int argc, char **argv)
126 {
127  using namespace std;
128  using namespace JPP;
129 
130  string tripodFile;
131  vector<JModifier> mod;
132  size_t size;
133  int debug;
134 
135  try {
136 
137  JParser<> zap("Auxiliary program to modify tripod configuration.");
138 
139  zap['f'] = make_field(tripodFile, "tripod file I/O");
140  zap['T'] = make_field(mod, "tripod modifier") = JPARSER::initialised();
141  zap['N'] = make_field(size, "internal buffer size") = 500000;
142  zap['d'] = make_field(debug, "debug level") = 2;
143 
144  zap(argc, argv);
145  }
146  catch(const exception &error) {
147  FATAL(error.what() << endl);
148  }
149 
150 
151  fstream io;
152 
153  io.open(tripodFile.c_str(), ios_base::in | ios_base::out);
154 
155  if (!io) {
156  FATAL("Error opening file " << tripodFile << endl);
157  }
158 
159  typedef vector<JTripod> container_type;
160 
161  JComment comment;
162  container_type tripods;
163 
164  io >> comment;
165 
166  for (JTripod tripod; io >> tripod; ) {
167  tripods.push_back(tripod);
168  }
169 
170  if (debug >= debug_t) {
171 
172  cout << comment << endl;
173 
174  for (container_type::const_iterator i = tripods.begin(); i != tripods.end(); ++i) {
175  cout << *i << endl;
176  }
177  }
178 
179  for (vector<JModifier>::const_iterator i = mod.begin(); i != mod.end(); ++i) {
180 
181  for (container_type::iterator target = tripods.begin(); target != tripods.end(); ++target) {
182 
183  if (target->getID() == i->id || i->id == WILDCARD) {
184 
185  DEBUG("Modifier" << ' '
186  << "(" << FILL(2,'0') << target->getID() << FILL() << ")" << ' '
187  << i->action << ' ' << i->value << endl);
188 
189  if (!i->apply(*target)) {
190  ERROR("No valid action: " << *i << endl);
191  }
192  }
193  }
194  }
195 
196  //io.clear();
197  //io.seekp(0, ios_base::beg);
198  io.close();
199  io.open(tripodFile.c_str(), ios_base::trunc | ios_base::out);
200 
201  for (container_type::const_iterator i = tripods.begin(); i != tripods.end(); ++i) {
202  io << *i << endl;
203  }
204 
205  io.close();
206 }
Utility class to parse command line options.
Definition: JParser.hh:1514
debug
Definition: JMessage.hh:29
int main(int argc, char *argv[])
Definition: Main.cc:15
Target.
Definition: JHead.hh:298
JUTMPosition & sub(const JUTMPosition &pos)
Subtract UTM position.
double getUTMEast() const
Get UTM east.
then fatal Number of tripods
Definition: JFootprint.sh:45
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:83
void setUTMPosition(const JUTMPosition &position)
Set UTM position.
Definition: JUTMPosition.hh:95
Data structure for UTM position.
Definition: JUTMPosition.hh:36
double getUTMZ() const
Get UTM Z.
I/O formatting auxiliaries.
double getUTMNorth() const
Get UTM north.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
#define ERROR(A)
Definition: JMessage.hh:66
then awk string
General purpose messaging.
Auxiliary data structure for sequence of same character.
Definition: JManip.hh:328
#define FATAL(A)
Definition: JMessage.hh:67
Auxiliary class for comment.
Definition: JComment.hh:41
std::istream & operator>>(std::istream &in, JAANET::JHead &header)
Read header from input.
Definition: JHead.hh:1814
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 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
Definition: JCanberra.sh:46
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62