thepeg is hosted by Hepforge, IPPP Durham
ThePEG 2.3.0
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
18namespace ThePEG {
19
61
62public:
63
65 typedef cPDVector::size_type size_type;
67 typedef multiset<tcPDPtr> PDMSet;
68
69public:
70
77 : theNSpace(0), theNOutgoing(0), nextOrig(0) {}
78
83
88 explicit Tree2toNDiagram(int space)
89 : theNSpace(space), theNOutgoing(0), nextOrig(-1) {}
91
92public:
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
132 const ColourLines &) const;
133
138
142 const cPDVector & allPartons() const { return thePartons; }
143
148
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
175 }
176
180 int nOutgoing() const { return theNOutgoing; }
181
182private:
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 }
201
206
211
212public:
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
262public:
263
271
277 void persistentInput(PersistentIStream & is, int version);
279
280private:
281
286
291
296
301
305 vector<int> theParents;
306
307private:
308
313
318
319};
320
321}
322
323namespace ThePEG {
324
331template <>
332struct BaseClassTrait<Tree2toNDiagram,1>: public ClassTraitsType {
334 typedef DiagramBase NthBase;
335};
336
341template <>
342struct ClassTraits<Tree2toNDiagram>: public ClassTraitsBase<Tree2toNDiagram> {
344 static string className() { return "ThePEG::Tree2toNDiagram"; }
345};
346
349}
350
351#endif /* ThePEG_Tree2toNDiagram_H */
A concreate implementation of ClassDescriptionBase describing a concrete class with persistent data.
The ColourLines class defines the colour flow in a SubProcess.
Definition: ColourLines.h:23
DiagramBase is the base class of all classes which describes Feynman diagrams which can be generated ...
Definition: DiagramBase.h:41
PersistentIStream is used to read persistent objects from a stream where they were previously written...
PersistentOStream is used to write objects persistently to a stream from which they can be read in ag...
ConstRCPtr is a reference counted (smart) const pointer.
Definition: RCPtr.h:320
RCPtr is a reference counted (smart) pointer.
Definition: RCPtr.h:60
TransientConstRCPtr is a simple wrapper around a bare const pointer which can be assigned to and from...
Definition: RCPtr.h:696
TransientRCPtr is a simple wrapper around a bare pointer which can be assigned to and from an RCPtr a...
Definition: RCPtr.h:519
The StandardXComb class inherits from the more general XComb class which stores all information about...
Definition: StandardXComb.h:53
The Tree2toNDiagram class inherits from DiagramBase and represents a Feynman tree diagram.
vector< int > theParents
The index of the parents.
pair< int, int > children(int) const
Return the indices of the children of the given parton.
int theNOutgoing
The number of outgoing partons.
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.
int nOutgoing() const
Return the number of outgoing partons.
Tree2toNDiagram & add(tcPDPtr)
Add a parton to this diagram.
~Tree2toNDiagram()
Destructor.
Tree2toNDiagram(int space)
The standard constructor giving the number of space-like propagators.
cPDVector thePartons
The complete vector of partons in this tree diagram.
Tree2toNDiagram & operator,(PDPtr pd)
Add a space- or time-like parton.
Tree2toNDiagram & operator,(cPDPtr pd)
Add a space- or time-like parton.
const cPDVector & allPartons() const
Return the complete vector of partons in this tree diagram.
Tree2toNDiagram & operator,(tPDPtr pd)
Add a space- or time-like parton.
int parent(int i) const
Return the index of the parent of the given parton.
size_type theNSpace
The number of space-like partons.
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 ...
void check()
Check the consistency of this tree diagram.
void addTimelike(tcPDPtr, size_type origin)
Add a time-like parton to this diagram indicating its origin.
int nextOrig
The parent of the next added parton.
Tree2toNDiagram()
Default constructor.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
bool equals(Ptr< Tree2toNDiagram >::tcptr, int start=0, int startCmp=0) const
Check for equality.
void resize(size_type nSpace)
Extend this diagram to accomodate the given number of space-like lines.
bool equals(Ptr< Tree2toNDiagram >::tcptr, map< int, int > &, int start=0, int startCmp=0) const
Check for equality modulo permutations of external legs.
static ClassDescription< Tree2toNDiagram > initTree2toNDiagram
Describe a concrete class with persistent data.
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...
cPDVector::size_type size_type
The integer type reresenting vector sizes.
virtual bool isSame(tcDiagPtr) const
Compare this diagram's topology to another one.
Tree2toNDiagram & operator=(const Tree2toNDiagram &)=delete
Private and non-existent assignment operator.
tcPDVector outgoing() const
Return the outgoing parton types of this tree diagram.
virtual bool isSame(tcDiagPtr, map< int, int > &) const
Compare this diagram's topology to another one modulo permutations of external legs; provide a map of...
virtual tPVector construct(SubProPtr sb, const StandardXComb &, const ColourLines &) const
Construct a sub process corresponding to this diagram.
void addTimelike(tcPDPtr)
Add a time-like parton to this diagram.
multiset< tcPDPtr > PDMSet
A multi-set of particle data objects.
tcPDVector external() const
Return the incoming followed by the outgoing parton types of this tree diagram.
int nSpace() const
Return the number of space-like partons.
Tree2toNDiagram & operator,(tcPDPtr pd)
Add a space- or time-like parton.
tcPDPair incoming() const
Return the types of the incoming partons.
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 ...
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
vector< tPPtr > tPVector
A vector of transient pointers to Particle objects.
Definition: Containers.h:82
pair< tcPDPtr, tcPDPtr > tcPDPair
A pair of transient pointers to const ParticleData objects.
Definition: Containers.h:124
vector< tcPDPtr > tcPDVector
A vector of transient pointers to const ParticleData objects.
Definition: Containers.h:42
vector< cPDPtr > cPDVector
A vector of pointers to const ParticleData objects.
Definition: Containers.h:36
int NthBase
The type of the BaseN'th base class (int means there are no further base classes).
Definition: ClassTraits.h:161
static string className()
Return the name of class T.
Definition: ClassTraits.h:66