Back to home page

EIC code displayed by LXR

 
 

    


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 */