Back to home page

EIC code displayed by LXR

 
 

    


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

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