ThePEG  1.8.0
Tree2toNDiagram.h
1 // -*- C++ -*-
2 //
3 // Tree2toNDiagram.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_Tree2toNDiagram_H
10 #define ThePEG_Tree2toNDiagram_H
11 // This is the declaration of the Tree2toNDiagram class.
12 
13 #include "ThePEG/MatrixElement/DiagramBase.h"
14 #include "ThePEG/MatrixElement/ColourLines.h"
15 #include "ThePEG/Handlers/StandardXComb.fh"
16 #include "Tree2toNDiagram.xh"
17 
18 namespace ThePEG {
19 
61 
62 public:
63 
65  typedef cPDVector::size_type size_type;
67  typedef multiset<tcPDPtr> PDMSet;
68 
69 public:
70 
77  : theNSpace(0), theNOutgoing(0), nextOrig(0) {}
78 
83 
88  explicit Tree2toNDiagram(int space)
89  : theNSpace(space), theNOutgoing(0), nextOrig(-1) {}
91 
92 public:
93 
99  nextOrig = o - 1;
100  if ( o < 0 ) check();
101  return *this;
102  }
103 
107  Tree2toNDiagram & operator,(PDPtr pd) { return add(pd); }
108 
112  Tree2toNDiagram & operator,(cPDPtr pd) { return add(pd); }
113 
117  Tree2toNDiagram & operator,(tPDPtr pd) { return add(pd); }
118 
122  Tree2toNDiagram & operator,(tcPDPtr pd) { return add(pd); }
123 
131  virtual tPVector construct(SubProPtr sb, const StandardXComb &,
132  const ColourLines &) const;
133 
137  tcPDPair incoming() const;
138 
142  const cPDVector & allPartons() const { return thePartons; }
143 
147  tcPDVector outgoing() const;
148 
153  tcPDVector external() const;
154 
158  int parent(int i) const { return theParents[i]; }
159 
163  pair<int,int> children(int) const;
164 
168  int nSpace() const { return theNSpace; }
169 
173  int nOutgoing() const { return theNOutgoing; }
174 
175 private:
176 
180  void check();
181 
186  if ( thePartons.size() >= theNSpace ) throw Tree2toNDiagramError();
187  theParents.push_back(thePartons.size() - 1);
188  thePartons.push_back(pd);
189  }
193  void addTimelike(tcPDPtr);
194 
198  void addTimelike(tcPDPtr, size_type origin);
199 
204 
205 public:
206 
210  virtual bool isSame(tcDiagPtr) const;
211 
217  virtual bool isSame(tcDiagPtr, map<int,int>&) const;
218 
222  bool equals(Ptr<Tree2toNDiagram>::tcptr, int start=0, int startCmp=0) const;
223 
228  map<int,int>&,
229  int start=0, int startCmp=0) const;
230 
241  int mergeEmission(int emitter, int id, map<int,int>& remap);
242 
247  int externalId(int id) const;
248 
253  int diagramId(int id) const;
254 
255 public:
256 
263  void persistentOutput(PersistentOStream & os) const;
264 
270  void persistentInput(PersistentIStream & is, int version);
272 
273 private:
274 
278  size_type theNSpace;
279 
284 
288  int nextOrig;
289 
294 
298  vector<int> theParents;
299 
300 private:
301 
306 
311 
312 };
313 
314 }
315 
316 namespace ThePEG {
317 
324 template <>
325 struct BaseClassTrait<Tree2toNDiagram,1>: public ClassTraitsType {
327  typedef DiagramBase NthBase;
328 };
329 
334 template <>
335 struct ClassTraits<Tree2toNDiagram>: public ClassTraitsBase<Tree2toNDiagram> {
337  static string className() { return "ThePEG::Tree2toNDiagram"; }
338 };
339 
342 }
343 
344 #endif /* ThePEG_Tree2toNDiagram_H */
pair< tcPDPtr, tcPDPtr > tcPDPair
A pair of transient pointers to const ParticleData objects.
Definition: Containers.h:124
Tree2toNDiagram & add(tcPDPtr)
Add a parton to this diagram.
PersistentIStream is used to read persistent objects from a stream where they were previously written...
multiset< tcPDPtr > PDMSet
A multi-set of particle data objects.
cPDVector thePartons
The complete vector of partons in this tree diagram.
vector< int > theParents
The index of the parents.
const cPDVector & allPartons() const
Return the complete vector of partons in this tree diagram.
The Tree2toNDiagram class inherits from DiagramBase and represents a Feynman tree diagram...
size_type theNSpace
The number of space-like partons.
bool equals(Ptr< Tree2toNDiagram >::tcptr, int start=0, int startCmp=0) const
Check for equality.
A concreate implementation of ClassDescriptionBase describing a concrete class with persistent data...
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
PersistentOStream is used to write objects persistently to a stream from which they can be read in ag...
vector< tcPDPtr > tcPDVector
A vector of transient pointers to const ParticleData objects.
Definition: Containers.h:42
TransientConstRCPtr is a simple wrapper around a bare const pointer which can be assigned to and from...
Definition: RCPtr.h:681
int mergeEmission(int emitter, int id, map< int, int > &remap)
Merge the two external partons referred to by indices as in the partons() vector returned by DiagramB...
TransientRCPtr is a simple wrapper around a bare pointer which can be assigned to and from an RCPtr a...
Definition: RCPtr.h:509
ConstRCPtr is a reference counted (smart) const pointer.
Definition: RCPtr.h:315
static ClassDescription< Tree2toNDiagram > initTree2toNDiagram
Describe a concrete class with persistent data.
virtual bool isSame(tcDiagPtr) const
Compare this diagram's topology to another one.
void check()
Check the consistency of this tree diagram.
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
int nSpace() const
Return the number of space-like partons.
Tree2toNDiagram & operator,(int o)
If less than zero indicate that this tree is competed.
pair< int, int > children(int) const
Return the indices of the children of the given parton.
void addSpacelike(tcPDPtr pd)
Add a space-like parton to this diagram.
Tree2toNDiagram & operator,(tcPDPtr pd)
Add a space- or time-like parton.
The StandardXComb class inherits from the more general XComb class which stores all information about...
Definition: StandardXComb.h:53
int diagramId(int id) const
Translate a parton's id in a vector of incoming followed by outgoing partons to a parton's id in the ...
int theNOutgoing
The number of outgoing partons.
Tree2toNDiagram()
Default constructor.
tcPDVector external() const
Return the incoming followed by the outgoing parton types of this tree diagram.
Tree2toNDiagram(int space)
The standard constructor giving the number of space-like propagators.
RCPtr is a reference counted (smart) pointer.
Definition: RCPtr.h:60
virtual tPVector construct(SubProPtr sb, const StandardXComb &, const ColourLines &) const
Construct a sub process corresponding to this diagram.
vector< cPDPtr > cPDVector
A vector of pointers to const ParticleData objects.
Definition: Containers.h:36
int nextOrig
The parent of the next added parton.
void addTimelike(tcPDPtr)
Add a time-like parton to this diagram.
int nOutgoing() const
Return the number of outgoing partons.
cPDVector::size_type size_type
The integer type reresenting vector sizes.
Tree2toNDiagram & operator,(PDPtr pd)
Add a space- or time-like parton.
static string className()
Return the name of class T.
Definition: ClassTraits.h:66
DiagramBase is the base class of all classes which describes Feynman diagrams which can be generated ...
Definition: DiagramBase.h:41
int NthBase
The type of the BaseN'th base class (int means there are no further base classes).
Definition: ClassTraits.h:161
tcPDVector outgoing() const
Return the outgoing parton types of this tree diagram.
The ColourLines class defines the colour flow in a SubProcess.
Definition: ColourLines.h:23
Tree2toNDiagram & operator=(const Tree2toNDiagram &)
Private and non-existent assignment operator.
vector< tPPtr > tPVector
A vector of transient pointers to Particle objects.
Definition: Containers.h:82
int parent(int i) const
Return the index of the parent of the given parton.
Tree2toNDiagram & operator,(cPDPtr pd)
Add a space- or time-like parton.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
~Tree2toNDiagram()
Destructor.
tcPDPair incoming() const
Return the types of the incoming partons.
Tree2toNDiagram & operator,(tPDPtr pd)
Add a space- or time-like parton.
int externalId(int id) const
Translate a parton's id in the diagram to a parton's id in a vector of incoming followed by outgoing ...