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
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 Attribute, class IntAttribute and class StringAttribute.
Definition of class GenEvent.
Definition of class GenRunInfo.
Definition of class HEPEVT_Wrapper.
Definition of static class Print.
Definition of class WriterAsciiHepMC2.
Definition of class WriterAscii.
Definition of class WriterHEPEVT.
Definition of class WriterPlugin.
Definition of interface Writer.
Stores event-related information.
static void set_hepevt_address(char *c)
Set Fortran block address.
static bool HEPEVT_to_GenEvent(GenEvent *evt)
Convert HEPEVT to GenEvent.
static int number_entries()
Get number of entries.
int jmohep[NMXHEP][2]
Pointer to position of 1st and 2nd (or last!) mother.
Annotation for function names.