Jpp  19.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JEditTripod.cc File Reference

Auxiliary program to modify tripod configuration. More...

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <set>
#include <algorithm>
#include "TRandom3.h"
#include "JDetector/JTripod.hh"
#include "JSupport/JMeta.hh"
#include "JLang/JComparator.hh"
#include "JLang/JComparison.hh"
#include "Jeep/JContainer.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to modify tripod configuration.

Syntax:

    -T "<tripod identifier>     (set|add|sub)    East North depth"
    -T "<tripod identifier>     (setx|addx|subx) East"
    -T "<tripod identifier>     (sety|addy|suby) North"
    -T "<tripod identifier>     (setz|addz|subz) depth"

The options

    -A "<tripod identifier> East North depth"
    -r "<tripod identifier>"
    -k "<tripod identifier>"

can be used to add, remove and keep a specific tripod, respectively.

Author
mdejong

Definition in file JEditTripod.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 232 of file JEditTripod.cc.

233 {
234  using namespace std;
235  using namespace JPP;
236 
237  typedef JContainer< vector<JTripod> > container_type;
238 
239  string inputFile;
240  string outputFile;
241  vector<JModifier> mod;
242  vector<JTripod> add;
243  set<int> rm;
244  set<int> keep;
245  bool squash;
246  int debug;
247 
248  try {
249 
250  JParser<> zap("Auxiliary program to modify tripod configuration.");
251 
252  zap['f'] = make_field(inputFile, "tripod input file");
253  zap['o'] = make_field(outputFile, "tripod output file");
254  zap['T'] = make_field(mod, "tripod modifier") = JPARSER::initialised();
255  zap['A'] = make_field(add, "add tripod") = JPARSER::initialised();
256  zap['r'] = make_field(rm, "remove tripod[s]") = JPARSER::initialised();
257  zap['k'] = make_field(keep, "keep tripod[s]") = JPARSER::initialised();
258  zap['q'] = make_field(squash, "squash meta data");
259  zap['d'] = make_field(debug, "debug level") = 2;
260 
261  zap(argc, argv);
262  }
263  catch(const exception &error) {
264  FATAL(error.what() << endl);
265  }
266 
267  gRandom->SetSeed(0);
268 
269 
270  if (!rm.empty() && !keep.empty()) {
271  FATAL("Use either option -K or -D." << endl);
272  }
273 
274  container_type data;
275 
276  if (inputFile != "") {
277  try {
278  data.load(inputFile.c_str());
279  }
280  catch(const exception& error) {
281  //FATAL(error.what() << endl);
282  }
283  }
284 
285  if (squash) {
286  data.comment.clear();
287  }
288 
289  data.comment.add(JMeta(argc, argv));
290 
291  for (vector<JTripod>::const_iterator i = add.begin(); i != add.end(); ++i) {
292  data.push_back(*i);
293  }
294 
295  for (vector<JModifier>::const_iterator i = mod.begin(); i != mod.end(); ++i) {
296 
297  for (container_type::iterator target = data.begin(); target != data.end(); ++target) {
298 
299  if (target->getID() == i->id || i->id == WILDCARD) {
300 
301  DEBUG("Modifier" << ' '
302  << "(" << FILL(2,'0') << target->getID() << FILL() << ")" << ' '
303  << i->action << ' ' << JEEPZ() << i->data << endl);
304 
305  if (!i->apply(*target)) {
306  ERROR("No valid action: " << *i << endl);
307  }
308  }
309  }
310  }
311 
312  if (!rm.empty()) {
313  for (container_type::iterator target = data.begin(); target != data.end(); ) {
314  if (rm.count(target->getID()) != 0)
315  target = data.erase(target);
316  else
317  ++target;
318  }
319  }
320 
321  if (!keep.empty()) {
322  for (container_type::iterator target = data.begin(); target != data.end(); ) {
323  if (keep.count(target->getID()) == 0)
324  target = data.erase(target);
325  else
326  ++target;
327  }
328  }
329 
330  sort(data.begin(), data.end(), make_comparator(&JTripod::getID));
331 
332  data.store(outputFile.c_str());
333 }
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:1711
Target.
Definition: JHead.hh:298
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:84
string outputFile
static const char WILDCARD
Definition: JDAQTags.hh:56
then rm
Definition: sftpput.zsh:30
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:2158
#define ERROR(A)
Definition: JMessage.hh:66
Auxiliary data structure for streaming of STL containers.
Definition: JPrint.hh:65
Auxiliary data structure for sequence of same character.
Definition: JManip.hh:328
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62