|
|
|||
File indexing completed on 2026-08-06 09:24:15
0001 // -*- C++ -*- 0002 // 0003 // SimpleColourBasis2.h is a part of Herwig - A multi-purpose Monte Carlo event generator 0004 // Copyright (C) 2002-2019 The Herwig Collaboration 0005 // 0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details. 0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 0008 // 0009 #ifndef Herwig_SimpleColourBasis2_H 0010 #define Herwig_SimpleColourBasis2_H 0011 // 0012 // This is the declaration of the SimpleColourBasis2 class. 0013 // 0014 0015 #include "Herwig/MatrixElement/Matchbox/Utility/ColourBasis.h" 0016 0017 namespace Herwig { 0018 0019 using namespace ThePEG; 0020 0021 /** 0022 * \ingroup Matchbox 0023 * \author Simon Platzer 0024 * 0025 * \brief SimpleColourBasis2 implements the colour algebra needed for 0026 * processes with four coloured legs at NLO. It mainly serves as an 0027 * example for the general ColourBasis interface. 0028 * 0029 */ 0030 class SimpleColourBasis2: public ColourBasis { 0031 0032 public: 0033 0034 /** 0035 * Prepare the basis for the normal ordered legs and return the 0036 * dimensionality of the basis. 0037 */ 0038 virtual size_t prepareBasis(const vector<PDT::Colour>&); 0039 0040 /** 0041 * Return the scalar product of basis tensors labelled a and b in 0042 * the basis used for the given normal ordered legs. 0043 */ 0044 virtual double scalarProduct(size_t a, size_t b, 0045 const vector<PDT::Colour>& abBasis) const; 0046 0047 /** 0048 * Return the matrix element of a colour charge 0049 * <c_{n+1,a}|T_i|c_{n,b}> between basis tensors a and b, with 0050 * respect to aBasis and bBasis 0051 */ 0052 virtual double tMatrixElement(size_t i, size_t a, size_t b, 0053 const vector<PDT::Colour>& aBasis, 0054 const vector<PDT::Colour>& bBasis, 0055 size_t k, size_t l, 0056 const map<size_t,size_t>& dict) const; 0057 0058 /* 0059 * Temporary to make it compile 0060 */ 0061 virtual double sMatrixElement(size_t, size_t, size_t, 0062 const vector<PDT::Colour>&, 0063 const vector<PDT::Colour>&, 0064 size_t, size_t, 0065 const map<size_t,size_t>& 0066 ) const { 0067 assert( 0 == 1 ); 0068 return 0; 0069 } 0070 0071 /** 0072 * Return true, if this colour basis supports gluon splittings. 0073 */ 0074 virtual bool canSplitGluons() const { 0075 return false; 0076 } 0077 0078 /** 0079 * Return true, if a large-N colour connection exists for the 0080 * given external legs and basis tensor. 0081 */ 0082 virtual bool colourConnected(const cPDVector&, 0083 const vector<PDT::Colour>&, 0084 const pair<int,bool>&, 0085 const pair<int,bool>&, 0086 size_t) const; 0087 0088 /** 0089 * Return true, if the colour basis is capable of assigning colour 0090 * flows. 0091 */ 0092 virtual bool haveColourFlows() const { return true; } 0093 0094 /** 0095 * Create ids for bases 0096 */ 0097 void makeIds() const; 0098 0099 /** 0100 * Return a map of basis tensor indices to vectors identifying a 0101 * certain ordering corresponding to the given colour structure. May 0102 * not be supported by all colour basis implementations. 0103 */ 0104 virtual map<size_t,vector<vector<size_t> > > basisList(const vector<PDT::Colour>&) const; 0105 0106 public: 0107 0108 /** @name Functions used by the persistent I/O system. */ 0109 //@{ 0110 /** 0111 * Function used to write out object persistently. 0112 * @param os the persistent output stream written to. 0113 */ 0114 void persistentOutput(PersistentOStream & os) const; 0115 0116 /** 0117 * Function used to read in object persistently. 0118 * @param is the persistent input stream read from. 0119 * @param version the version number of the object when written. 0120 */ 0121 void persistentInput(PersistentIStream & is, int version); 0122 //@} 0123 0124 /** 0125 * The standard Init function used to initialize the interfaces. 0126 * Called exactly once for each class by the class description system 0127 * before the main function starts or 0128 * when this class is dynamically loaded. 0129 */ 0130 static void Init(); 0131 0132 protected: 0133 0134 /** @name Clone Methods. */ 0135 //@{ 0136 /** 0137 * Make a simple clone of this object. 0138 * @return a pointer to the new object. 0139 */ 0140 virtual IBPtr clone() const; 0141 0142 /** Make a clone of this object, possibly modifying the cloned object 0143 * to make it sane. 0144 * @return a pointer to the new object. 0145 */ 0146 virtual IBPtr fullclone() const; 0147 //@} 0148 0149 0150 // If needed, insert declarations of virtual function defined in the 0151 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). 0152 0153 0154 private: 0155 0156 /** 0157 * id for 88 0158 */ 0159 mutable vector<PDT::Colour> id88; 0160 0161 /** 0162 * id for 33bar 0163 */ 0164 mutable vector<PDT::Colour> id33bar; 0165 0166 /** 0167 * id for 888 0168 */ 0169 mutable vector<PDT::Colour> id888; 0170 0171 /** 0172 * id for 33bar8 0173 */ 0174 mutable vector<PDT::Colour> id33bar8; 0175 0176 /** 0177 * id for 8888 0178 */ 0179 mutable vector<PDT::Colour> id8888; 0180 0181 /** 0182 * id for 33bar88 0183 */ 0184 mutable vector<PDT::Colour> id33bar88; 0185 0186 /** 0187 * id for 33bar33bar 0188 */ 0189 mutable vector<PDT::Colour> id33bar33bar; 0190 0191 /** 0192 * id for 88888 0193 */ 0194 mutable vector<PDT::Colour> id88888; 0195 0196 /** 0197 * id for 33bar888 0198 */ 0199 mutable vector<PDT::Colour> id33bar888; 0200 0201 /** 0202 * id for 33bar33bar8 0203 */ 0204 mutable vector<PDT::Colour> id33bar33bar8; 0205 0206 private: 0207 0208 /** 0209 * The assignment operator is private and must never be called. 0210 * In fact, it should not even be implemented. 0211 */ 0212 SimpleColourBasis2 & operator=(const SimpleColourBasis2 &) = delete; 0213 0214 }; 0215 0216 } 0217 0218 #endif /* Herwig_SimpleColourBasis2_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|