Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:08

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEvv2tv_H
0003 #define HERWIG_MEvv2tv_H
0004 //
0005 // This is the declaration of the MEvv2tv class.
0006 //
0007 
0008 #include "GeneralHardME.h"
0009 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0010 #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
0011 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
0012 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0013 #include "ThePEG/Helicity/Vertex/AbstractVVVTVertex.h"
0014 
0015 namespace Herwig {
0016 
0017 using namespace ThePEG;
0018 using ThePEG::Helicity::VectorWaveFunction;
0019 using ThePEG::Helicity::TensorWaveFunction;
0020 
0021 /**
0022  * Here is the documentation of the MEvv2tv class.
0023  *
0024  * @see \ref MEvv2tvInterfaces "The interfaces"
0025  * defined for MEvv2tv.
0026  */
0027 class MEvv2tv: public GeneralHardME {
0028 
0029   /** Vector of VectorWaveFunctions. */
0030   typedef vector<VectorWaveFunction> VBVector;
0031 
0032   /** Vector of TensorWaveFunctions. */
0033   typedef vector<TensorWaveFunction> TBVector;
0034 
0035 public:
0036 
0037   /**
0038    * The default constructor.
0039    */
0040   MEvv2tv() : vector_(0), fourPoint_(0) {}
0041 
0042   /**
0043    * The matrix element for the kinematical configuration
0044    * previously provided by the last call to setKinematics(), suitably
0045    * scaled by sHat() to give a dimension-less number.
0046    * @return the matrix element scaled with sHat() to give a
0047    * dimensionless number.
0048    */
0049   virtual double me2() const;
0050 
0051   /**
0052    * Construct the vertex information for the spin correlations
0053    * @param sub Pointer to the relevent SubProcess
0054    */
0055   virtual void constructVertex(tSubProPtr sub);
0056 
0057 public:
0058 
0059   /** @name Functions used by the persistent I/O system. */
0060   //@{
0061   /**
0062    * Function used to write out object persistently.
0063    * @param os the persistent output stream written to.
0064    */
0065   void persistentOutput(PersistentOStream & os) const;
0066 
0067   /**
0068    * Function used to read in object persistently.
0069    * @param is the persistent input stream read from.
0070    * @param version the version number of the object when written.
0071    */
0072   void persistentInput(PersistentIStream & is, int version);
0073   //@}
0074 
0075   /**
0076    * The standard Init function used to initialize the interfaces.
0077    * Called exactly once for each class by the class description system
0078    * before the main function starts or
0079    * when this class is dynamically loaded.
0080    */
0081   static void Init();
0082 
0083 protected:
0084 
0085   /** @name Clone Methods. */
0086   //@{
0087   /**
0088    * Make a simple clone of this object.
0089    * @return a pointer to the new object.
0090    */
0091   virtual IBPtr clone() const;
0092 
0093   /** Make a clone of this object, possibly modifying the cloned object
0094    * to make it sane.
0095    * @return a pointer to the new object.
0096    */
0097   virtual IBPtr fullclone() const;
0098   //@}
0099 
0100 protected:
0101 
0102   /** @name Standard Interfaced functions. */
0103   //@{
0104   /**
0105    * Initialize this object after the setup phase before saving an
0106    * EventGenerator to disk.
0107    * @throws InitException if object could not be initialized properly.
0108    */
0109   void doinit();
0110   //@}
0111 
0112 private:
0113 
0114   /** @name Functions to calculate production matrix elements and me2. */
0115   //@{
0116   /**
0117    * Calculate me2 and the production matrix element for the normal mode.
0118    * @param vec1 Vector of VectorWaveFunction for the 1st incoming boson
0119    * @param vec2 Vector of VectorWaveFunction for the 2nd incoming boson
0120    * @param ten TensorWaveFunction for outgoing tensor.
0121    * @param vec3 Vector of VectorWaveFunction for the outgoing boson
0122    * @param first Whether or not first call to decide if colour decomposition etc
0123    * should be calculated
0124    * @param full_me The value of me2 calculation
0125    */
0126   ProductionMatrixElement vv2tvHeME(const VBVector & vec1,
0127                     const VBVector & vec2,
0128                     const TBVector & ten,
0129                     const VBVector & vec3,
0130                     double & full_me, bool first) const;
0131 
0132   /**
0133    * A debugging function to test the value of me2 against an
0134    * analytic function.
0135    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
0136    */
0137   virtual void debug(double me2) const;
0138 
0139 private:
0140 
0141   /**
0142    * The assignment operator is private and must never be called.
0143    * In fact, it should not even be implemented.
0144    */
0145   MEvv2tv & operator=(const MEvv2tv &) = delete;
0146 
0147 private:
0148 
0149   /**
0150    * Store a pair of  FFTVertex and FFVVertex pointers  
0151    */
0152   vector<pair<AbstractVVVVertexPtr, AbstractVVTVertexPtr> > vector_;
0153 
0154   /**
0155    *  The four point vertex
0156    */
0157   vector<AbstractVVVTVertexPtr> fourPoint_;
0158 
0159 };
0160 
0161 }
0162 
0163 #endif /* HERWIG_MEvv2tv_H */