File indexing completed on 2026-08-06 09:24:11
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef CVOLVER_ColourFlowBasis_H
0010 #define CVOLVER_ColourFlowBasis_H
0011
0012
0013
0014
0015 #include "Herwig/MatrixElement/Matchbox/Utility/ColourBasis.h"
0016 #include "ColourFlows.h"
0017
0018 namespace CVolver {
0019
0020 using namespace ThePEG;
0021 using namespace Herwig;
0022
0023
0024
0025
0026 template<>
0027 struct ParticleDataTraits<ThePEG::PDT::Colour> {
0028
0029
0030
0031
0032 static bool isSinglet(const ThePEG::PDT::Colour& pd) {
0033 return pd == PDT::Colour0;
0034 }
0035
0036
0037
0038
0039 static bool isAntiFundamental(const ThePEG::PDT::Colour& pd) {
0040 return pd == PDT::Colour3bar;
0041 }
0042
0043
0044
0045
0046 static bool isFundamental(const ThePEG::PDT::Colour& pd) {
0047 return pd == PDT::Colour3;
0048 }
0049
0050
0051
0052
0053 static bool isAdjoint(const ThePEG::PDT::Colour& pd) {
0054 return pd == PDT::Colour8;
0055 }
0056
0057 };
0058
0059
0060
0061
0062
0063
0064
0065 class ColourFlowBasis: public Herwig::ColourBasis {
0066
0067 public:
0068
0069
0070
0071
0072
0073
0074 ColourFlowBasis();
0075
0076
0077
0078
0079 virtual ~ColourFlowBasis();
0080
0081
0082 public:
0083
0084
0085
0086
0087 virtual void clear();
0088
0089
0090
0091
0092
0093
0094 virtual map<size_t,vector<vector<size_t> > > basisList(const vector<PDT::Colour>&) const;
0095
0096
0097
0098
0099
0100 virtual size_t prepareBasis(const vector<PDT::Colour>&);
0101
0102
0103
0104
0105 virtual void readBasisDetails(const vector<PDT::Colour>&);
0106
0107
0108
0109
0110
0111 virtual double scalarProduct(size_t a, size_t b,
0112 const vector<PDT::Colour>& abBasis) const;
0113
0114
0115
0116
0117
0118
0119 virtual double tMatrixElement(size_t i, size_t a, size_t b,
0120 const vector<PDT::Colour>& aBasis,
0121 const vector<PDT::Colour>& bBasis,
0122 size_t k, size_t l,
0123 const map<size_t,size_t>& dict) const;
0124
0125
0126
0127
0128 virtual bool canSplitGluons() const {
0129 return false;
0130 }
0131
0132
0133
0134
0135
0136
0137 virtual double sMatrixElement(size_t i, size_t a, size_t b,
0138 const vector<PDT::Colour>& aBasis,
0139 const vector<PDT::Colour>& bBasis,
0140 size_t k, size_t l,
0141 const map<size_t,size_t>& dict) const;
0142
0143
0144
0145
0146
0147 virtual bool haveColourFlows() const { return true; }
0148
0149
0150
0151
0152
0153 virtual bool colourConnected(const cPDVector&,
0154 const vector<PDT::Colour>&,
0155 const pair<int,bool>&,
0156 const pair<int,bool>&,
0157 size_t) const;
0158
0159 public:
0160
0161
0162
0163
0164
0165
0166
0167 void persistentOutput(PersistentOStream & os) const;
0168
0169
0170
0171
0172
0173
0174 void persistentInput(PersistentIStream & is, int version);
0175
0176
0177
0178
0179
0180
0181
0182
0183 static void Init();
0184
0185 protected:
0186
0187
0188
0189
0190
0191
0192
0193 virtual IBPtr clone() const;
0194
0195
0196
0197
0198
0199 virtual IBPtr fullclone() const;
0200
0201
0202
0203
0204
0205
0206 private:
0207
0208
0209
0210
0211 map<vector<PDT::Colour>,ColourFlowCrossing> theCrossings;
0212
0213
0214
0215
0216
0217 map<size_t,vector<ColourFlow> > theFlows;
0218
0219 private:
0220
0221
0222
0223
0224
0225 ColourFlowBasis & operator=(const ColourFlowBasis &) = delete;
0226
0227 };
0228
0229 }
0230
0231 #endif