6 #ifndef Pythia6_Pythia6ToHepMC3_H
7 #define Pythia6_Pythia6ToHepMC3_H
8 #ifdef DUMMYPYTHIA6TOHEPMC3
11 int hepmc3_delete_writer_(
const int & position)
15 int hepmc3_convert_event_(
const int & position)
19 int hepmc3_write_event_(
const int & position)
23 int hepmc3_clear_event_(
const int & position)
27 int hepmc3_set_cross_section_(
const int & position,
const double& x,
const double& xe,
const int& n1,
const int& n2)
32 int hepmc3_set_pdf_info_(
const int & position,
const int& parton_id1,
const int& parton_id2,
const double& x1,
const double& x2,
33 const double& scale_in,
const double& xf1,
const double& xf2,
34 const int& pdf_id1,
const int& pdf_id2)
38 int hepmc3_set_hepevt_address_(
int* a)
42 int hepmc3_set_attribute_int_(
const int & position,
const int & attval,
const char* attname)
46 int hepmc3_set_attribute_double_(
const int & position,
const double & attval,
const char* attname)
50 int hepmc3_new_writer_(
const int & position,
const int & mode,
const char* ffilename)
54 int hepmc3_new_weight_(
const int & position,
const char*
name)
58 int hepmc3_set_weight_by_index_(
const int & position,
const double& val,
const int & pos)
62 int hepmc3_set_weight_by_name_(
const int & position,
const double& val,
const char*
name)
76 #if HEPMC3_VERSION_CODE >= 3002000
83 using namespace HepMC3;
85 std::map<int,std::pair<std::shared_ptr<Writer>,
GenEvent*> > hepmc3_gWriters;
87 std::map<int,std::shared_ptr<GenRunInfo> > hepmc3_gGenRunInfos;
89 GenEvent* hepmc3_gWriters_get_event(
const int & position)
91 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
92 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
95 return hepmc3_gWriters[position].second;
100 int hepmc3_delete_writer_(
const int & position)
102 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
103 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
106 hepmc3_gWriters[position].first->close();
107 hepmc3_gWriters.erase(hepmc3_gWriters.find(position));
111 int hepmc3_convert_event_(
const int & position)
113 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
114 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
119 printf(
"Error in %s: HEPEVT block does not exist\n",__FUNCTION__);
122 hepmc3_gWriters[position].second=
new GenEvent(Units::GEV,Units::MM);
126 hepmc3_gWriters[position].second->set_run_info(hepmc3_gGenRunInfos[position]);
127 hepmc3_gWriters[position].second->weights()=std::vector<double>(hepmc3_gGenRunInfos[position]->weight_names().size(),1.0);
130 int hepmc3_write_event_(
const int & position)
132 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
133 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
136 hepmc3_gWriters[position].first->write_event(*(hepmc3_gWriters[position].second));
139 int hepmc3_clear_event_(
const int & position)
141 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
142 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
145 hepmc3_gWriters[position].second->clear();
148 int hepmc3_set_cross_section_(
const int & position,
const double& x,
const double& xe,
const int& n1,
const int& n2)
150 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
151 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
154 GenCrossSectionPtr cs=std::make_shared< GenCrossSection>();
155 cs->set_cross_section(x,xe,n1,n2);
156 hepmc3_gWriters[position].second->set_cross_section(cs);
160 int hepmc3_set_pdf_info_(
const int & position,
const int& parton_id1,
const int& parton_id2,
const double& x1,
const double& x2,
161 const double& scale_in,
const double& xf1,
const double& xf2,
162 const int& pdf_id1,
const int& pdf_id2)
164 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
165 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
168 GenPdfInfoPtr pdf=std::make_shared< GenPdfInfo>();
169 pdf->set(parton_id1, parton_id2,x1,x2,scale_in,xf1,xf2,pdf_id1, pdf_id2);
170 hepmc3_gWriters[position].second->set_pdf_info(pdf);
175 int hepmc3_set_hepevt_address_(
int* a)
179 printf(
"Info in %s: setting /hepevt/ block adress\n",__FUNCTION__);
185 printf(
"Info in %s: /hepevt/ block adress is already set\n",__FUNCTION__);
189 int hepmc3_set_attribute_int_(
const int & position,
const int & attval,
const char* attname)
191 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
192 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
195 hepmc3_gWriters[position].second->add_attribute(attname,std::make_shared<IntAttribute>(attval));
198 int hepmc3_set_attribute_double_(
const int & position,
const double & attval,
const char* attname)
200 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
201 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
204 hepmc3_gWriters[position].second->add_attribute(attname,std::make_shared<DoubleAttribute>(attval));
208 int hepmc3_new_writer_(
const int & position,
const int & mode,
const char* ffilename)
210 std::string libHepMC3rootIO=
"libHepMC3rootIO.so";
212 libHepMC3rootIO=
"libHepMC3rootIO.dydl";
215 libHepMC3rootIO=
"HepMC3rootIO.dll";
217 std::string filename=std::string(ffilename);
218 int r_position=position;
221 if (hepmc3_gWriters.size()==0) r_position=1;
222 if (hepmc3_gWriters.size()!=0) r_position=hepmc3_gWriters.rend()->first+1;
224 if (hepmc3_gWriters.find(r_position)!=hepmc3_gWriters.end()) {
225 printf(
"Error in %s: Writer at position %i already exists\n",__FUNCTION__,r_position);
228 if (hepmc3_gGenRunInfos.find(r_position)!=hepmc3_gGenRunInfos.end()) {
229 printf(
"Warning in %s: RunInfo at position %i already exists\n",__FUNCTION__,r_position);
233 hepmc3_gGenRunInfos[r_position]=std::make_shared<GenRunInfo>();
239 hepmc3_gWriters[r_position]=std::pair<std::shared_ptr<Writer>,
GenEvent*>(std::make_shared<WriterAscii>(filename.c_str(),hepmc3_gGenRunInfos[position]),
new GenEvent(hepmc3_gGenRunInfos[position],Units::GEV,Units::MM));
242 hepmc3_gWriters[r_position]=std::pair<std::shared_ptr<Writer>,GenEvent*>(std::make_shared<WriterAsciiHepMC2>(filename.c_str(),hepmc3_gGenRunInfos[position]),
new GenEvent(hepmc3_gGenRunInfos[position],Units::GEV,Units::MM));
245 hepmc3_gWriters[r_position]=std::pair<std::shared_ptr<Writer>,GenEvent*>(std::make_shared<WriterHEPEVT>(filename.c_str()),
new GenEvent(hepmc3_gGenRunInfos[position],Units::GEV,Units::MM));
247 #if HEPMC3_VERSION_CODE >= 3002000
249 hepmc3_gWriters[r_position]=std::pair<std::shared_ptr<Writer>,GenEvent*>(std::make_shared<WriterPlugin>(filename.c_str(),libHepMC3rootIO,std::string(
"newWriterRootfile"),hepmc3_gGenRunInfos[position]),
new GenEvent(hepmc3_gGenRunInfos[position],Units::GEV,Units::MM));
252 hepmc3_gWriters[r_position]=std::pair<std::shared_ptr<Writer>,GenEvent*>(std::make_shared<WriterPlugin>(filename.c_str(),libHepMC3rootIO,std::string(
"newWriterRootTreefile"),hepmc3_gGenRunInfos[position]),
new GenEvent(hepmc3_gGenRunInfos[position],Units::GEV,Units::MM));
256 printf(
"Error in %s:Output format %d is unknown or not supported.\n",__FUNCTION__,mode);
262 int hepmc3_new_weight_(
const int & position,
const char*
name)
264 if (hepmc3_gGenRunInfos.find(position)==hepmc3_gGenRunInfos.end()) {
265 printf(
"Warning in %s: RunInfo at position %i does not exist\n",__FUNCTION__,position);
268 std::vector<std::string> weight_names=hepmc3_gGenRunInfos[position]->weight_names();
269 weight_names.push_back(std::string(name));
270 hepmc3_gGenRunInfos[position]->set_weight_names(weight_names);
273 int hepmc3_set_weight_by_index_(
const int & position,
const double& val,
const int & pos)
275 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
276 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
279 if (hepmc3_gWriters[position].second->weights().size()<pos) {
280 printf(
"Warning in %s: Event has no weight with index %i does not exist, at %i\n",__FUNCTION__,position,pos);
283 hepmc3_gWriters[position].second->weights()[pos]=val;
286 int hepmc3_set_weight_by_name_(
const int & position,
const double& val,
const char* name)
288 if (hepmc3_gWriters.find(position)==hepmc3_gWriters.end()) {
289 printf(
"Warning in %s: Writer at position %i does not exist\n",__FUNCTION__,position);
292 hepmc3_gWriters[position].second->weight(std::string(name))=val;
Definition of class GenRunInfo.
Definition of class WriterHEPEVT.
Definition of class WriterAscii.
static void set_hepevt_address(char *c)
Set Fortran block address.
Stores event-related information.
Definition of class WriterPlugin.
Definition of interface Writer.
static bool HEPEVT_to_GenEvent(GenEvent *evt)
Convert HEPEVT to GenEvent.
Definition of class WriterAsciiHepMC2.
Definition of static class Print.
int jmohep[NMXHEP][2]
Pointer to position of 1st and 2nd (or last!) mother.
Definition of class GenEvent.
Annotation for function names.
Definition of class Attribute, class IntAttribute and class StringAttribute.
Definition of class HEPEVT_Wrapper.
static int number_entries()
Get number of entries.