Jpp  18.0.0-rc.3
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JEvtSplit.cc File Reference

Auxiliary program for time sorting of Monte-Carlo events. More...

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <deque>
#include <queue>
#include <algorithm>
#include "km3net-dataformat/offline/Head.hh"
#include "km3net-dataformat/offline/MultiHead.hh"
#include "km3net-dataformat/offline/Evt.hh"
#include "JLang/JException.hh"
#include "JSupport/JMeta.hh"
#include "JSupport/JSupport.hh"
#include "JSupport/JFileRecorder.hh"
#include "JSupport/JSingleFileScanner.hh"
#include "JSupport/JTreeScanner.hh"
#include "JSupport/JMonteCarloFileSupportkit.hh"
#include "Jeep/JeepToolkit.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 for time sorting of Monte-Carlo events.

Author
mdejong

Definition in file JEvtSplit.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 54 of file JEvtSplit.cc.

55 {
56  using namespace std;
57  using namespace JPP;
58 
59  typedef typename JTYPELIST<Head, MultiHead, Evt, JMeta>::typelist typelist;
60 
61  string inputFile;
62  string outputFile;
63  size_t numberOfFiles;
64  Long64_t autoflush;
65  int debug;
66 
67  try {
68 
69  JParser<> zap("Auxiliary program for time sorting of Monte-Carlo events.");
70 
71  zap['f'] = make_field(inputFile);
72  zap['o'] = make_field(outputFile, "If number of files > " << 1
73  << ", file name should contain wild card \'" << FILENAME_WILD_CARD << "\'");
74  zap['N'] = make_field(numberOfFiles) = 1;
75  zap['R'] = make_field(autoflush) = 1000;
76  zap['d'] = make_field(debug) = 2;
77 
78  zap(argc, argv);
79  }
80  catch(const exception& error) {
81  FATAL(error.what() << endl);
82  }
83 
84 
85  if (numberOfFiles == 0) {
86  numberOfFiles = 1;
87  }
88 
89  if (numberOfFiles > 1 && !hasWildCard(outputFile)) {
90  FATAL("Output file name should contain wildcard \'" << FILENAME_WILD_CARD << "\'" << endl);
91  }
92 
93  JTreeScanner<Evt> in(inputFile);
94 
95  counter_type number_of_events = in.getEntries();
96 
97  counter_type ns = (number_of_events + numberOfFiles - 1) / numberOfFiles;
98  counter_type ni = 0;
99 
100  vector<Evt> buffer;
101 
102  for (size_t i = 0; i != numberOfFiles; ++i, ni += ns) {
103 
104  const JLimit limit(ni, min(ni + ns, number_of_events));
105 
106  const string filename(hasWildCard(outputFile) ? setWildCard(outputFile, to_string(i)) : outputFile);
107 
108  STATUS("Processing " << filename << ' ' << limit << "." << flush);
109 
110  buffer.clear();
111 
112  for (in.setLimit(limit); in.hasNext(); ) {
113  buffer.push_back(*in.next());
114  }
115 
116  STATUS("." << flush);
117 
118  sort(buffer.begin(), buffer.end(), JCompare_t());
119 
120  STATUS("." << flush);
121 
122  JFileRecorder<typelist> out(filename.c_str());
123 
124  out.open();
125 
126  dynamic_cast<JTreeWriterObjectOutput<Evt>&>(*out).getTreeWriter().SetAutoFlush(autoflush);
127 
128  out.put(JMeta(argc, argv));
129 
130  for (const auto& evt : buffer) {
131  out.put(evt);
132  }
133 
134  if (i == 0) {
135 
137 
138  io >> out;
139  }
140 
141  out.close();
142 
143  STATUS("OK" << endl);
144  }
145 
146  return 0;
147 }
Auxiliary class for ROOT I/O of application specific meta data.
Definition: JMeta.hh:70
Object writing to file.
Utility class to parse command line options.
Definition: JParser.hh:1514
#define STATUS(A)
Definition: JMessage.hh:63
std::vector< size_t > ns
Long64_t counter_type
Type definition for counter.
string outputFile
Type list.
Definition: JTypeList.hh:22
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
#define FATAL(A)
Definition: JMessage.hh:67
std::string setWildCard(const std::string &file_name, const std::string &value)
Get file name by setting wild card to given value.
Definition: JeepToolkit.hh:66
JTreeWriter< T > & getTreeWriter()
Get TreeWriter.
std::string to_string(const T &value)
Convert value to string.
static const char FILENAME_WILD_CARD
wild card character for file name substitution
Definition: JeepToolkit.hh:44
virtual void open(const char *file_name) override
Open file.
Object reading from a list of files.
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
bool hasWildCard(const std::string &file_name)
Check presence of wild card.
Definition: JeepToolkit.hh:53