21 #include "HepMC3/ReaderFactory.h" 31 #ifdef HEPMCCONVERT_EXTENSION_ROOTTREEOPAL 33 #warning "HEPMCCONVERT_EXTENSION_ROOTTREEOPAL requires compilation with of HepMC with ROOT, i.e. HEPMC3_ROOTIO.This extension will be disabled." 34 #undef HEPMCCONVERT_EXTENSION_ROOTTREEOPAL 39 #ifdef HEPMCCONVERT_EXTENSION_HEPEVTZEUS 42 #ifdef HEPMCCONVERT_EXTENSION_DOT 45 #ifdef HEPMCCONVERT_EXTENSION_GZ 53 enum formats {autodetect, hepmc2, hepmc3, hpe ,root, treeroot ,treerootopal, hpezeus, lhef, dump, dot, gz, plugin, none};
54 int main(
int argc,
char** argv)
56 gengetopt_args_info ai;
57 if (cmdline_parser (argc, argv, &ai) != 0) {
62 printf(
"Exactly two arguments are requred: the name of input and output files\n");
65 std::map<std::string,formats> format_map;
66 format_map.insert(std::pair<std::string,formats> (
"auto", autodetect ));
67 format_map.insert(std::pair<std::string,formats> (
"hepmc2", hepmc2 ));
68 format_map.insert(std::pair<std::string,formats> (
"hepmc3", hepmc3 ));
69 format_map.insert(std::pair<std::string,formats> (
"hpe", hpe ));
70 format_map.insert(std::pair<std::string,formats> (
"root", root ));
71 format_map.insert(std::pair<std::string,formats> (
"treeroot", treeroot ));
72 format_map.insert(std::pair<std::string,formats> (
"treerootopal", treerootopal ));
73 format_map.insert(std::pair<std::string,formats> (
"hpezeus", hpezeus ));
74 format_map.insert(std::pair<std::string,formats> (
"lhef", lhef ));
75 format_map.insert(std::pair<std::string,formats> (
"dump", dump ));
76 format_map.insert(std::pair<std::string,formats> (
"dot", dot ));
77 format_map.insert(std::pair<std::string,formats> (
"gz", gz ));
78 format_map.insert(std::pair<std::string,formats> (
"plugin", plugin ));
79 format_map.insert(std::pair<std::string,formats> (
"none", none ));
80 std::map<std::string, std::string> options;
81 for (
size_t i=0; i<ai.extensions_given; i++)
83 std::string optarg=std::string(ai.extensions_arg[i]);
84 size_t pos=optarg.find_first_of(
'=');
85 if (pos<optarg.length())
86 options[std::string(optarg,0,pos)]=std::string(optarg,pos+1,optarg.length());
88 long int events_parsed = 0;
89 long int events_limit = ai.events_limit_arg;
90 long int first_event_number = ai.first_event_number_arg;
91 long int last_event_number = ai.last_event_number_arg;
92 long int print_each_events_parsed = ai.print_every_events_parsed_arg;
93 std::string InputPluginLibrary;
94 std::string InputPluginName;
96 std::string OutputPluginLibrary;
97 std::string OutputPluginName;
99 std::shared_ptr<Reader> input_file;
100 bool input_is_stdin=(std::string(ai.inputs[0])==std::string(
"-"));
101 if (input_is_stdin) std::ios_base::sync_with_stdio(
false);
102 bool ignore_writer=
false;
103 switch (format_map.at(std::string(ai.input_format_arg)))
109 input_is_stdin?printf(
"Input format detection for std input has failed\n"):printf(
"Input format detection for file %s has failed\n",ai.inputs[0]);
114 input_file=(input_is_stdin?std::make_shared<ReaderAsciiHepMC2>(std::cin):std::make_shared<
ReaderAsciiHepMC2>(ai.inputs[0]));
117 input_file=(input_is_stdin?std::make_shared<ReaderAscii>(std::cin):std::make_shared<
ReaderAscii>(ai.inputs[0]));
120 input_file=(input_is_stdin?std::make_shared<ReaderHEPEVT>(std::cin):std::make_shared<
ReaderHEPEVT>(ai.inputs[0]));
123 input_file=(input_is_stdin?std::make_shared<ReaderLHEF>(std::cin):std::make_shared<
ReaderLHEF>(ai.inputs[0]));
126 #ifdef HEPMCCONVERT_EXTENSION_GZ 127 input_file=std::make_shared<ReaderGZ>(ai.inputs[0]);
130 printf(
"Input format %s is not supported\n",ai.input_format_arg);
135 input_file=std::make_shared<ReaderRootTree>(ai.inputs[0]);
138 printf(
"Input format %s is not supported\n",ai.input_format_arg);
143 input_file=std::make_shared<ReaderRoot>(ai.inputs[0]);
146 printf(
"Input format %s is not supported\n",ai.input_format_arg);
150 if (options.find(
"InputPluginLibrary")==options.end()) { printf(
"InputPluginLibrary option required\n"); exit(2);}
else InputPluginLibrary=options.at(
"InputPluginLibrary");
151 if (options.find(
"InputPluginName")==options.end()) { printf(
"InputPluginName option required\n"); exit(2);}
else InputPluginName=options.at(
"InputPluginName");
152 input_file=std::make_shared<ReaderPlugin>(std::string(ai.inputs[0]),InputPluginLibrary,InputPluginName);
153 if (input_file->
failed()) { printf(
"Plugin initialization failed\n"); exit(2);}
156 printf(
"Input format %s is not known\n",ai.input_format_arg);
160 std::shared_ptr<Writer> output_file;
161 switch (format_map.at(std::string(ai.output_format_arg)))
164 output_file=std::make_shared<WriterAsciiHepMC2>(ai.inputs[1]);
167 output_file=std::make_shared<WriterAscii>(ai.inputs[1]);
170 output_file=std::make_shared<WriterHEPEVT>(ai.inputs[1]);
174 output_file=std::make_shared<WriterRoot>(ai.inputs[1]);
177 printf(
"Output format %s is not supported\n",ai.output_format_arg);
182 output_file=std::make_shared<WriterRootTree>(ai.inputs[1]);
185 printf(
"Output format %s is not supported\n",ai.output_format_arg);
190 #ifdef HEPMCCONVERT_EXTENSION_ROOTTREEOPAL 191 output_file=std::make_shared<WriterRootTreeOPAL>(ai.inputs[1]);
192 (std::dynamic_pointer_cast<WriterRootTreeOPAL>(output_file))->init_branches();
193 if (options.find(
"Run")!=options.end()) (std::dynamic_pointer_cast<WriterRootTreeOPAL>(output_file))->set_run_number(std::atoi(options.at(
"Run").c_str()));
196 printf(
"Output format %s is not supported\n",ai.output_format_arg);
201 #ifdef HEPMCCONVERT_EXTENSION_HEPEVTZEUS 202 output_file=std::make_shared<WriterHEPEVTZEUS>(ai.inputs[1]);
205 printf(
"Output format %s is not supported\n",ai.output_format_arg);
209 #ifdef HEPMCCONVERT_EXTENSION_DOT 210 output_file=std::make_shared<WriterDOT>(ai.inputs[1]);
211 if (options.find(
"Style")!=options.end()) (std::dynamic_pointer_cast<WriterDOT>(output_file))->set_style(std::atoi(options.at(
"Style").c_str()));
214 printf(
"Output format %s is not supported\n",ai.output_format_arg);
219 if (options.find(
"OutputPluginLibrary")==options.end()) { printf(
"OutputPluginLibrary option required, e.g. OutputPluginLibrary=libAnalysis.so\n"); exit(2);}
else OutputPluginLibrary=options.at(
"OutputPluginLibrary");
220 if (options.find(
"OutputPluginName")==options.end()) { printf(
"OutputPluginName option required, e.g. OutputPluginName=newAnalysisExamplefile\n"); exit(2);}
else OutputPluginName=options.at(
"OutputPluginName");
221 output_file=std::make_shared<WriterPlugin>(std::string(ai.inputs[1]),OutputPluginLibrary,OutputPluginName);
222 if (output_file->
failed()) { printf(
"Plugin initialization failed\n"); exit(2);}
232 printf(
"Output format %s is not known\n",ai.output_format_arg);
236 while( !input_file->
failed() )
240 if( input_file->
failed() ) {
241 printf(
"End of file reached. Exit.\n");
244 if (evt.event_number()<first_event_number)
continue;
245 if (evt.event_number()>last_event_number)
continue;
246 evt.set_run_info(input_file->
run_info());
261 if( events_parsed%print_each_events_parsed == 0 ) printf(
"Events parsed: %li\n",events_parsed);
262 if( events_parsed >= events_limit ) {
263 printf(
"Event limit reached:->events_parsed(%li) >= events_limit(%li)<-. Exit.\n",events_parsed , events_limit);
268 if (input_file) input_file->
close();
269 if (output_file) output_file->
close();
270 cmdline_parser_free(&ai);
GenEvent I/O parsing and serialization for LHEF files.
Definition of class WriterHEPEVT.
Definition of class ReaderHEPEVT.
virtual void write_event(const GenEvent &evt)=0
Write event evt to output target.
Definition of interface Reader.
GenEvent I/O parsing for structured text files.
virtual void close()=0
Close file and/or stream.
virtual bool failed()=0
Get file and/or stream error state.
virtual bool read_event(GenEvent &evt)=0
Fill next event from input into evt.
virtual void close()=0
Close file and/or stream.
Definition of class WriterRootTree.
Definition of class WriterAscii.
GenEvent I/O parsing and serialization for HEPEVT files.
Definition of class ReaderRootTree.
Definition of class ReaderRoot.
std::shared_ptr< Reader > deduce_reader(std::istream &stream)
This function will deduce the type of input stream based on its content and will return appropriate R...
Parser for HepMC2 I/O files.
virtual bool failed()=0
Get file and/or stream error state.
Definition of class ReaderAsciiHepMC2.
Stores event-related information.
Definition of class WriterPlugin.
Definition of class ReaderAscii.
std::shared_ptr< GenRunInfo > run_info() const
Get the global GenRunInfo object.
Definition of class WriterAsciiHepMC2.
Definition of class WriterRoot.
Definition of class ReaderPlugin.
Definition of static class Print.
int main(int argc, char **argv)
Definition of class WriterRootTreeOPAL.
Definition of class WriterDOT.
Definition of class GenEvent.
Definition of class WriterHEPEVTZEUS.
Definition of class ReaderLHEF.
Definition of class ReaderGZ.
static void content(std::ostream &os, const GenEvent &event)
Print content of all GenEvent containers.