thepeg is hosted by Hepforge, IPPP Durham
ThePEG  2.2.1
Tree2toNDiagram.h
1 // -*- C++ -*-
2 //
3 // Tree2toNDiagram.h is a part of ThePEG - Toolkit for HEP Event Generation
4 // Copyright (C) 1999-2019 Leif Lonnblad
5 //
6 // ThePEG is licenced under version 3 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  void resize(size_type nSpace) {
174  theNSpace = max(nSpace,theNSpace);
175  }
176 
180  int nOutgoing() const { return theNOutgoing; }
181 
182 private:
183 
187  void check();
188 
193  if ( thePartons.size() >= theNSpace ) throw Tree2toNDiagramError();
194  theParents.push_back(thePartons.size() - 1);
195  thePartons.push_back(pd);
196  }
200  void addTimelike(tcPDPtr);
201 
205  void addTimelike(tcPDPtr, size_type origin);
206 
211 
212 public:
213 
217  virtual bool isSame(tcDiagPtr) const;
218 
224  virtual bool isSame(tcDiagPtr, map<int,int>&) const;
225 
229  bool equals(Ptr<Tree2toNDiagram>::tcptr, int start=0, int startCmp=0) const;
230 
235  map<int,int>&,
236  int start=0, int startCmp=0) const;
237 
248  int mergeEmission(int emitter, int id, map<int,int>& remap);
249 
254  int externalId(int id) const;
255 
260  int diagramId(int id) const;
261 
262 public:
263 
270  void persistentOutput(PersistentOStream & os) const;
271 
277  void persistentInput(PersistentIStream & is, int version);
279 
280 private:
281 
285  size_type theNSpace;
286 
291 
295  int nextOrig;
296 
301 
305  vector<int> theParents;
306 
307 private:
308 
313 
317  Tree2toNDiagram & operator=(const Tree2toNDiagram &) = delete;
318 
319 };
320 
321 }
322 
323 namespace ThePEG {
324 
331 template <>
332 struct BaseClassTrait<Tree2toNDiagram,1>: public ClassTraitsType {
334  typedef DiagramBase NthBase;
335 };
336 
341 template <>
342 struct ClassTraits<Tree2toNDiagram>: public ClassTraitsBase<Tree2toNDiagram> {
344  static string className() { return "ThePEG::Tree2toNDiagram"; }
345 };
346 
349 }
350 
351 #endif /* ThePEG_Tree2toNDiagram_H */
pair< tcPDPtr, tcPDPtr > tcPDPair
A pair of transient pointers to const ParticleData objects.
Definition: Containers.h:124
int externalId(int id) const
Translate a parton&#39;s id in the diagram to a parton&#39;s id in a vector of incoming followed by outgoing ...
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.
virtual bool isSame(tcDiagPtr) const
Compare this diagram&#39;s topology to another one.
ClassTraitsType is an empty, non-polymorphic, base class.
Definition: ClassTraits.h:30
The Tree2toNDiagram class inherits from DiagramBase and represents a Feynman tree diagram...
size_type theNSpace
The number of space-like partons.
A concreate implementation of ClassDescriptionBase describing a concrete class with persistent data...
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
tcPDVector external() const
Return the incoming followed by the outgoing parton types of this tree diagram.
TransientConstRCPtr is a simple wrapper around a bare const pointer which can be assigned to and from...
Definition: RCPtr.h:696
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:519
virtual tPVector construct(SubProPtr sb, const StandardXComb &, const ColourLines &) const
Construct a sub process corresponding to this diagram.
ConstRCPtr is a reference counted (smart) const pointer.
Definition: RCPtr.h:320
static ClassDescription< Tree2toNDiagram > initTree2toNDiagram
Describe a concrete class with persistent data.
void check()
Check the consistency of this tree diagram.
void resize(size_type nSpace)
Extend this diagram to accomodate the given number of space-like lines.
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
Tree2toNDiagram & operator=(const Tree2toNDiagram &)=delete
Private and non-existent assignment operator.
Tree2toNDiagram & operator,(int o)
If less than zero indicate that this tree is competed.
void addSpacelike(tcPDPtr pd)
Add a space-like parton to this diagram.
const cPDVector & allPartons() const
Return the complete vector of partons in this tree diagram.
int nSpace() const
Return the number of space-like partons.
bool equals(Ptr< Tree2toNDiagram >::tcptr, int start=0, int startCmp=0) const
Check for equality.
Tree2toNDiagram & operator,(tcPDPtr pd)
Add a space- or time-like parton.
int parent(int i) const
Return the index of the parent of the given parton.
The StandardXComb class inherits from the more general XComb class which stores all information about...
Definition: StandardXComb.h:53
int nOutgoing() const
Return the number of outgoing partons.
int theNOutgoing
The number of outgoing partons.
Tree2toNDiagram()
Default constructor.
Tree2toNDiagram(int space)
The standard constructor giving the number of space-like propagators.
RCPtr is a reference counted (smart) pointer.
Definition: RCPtr.h:60
vector< cPDPtr > cPDVector
A vector of pointers to const ParticleData objects.
Definition: Containers.h:36
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
int nextOrig
The parent of the next added parton.
void addTimelike(tcPDPtr)
Add a time-like parton to this diagram.
int diagramId(int id) const
Translate a parton&#39;s id in a vector of incoming followed by outgoing partons to a parton&#39;s id in the ...
cPDVector::size_type size_type
The integer type reresenting vector sizes.
The default concrete implementation of ClassTraitsBase.
Definition: ClassTraits.h:134
Tree2toNDiagram & operator,(PDPtr pd)
Add a space- or time-like parton.
DiagramBase is the base class of all classes which describes Feynman diagrams which can be generated ...
Definition: DiagramBase.h:41
pair< int, int > children(int) const
Return the indices of the children of the given parton.
The ColourLines class defines the colour flow in a SubProcess.
Definition: ColourLines.h:23
vector< tPPtr > tPVector
A vector of transient pointers to Particle objects.
Definition: Containers.h:82
BaseClassTraits describes the base classes of the templated class.
Definition: ClassTraits.h:156
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.
tcPDVector outgoing() const
Return the outgoing parton types of this tree diagram.
The templated ClassTraitsBase class defines a set of default information about classes used by ThePEG...
Definition: ClassTraits.h:52
Tree2toNDiagram & operator,(tPDPtr pd)
Add a space- or time-like parton.
tcPDPair incoming() const
Return the types of the incoming partons.