herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
TraceBasis.h
1 // -*- C++ -*-
2 //
3 // TraceBasis.h is a part of ColorFull
4 // Copyright (C) 2010-2011 Simon Platzer & Malin Sjodahl
5 //
6 // ColorFull 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 COLORFULL_TraceBasis_H
10 #define COLORFULL_TraceBasis_H
11 //
12 // This is the declaration of the TraceBasis class.
13 //
14 
15 #include "Herwig/MatrixElement/Matchbox/Utility/ColourBasis.h"
16 #include "Trace_basis.h"
17 
18 namespace ColorFull {
19 
20 using namespace ThePEG;
21 using namespace Herwig;
22 
30 
31 public:
32 
38  TraceBasis();
39 
43  virtual ~TraceBasis();
45 
46 public:
47 
51  virtual void clear();
52 
58  virtual map<size_t,vector<vector<size_t> > > basisList(const vector<PDT::Colour>&) const;
59 
64  virtual size_t prepareBasis(const vector<PDT::Colour>&);
65 
69  virtual void readBasisDetails(const vector<PDT::Colour>&);
70 
75  virtual double scalarProduct(size_t a, size_t b,
76  const vector<PDT::Colour>& abBasis) const;
77 
81  virtual bool canSplitGluons() const {
82  return false;
83  }
84 
90  virtual double tMatrixElement(size_t i, size_t a, size_t b,
91  const vector<PDT::Colour>& aBasis,
92  const vector<PDT::Colour>& bBasis,
93  size_t k, size_t l,
94  const map<size_t,size_t>& dict) const;
95 
108  virtual double sMatrixElement(size_t i, size_t a, size_t b,
109  const vector<PDT::Colour>& aBasis,
110  const vector<PDT::Colour>& bBasis,
111  size_t k, size_t l,
112  const map<size_t,size_t>& dict) const;
113 
118  virtual bool haveColourFlows() const { return true; }
119 
124  virtual bool colourConnected(const cPDVector&,
125  const vector<PDT::Colour>&,
126  const pair<int,bool>&,
127  const pair<int,bool>&,
128  size_t) const;
129 
134  virtual map<size_t,size_t> indexChange(const vector<PDT::Colour>& basis,
135  const size_t dim,
136  const map<size_t,size_t>& legPerm) const;
137 
138 
139 public:
140 
147  void persistentOutput(PersistentOStream & os) const;
148 
154  void persistentInput(PersistentIStream & is, int version);
156 
163  static void Init();
164 
165 protected:
166 
173  virtual IBPtr clone() const;
174 
179  virtual IBPtr fullclone() const;
181 
182 
183 // If needed, insert declarations of virtual function defined in the
184 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
185 
186 private:
187 
192 
196  mutable map<vector<PDT::Colour>,Trace_basis> theBasisMap;
197 
201  mutable map<string,Polynomial> theScalarProducts;
202 
203 private:
204 
209  TraceBasis & operator=(const TraceBasis &) = delete;
210 
211 };
212 
213 }
214 
215 #endif /* COLORFULL_TraceBasis_H */
map< vector< PDT::Colour >, Trace_basis > theBasisMap
Map legs to known basis vectors.
Definition: TraceBasis.h:196
TraceBasis implements the trace colour basis.
Definition: TraceBasis.h:29
Library class containing functions for index contraction and numerical evaluation.
Definition: Col_functions.h:25
virtual bool canSplitGluons() const
Return true, if this colour basis supports gluon splittings.
Definition: TraceBasis.h:81
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
Col_functions colorFunctions
The color functions object to be used.
Definition: TraceBasis.h:191
In a trace basis the basis vectors are closed or open quark-lines or products of close and open quark...
Definition: Trace_basis.h:19
vector< cPDPtr > cPDVector
virtual bool haveColourFlows() const
Return true, if the colour basis is capable of assigning colour flows.
Definition: TraceBasis.h:118
map< string, Polynomial > theScalarProducts
Memorize scalar product intermediate results.
Definition: TraceBasis.h:201
-*- C++ -*-
ColourBasis is an interface to a colour basis implementation.
Definition: ColourBasis.h:46