herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
ColourFlowBasis.h
1// -*- C++ -*-
2//
3// ColourFlowBasis.h is a part of CVolver
4// Copyright (C) 2013-2019 Simon Platzer, The Herwig Collaboration
5//
6// CVolver 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 CVOLVER_ColourFlowBasis_H
10#define CVOLVER_ColourFlowBasis_H
11//
12// This is the declaration of the ColourFlowBasis class.
13//
14
15#include "Herwig/MatrixElement/Matchbox/Utility/ColourBasis.h"
16#include "ColourFlows.h"
17
18namespace CVolver {
19
20using namespace ThePEG;
21using namespace Herwig;
22
26template<>
28
32 static bool isSinglet(const ThePEG::PDT::Colour& pd) {
33 return pd == PDT::Colour0;
34 }
35
39 static bool isAntiFundamental(const ThePEG::PDT::Colour& pd) {
40 return pd == PDT::Colour3bar;
41 }
42
46 static bool isFundamental(const ThePEG::PDT::Colour& pd) {
47 return pd == PDT::Colour3;
48 }
49
53 static bool isAdjoint(const ThePEG::PDT::Colour& pd) {
54 return pd == PDT::Colour8;
55 }
56
57};
58
66
67public:
68
75
81
82public:
83
87 virtual void clear();
88
94 virtual map<size_t,vector<vector<size_t> > > basisList(const vector<PDT::Colour>&) const;
95
100 virtual size_t prepareBasis(const vector<PDT::Colour>&);
101
105 virtual void readBasisDetails(const vector<PDT::Colour>&);
106
111 virtual double scalarProduct(size_t a, size_t b,
112 const vector<PDT::Colour>& abBasis) const;
113
119 virtual double tMatrixElement(size_t i, size_t a, size_t b,
120 const vector<PDT::Colour>& aBasis,
121 const vector<PDT::Colour>& bBasis,
122 size_t k, size_t l,
123 const map<size_t,size_t>& dict) const;
124
128 virtual bool canSplitGluons() const {
129 return false;
130 }
131
137 virtual double sMatrixElement(size_t i, size_t a, size_t b,
138 const vector<PDT::Colour>& aBasis,
139 const vector<PDT::Colour>& bBasis,
140 size_t k, size_t l,
141 const map<size_t,size_t>& dict) const;
142
147 virtual bool haveColourFlows() const { return true; }
148
153 virtual bool colourConnected(const cPDVector&,
154 const vector<PDT::Colour>&,
155 const pair<int,bool>&,
156 const pair<int,bool>&,
157 size_t) const;
158
159public:
160
168
174 void persistentInput(PersistentIStream & is, int version);
176
183 static void Init();
184
185protected:
186
193 virtual IBPtr clone() const;
194
199 virtual IBPtr fullclone() const;
201
202
203// If needed, insert declarations of virtual function defined in the
204// InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
205
206private:
207
211 map<vector<PDT::Colour>,ColourFlowCrossing> theCrossings;
212
217 map<size_t,vector<ColourFlow> > theFlows;
218
219private:
220
226
227};
228
229}
230
231#endif /* CVOLVER_ColourFlowBasis_H */
ColourFlowBasis implements the colour flow basis.
ColourFlowBasis & operator=(const ColourFlowBasis &)=delete
The assignment operator is private and must never be called.
static void Init()
The standard Init function used to initialize the interfaces.
virtual bool haveColourFlows() const
Return true, if the colour basis is capable of assigning colour flows.
virtual double tMatrixElement(size_t i, size_t a, size_t b, const vector< PDT::Colour > &aBasis, const vector< PDT::Colour > &bBasis, size_t k, size_t l, const map< size_t, size_t > &dict) const
Return the matrix element of a colour charge <c_{n+1,a}|T_i|c_{n,b}> between basis tensors a and b,...
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual bool colourConnected(const cPDVector &, const vector< PDT::Colour > &, const pair< int, bool > &, const pair< int, bool > &, size_t) const
Return true, if a large-N colour connection exists for the given external legs and basis tensor.
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual double scalarProduct(size_t a, size_t b, const vector< PDT::Colour > &abBasis) const
Return the scalar product of basis tensors labelled a and b in the basis used for the given normal or...
virtual double sMatrixElement(size_t i, size_t a, size_t b, const vector< PDT::Colour > &aBasis, const vector< PDT::Colour > &bBasis, size_t k, size_t l, const map< size_t, size_t > &dict) const
Return the matrix element of a quark splitting matrix <c_{n+1,a}|T_i|c_{n,b}> between basis tensors a...
virtual IBPtr clone() const
Make a simple clone of this object.
virtual ~ColourFlowBasis()
The destructor.
virtual map< size_t, vector< vector< size_t > > > basisList(const vector< PDT::Colour > &) const
Return a map of basis tensor indices to vectors identifying a certain ordering corresponding to the g...
ColourFlowBasis()
The default constructor.
virtual size_t prepareBasis(const vector< PDT::Colour > &)
Prepare the basis for the normal ordered legs and return the dimensionality of the basis.
map< size_t, vector< ColourFlow > > theFlows
Colour flows indexed by basis size; note this is a unique assignment.
virtual bool canSplitGluons() const
Return true, if this colour basis supports gluon splittings.
virtual void clear()
Clear this colour basis.
virtual void readBasisDetails(const vector< PDT::Colour > &)
Gather any implementation dependend details when reading a basis.
map< vector< PDT::Colour >, ColourFlowCrossing > theCrossings
Map colour signatures to colour crossings.
The crossing of a physical process to a colour flow basis.
Definition: ColourFlows.h:245
ColourBasis is an interface to a colour basis implementation.
Definition: ColourBasis.h:46
-*- C++ -*-
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
vector< cPDPtr > cPDVector
static bool isFundamental(const ThePEG::PDT::Colour &pd)
Return true, if fundamental.
static bool isAdjoint(const ThePEG::PDT::Colour &pd)
Return true, if adjoint.
static bool isSinglet(const ThePEG::PDT::Colour &pd)
Return true, if singlet.
static bool isAntiFundamental(const ThePEG::PDT::Colour &pd)
Return true, if anti-fundamental.
ParticleData traits.
Definition: ColourFlows.h:218