Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEff2tv_H
0003 #define HERWIG_MEff2tv_H
0004 //
0005 // This is the declaration of the MEff2tv class.
0006 //
0007 
0008 #include "GeneralHardME.h"
0009 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0010 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0011 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0012 #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
0013 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
0014 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
0015 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0016 #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h"
0017 
0018 namespace Herwig {
0019 
0020 using namespace ThePEG;
0021 using Helicity::SpinorWaveFunction;
0022 using Helicity::SpinorBarWaveFunction;
0023 using Helicity::VectorWaveFunction;
0024 using Helicity::TensorWaveFunction;
0025 
0026 /**
0027  * The documentation of the MEff2tv class implements the general matrix element for
0028  * vector vectro to tensor vector
0029  *
0030  */
0031 class MEff2tv: public GeneralHardME {
0032 
0033 public:
0034 
0035   /** @name Typedefs */
0036   //@{
0037   /**
0038    * A vector of SpinorWaveFunctions 
0039    */
0040   typedef vector<SpinorWaveFunction> SpinorVector;
0041 
0042   /**
0043    * A vector of SpinorWaveBarFunctions 
0044    */
0045   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
0046 
0047   /**
0048    * A vector of VectorWaveFunctions 
0049    */
0050   typedef vector<VectorWaveFunction> VBVector;
0051 
0052   /**
0053    * A vector of VectorWaveFunctions 
0054    */
0055   typedef vector<TensorWaveFunction> TBVector;
0056   //@}
0057 
0058 public:
0059 
0060   /**
0061    * The default constructor.
0062    */
0063   MEff2tv() : fermion_(0), vector_(0), fourPoint_(0) {}
0064 
0065   /**
0066    * The matrix element for the kinematical configuration
0067    * previously provided by the last call to setKinematics(), suitably
0068    * scaled by sHat() to give a dimension-less number.
0069    * @return the matrix element scaled with sHat() to give a
0070    * dimensionless number.
0071    */
0072   virtual double me2() const;
0073 
0074   /**
0075    * Construct the vertex information for the spin correlations
0076    * @param sub Pointer to the relevent SubProcess
0077    */
0078   virtual void constructVertex(tSubProPtr sub);
0079 
0080 public:
0081 
0082   /** @name Functions used by the persistent I/O system. */
0083   //@{
0084   /**
0085    * Function used to write out object persistently.
0086    * @param os the persistent output stream written to.
0087    */
0088   void persistentOutput(PersistentOStream & os) const;
0089 
0090   /**
0091    * Function used to read in object persistently.
0092    * @param is the persistent input stream read from.
0093    * @param version the version number of the object when written.
0094    */
0095   void persistentInput(PersistentIStream & is, int version);
0096   //@}
0097 
0098   /**
0099    * The standard Init function used to initialize the interfaces.
0100    * Called exactly once for each class by the class description system
0101    * before the main function starts or
0102    * when this class is dynamically loaded.
0103    */
0104   static void Init();
0105 
0106 protected:
0107 
0108   /** @name Clone Methods. */
0109   //@{
0110   /**
0111    * Make a simple clone of this object.
0112    * @return a pointer to the new object.
0113    */
0114   virtual IBPtr clone() const;
0115 
0116   /** Make a clone of this object, possibly modifying the cloned object
0117    * to make it sane.
0118    * @return a pointer to the new object.
0119    */
0120   virtual IBPtr fullclone() const;
0121   //@}
0122 
0123 protected:
0124 
0125   /** @name Standard Interfaced functions. */
0126   //@{
0127   /**
0128    * Initialize this object after the setup phase before saving an
0129    * EventGenerator to disk.
0130    * @throws InitException if object could not be initialized properly.
0131    */
0132   void doinit();
0133   //@}
0134 
0135 private:
0136 
0137   /**
0138    * The assignment operator is private and must never be called.
0139    * In fact, it should not even be implemented.
0140    */
0141   MEff2tv & operator=(const MEff2tv &) = delete;
0142 
0143 private:
0144 
0145   /** @name Functions to compute the ProductionMatrixElement. */
0146   //@{
0147   /**
0148    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$
0149    * @param sp Spinors for first incoming particle
0150    * @param spbar SpinorBar Wavefunctions for second incoming particle
0151    * @param vec VectorWaveFunctions for outgoing vector
0152    * @param ten Outgoing TensorWaveFunction
0153    * @param me2 colour averaged, spin summed ME
0154    * @param first Whether or not first call to decide if colour decomposition etc
0155    * should be calculated
0156    * @return ProductionMatrixElement containing results of 
0157    * helicity calculations
0158    */
0159   ProductionMatrixElement
0160   ffb2tvHeME(SpinorVector & sp, SpinorBarVector & spbar,
0161          TBVector & ten, VBVector & vec,
0162          double & me2,bool first) const;
0163   //@}
0164 
0165   /**
0166    * A debugging function to test the value of me2 against an
0167    * analytic function.
0168    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
0169    */
0170   virtual void debug(double me2) const;
0171 
0172 private:
0173 
0174   /**
0175    * Store a pair of  FFTVertex and FFVVertex pointers  
0176    */
0177   vector<pair<AbstractFFTVertexPtr, AbstractFFVVertexPtr> > fermion_;
0178 
0179   /**
0180    *  Store a pair of FFTVertex and VVTVertex pointers
0181    */
0182   vector<pair<AbstractFFVVertexPtr, AbstractVVTVertexPtr> > vector_;
0183 
0184   /**
0185    *  The four point vertex
0186    */
0187   vector<AbstractFFVTVertexPtr> fourPoint_;
0188 
0189 };
0190 
0191 }
0192 
0193 #endif /* HERWIG_MEff2tv_H */