Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_MEfv2rv_H
0003 #define Herwig_MEfv2rv_H
0004 //
0005 // This is the declaration of the MEfv2rv class.
0006 //
0007 
0008 #include "GeneralHardME.h"
0009 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0010 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0011 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0012 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0013 #include "ThePEG/Helicity/WaveFunction/RSSpinorWaveFunction.h"
0014 #include "ThePEG/Helicity/WaveFunction/RSSpinorBarWaveFunction.h"
0015 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0016 #include "ThePEG/Helicity/Vertex/AbstractRFVVertex.h"
0017 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0018 #include "ThePEG/Helicity/Vertex/AbstractRFVVVertex.h"
0019 
0020 namespace Herwig {
0021 
0022 using namespace ThePEG;
0023 
0024 /**
0025  * This class implements the matrix element for a fermion and a vector
0026  * boson to a vector boson and a RS fermion. It inherits from GeneralHardME
0027  * and implements the appropriate virtual functions. 
0028  * 
0029  * @see GeneralHardME
0030  *
0031  */
0032 class MEfv2rv: public GeneralHardME {
0033 
0034 public:
0035 
0036   /** A vector of SpinorWaveFunctions. */
0037   typedef vector<Helicity::SpinorWaveFunction> SpinorVector;
0038 
0039   /** A vector of SpinorBarWaveFunctions. */
0040   typedef vector<Helicity::SpinorBarWaveFunction> SpinorBarVector;
0041 
0042   /** A vector of SpinorWaveFunctions. */
0043   typedef vector<Helicity::RSSpinorWaveFunction> RSSpinorVector;
0044 
0045   /** A vector of SpinorBarWaveFunctions. */
0046   typedef vector<Helicity::RSSpinorBarWaveFunction> RSSpinorBarVector;
0047 
0048   /** A vector of VectorWaveFunctions. */
0049   typedef vector<Helicity::VectorWaveFunction> VBVector;
0050   
0051 public:
0052 
0053   /** @name Virtual functions required by the MEBase class. */
0054   //@{
0055   /**
0056    * The matrix element for the kinematical configuration
0057    * previously provided by the last call to setKinematics(), suitably
0058    * scaled by sHat() to give a dimension-less number.
0059    * @return the matrix element scaled with sHat() to give a
0060    * dimensionless number.
0061    */
0062   virtual double me2() const;
0063   //@}
0064 
0065   /**
0066    * Construct the vertex information for the spin correlations
0067    * @param sub Pointer to the relevent SubProcess
0068    */
0069   virtual void constructVertex(tSubProPtr sub);
0070 
0071 private:
0072 
0073   /** @name Functions to calculate the Helicity MatrixElement.*/
0074   //@{
0075   /**
0076    * Calculate the matrix element for an incoming fermion
0077    * @param spIn A vector of spinors for the incoming fermion
0078    * @param vecIn A vector of VectorWaveFunctions for the incoming boson
0079    * @param spbOut A vector of SpinorBarWaveFunctions for the outgoing fermion
0080    * @param vecOut A vector of VectorWaveFunctions for the outgoing boson
0081    * @param mc If the outgoing vector is massless or not
0082    * @param first Whether or not first call to decide if colour decomposition etc
0083    * should be calculated
0084    * @param mesq The matrix element squared
0085   */
0086   ProductionMatrixElement
0087   fv2rvHeME(const SpinorVector & spIn,  const VBVector & vecIn, 
0088         const RSSpinorBarVector & spbOut, 
0089         const VBVector & vecOut, bool mc,
0090         double & mesq, bool first) const;
0091 
0092   /**
0093    * Calculate the matrix element for an incoming anti-fermion
0094    * @param spbIn A vector of SpinorBarWaveFunctions for the incoming anti-fermion
0095    * @param vecIn A vector of VectorWaveFunctions for the incoming boson
0096    * @param spOut A vector of Spinors for the outgoing antifermion
0097    * @param vecOut A vector of VectorWaveFunctions for the outgoing boson
0098    * @param mc If the outgoing vector is massless or not
0099    * @param first Whether or not first call to decide if colour decomposition etc
0100    * should be calculated
0101    * @param mesq The matrix element squared
0102   */
0103   ProductionMatrixElement
0104   fbv2rbvHeME(const SpinorBarVector & spbIn,  const VBVector & vecIn,
0105           const RSSpinorVector & spOut,
0106           const VBVector & vecOut, bool mc, 
0107           double & mesq, bool first) const;
0108   //@}
0109 
0110 public:
0111 
0112   /** @name Functions used by the persistent I/O system. */
0113   //@{
0114   /**
0115    * Function used to write out object persistently.
0116    * @param os the persistent output stream written to.
0117    */
0118   void persistentOutput(PersistentOStream & os) const;
0119 
0120   /**
0121    * Function used to read in object persistently.
0122    * @param is the persistent input stream read from.
0123    * @param version the version number of the object when written.
0124    */
0125   void persistentInput(PersistentIStream & is, int version);
0126   //@}
0127 
0128   /**
0129    * The standard Init function used to initialize the interfaces.
0130    * Called exactly once for each class by the class description system
0131    * before the main function starts or
0132    * when this class is dynamically loaded.
0133    */
0134   static void Init();
0135 
0136 protected:
0137 
0138   /** @name Clone Methods. */
0139   //@{
0140   /**
0141    * Make a simple clone of this object.
0142    * @return a pointer to the new object.
0143    */
0144   virtual IBPtr clone() const;
0145 
0146   /** Make a clone of this object, possibly modifying the cloned object
0147    * to make it sane.
0148    * @return a pointer to the new object.
0149    */
0150   virtual IBPtr fullclone() const;
0151   //@}
0152   
0153 protected:
0154 
0155   /** @name Standard Interfaced functions. */
0156   //@{
0157   /**
0158    * Initialize this object after the setup phase before saving an
0159    * EventGenerator to disk.
0160    * @throws InitException if object could not be initialized properly.
0161    */
0162   virtual void doinit();
0163   //@}
0164 
0165 private:
0166 
0167   /**
0168    * The assignment operator is private and must never be called.
0169    * In fact, it should not even be implemented.
0170    */
0171   MEfv2rv & operator=(const MEfv2rv &) = delete;
0172 
0173 private:
0174   
0175   /** @name Store dynamically casted vertices. */
0176   //@{
0177   /**
0178    * A pair off FFVVertex pointers 
0179    */
0180   vector<pair<AbstractFFVVertexPtr, AbstractRFVVertexPtr> > fermion_;
0181 
0182   /**
0183    * A pair of FFVVertex, VVVertex pointers 
0184    */
0185   vector<pair<AbstractRFVVertexPtr, AbstractVVVVertexPtr> > vector_;
0186 
0187   /**
0188    *  Four point vertices
0189    */
0190   vector<AbstractRFVVVertexPtr> four_;
0191   //@}
0192 
0193 };
0194 
0195 }
0196 
0197 #endif /* Herwig_MEfv2rv_H */