Back to home page

EIC code displayed by LXR

 
 

    


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

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