Jpp  18.2.1
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