ThePEG  1.8.0
HepMCConverter.h
1 // -*- C++ -*-
2 //
3 // HepMCConverter.h is a part of ThePEG - Toolkit for HEP Event Generation
4 // Copyright (C) 1999-2011 Leif Lonnblad
5 //
6 // ThePEG is licenced under version 2 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef ThePEG_HepMCConverter_H
10 #define ThePEG_HepMCConverter_H
11 // This is the declaration of the HepMCConverter class.
12 
13 #include "ThePEG/Config/ThePEG.h"
14 #include "ThePEG/EventRecord/Event.h"
15 #include "HepMCTraits.h"
16 
17 namespace ThePEG {
18 
19 
31 template <typename HepMCEventT, typename Traits = HepMCTraits<HepMCEventT> >
33 
34 public:
35 
38  struct HepMCConverterException: public Exception {};
45  struct Vertex {
50  };
51 
53  typedef typename Traits::ParticleT GenParticle;
55  typedef typename Traits::EventT GenEvent;
57  typedef typename Traits::VertexT GenVertex;
59  typedef typename Traits::PdfInfoT PdfInfo;
61  typedef map<tcPPtr,GenParticle*> ParticleMap;
63  typedef map<tcColinePtr,long> FlowMap;
65  typedef map<tcPPtr,Vertex*> VertexMap;
67  typedef map<const Vertex *, GenVertex*> GenVertexMap;
68 
69 public:
70 
80  static GenEvent * convert(const Event & ev, bool nocopies = false,
81  Energy eunit = Traits::defaultEnergyUnit(),
82  Length lunit = Traits::defaultLengthUnit());
83 
93  static void
94  convert(const Event & ev, GenEvent & gev, bool nocopies,
95  Energy eunit, Length lunit);
96 
106  static void
107  convert(const Event & ev, GenEvent & gev, bool nocopies = false);
108 
109 private:
110 
115  HepMCConverter(const Event & ev, bool nocopies, Energy eunit, Length lunit);
116 
121  HepMCConverter(const Event & ev, GenEvent & gev, bool nocopies,
122  Energy eunit, Length lunit);
123 
127  void init(const Event & ev, bool nocopies);
128 
132  HepMCConverter();
133 
138 
143 
144 private:
145 
149  GenParticle * createParticle(tcPPtr p) const;
150 
155  void join(tcPPtr parent, tcPPtr child);
156 
160  GenVertex * createVertex(Vertex * v);
161 
165  void setPdfInfo(const Event & e);
166 
167 private:
168 
173 
179 
185 
189  vector<Vertex> vertices;
190 
195 
200 
205 
210 
215 
216 };
217 
218 }
219 
220 #include "HepMCConverter.tcc"
221 
222 #endif /* ThePEG_HepMCConverter_H */