Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEee2VV_H
0003 #define HERWIG_MEee2VV_H
0004 //
0005 // This is the declaration of the MEee2VV class.
0006 //
0007 
0008 #include "Herwig/MatrixElement/HwMEBase.h"
0009 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0010 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0011 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0012 
0013 namespace Herwig {
0014 
0015 using namespace ThePEG;
0016 
0017 /**
0018  * The MEee2VV class implements the matrix elements for 
0019  * \f$e^+e^-\to W^+W^-/|^0Z^0\f$.
0020  *
0021  * @see \ref MEee2VVInterfaces "The interfaces"
0022  * defined for MEee2VV.
0023  */
0024 class MEee2VV: public HwMEBase {
0025 
0026 public:
0027 
0028   /**
0029    * The default constructor.
0030    */
0031   MEee2VV();
0032 
0033   /** @name Virtual functions required by the MEBase class. */
0034   //@{
0035   /**
0036    * Return the order in \f$\alpha_S\f$ in which this matrix
0037    * element is given.
0038    */
0039   virtual unsigned int orderInAlphaS() const;
0040 
0041   /**
0042    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
0043    * element is given.
0044    */
0045   virtual unsigned int orderInAlphaEW() const;
0046 
0047   /**
0048    * The matrix element for the kinematical configuration
0049    * previously provided by the last call to setKinematics(), suitably
0050    * scaled by sHat() to give a dimension-less number.
0051    * @return the matrix element scaled with sHat() to give a
0052    * dimensionless number.
0053    */
0054   virtual double me2() const;
0055 
0056   /**
0057    * Return the scale associated with the last set phase space point.
0058    */
0059   virtual Energy2 scale() const;
0060 
0061   /**
0062    * Add all possible diagrams with the add() function.
0063    */
0064   virtual void getDiagrams() const;
0065 
0066   /**
0067    * Get diagram selector. With the information previously supplied with the
0068    * setKinematics method, a derived class may optionally
0069    * override this method to weight the given diagrams with their
0070    * (although certainly not physical) relative probabilities.
0071    * @param dv the diagrams to be weighted.
0072    * @return a Selector relating the given diagrams to their weights.
0073    */
0074   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
0075 
0076   /**
0077    * Return a Selector with possible colour geometries for the selected
0078    * diagram weighted by their relative probabilities.
0079    * @param diag the diagram chosen.
0080    * @return the possible colour geometries weighted by their
0081    * relative probabilities.
0082    */
0083   virtual Selector<const ColourLines *>
0084   colourGeometries(tcDiagPtr diag) const;
0085 
0086   /**
0087    * Used internally by generateKinematics, after calculating the
0088    * limits on cos(theta).
0089    */
0090   virtual double getCosTheta(double cthmin, double cthmax, const double r);
0091 
0092   /**
0093    *  Construct the vertex of spin correlations.
0094    */
0095   virtual void constructVertex(tSubProPtr);
0096   //@}
0097 
0098 public:
0099 
0100   /** @name Functions used by the persistent I/O system. */
0101   //@{
0102   /**
0103    * Function used to write out object persistently.
0104    * @param os the persistent output stream written to.
0105    */
0106   void persistentOutput(PersistentOStream & os) const;
0107 
0108   /**
0109    * Function used to read in object persistently.
0110    * @param is the persistent input stream read from.
0111    * @param version the version number of the object when written.
0112    */
0113   void persistentInput(PersistentIStream & is, int version);
0114   //@}
0115 
0116   /**
0117    * The standard Init function used to initialize the interfaces.
0118    * Called exactly once for each class by the class description system
0119    * before the main function starts or
0120    * when this class is dynamically loaded.
0121    */
0122   static void Init();
0123 
0124 protected:
0125 
0126   /**
0127    * Matrix element for \f$f\bar{f}\to W^+W^-\f$.
0128    * @param f1  Spinors for the incoming fermion
0129    * @param a1  Spinors for the incoming antifermion
0130    * @param v1  Polarization vector for the 1st outgoing boson
0131    * @param v2  Polarization vector for the 2nd outgoing boson
0132    */
0133   double WWME(vector<SpinorWaveFunction>    & f1,
0134           vector<SpinorBarWaveFunction> & a1,
0135           vector<VectorWaveFunction>    & v1,
0136           vector<VectorWaveFunction>    & v2) const;
0137 
0138   /**
0139    * Matrix element for \f$f\bar{f}\to Z^0Z^0\f$.
0140    * @param f1  Spinors for the incoming fermion
0141    * @param a1  Spinors for the incoming antifermion
0142    * @param v1  Polarization vector for the 1st outgoing boson
0143    * @param v2  Polarization vector for the 2nd outgoing boson
0144    */
0145   double ZZME(vector<SpinorWaveFunction>    & f1,
0146           vector<SpinorBarWaveFunction> & a1,
0147           vector<VectorWaveFunction>    & v1,
0148           vector<VectorWaveFunction>    & v2) const;
0149 
0150 protected:
0151 
0152   /** @name Clone Methods. */
0153   //@{
0154   /**
0155    * Make a simple clone of this object.
0156    * @return a pointer to the new object.
0157    */
0158   virtual IBPtr clone() const;
0159 
0160   /** Make a clone of this object, possibly modifying the cloned object
0161    * to make it sane.
0162    * @return a pointer to the new object.
0163    */
0164   virtual IBPtr fullclone() const;
0165   //@}
0166 
0167 
0168 protected:
0169 
0170   /** @name Standard Interfaced functions. */
0171   //@{
0172   /**
0173    * Initialize this object after the setup phase before saving an
0174    * EventGenerator to disk.
0175    * @throws InitException if object could not be initialized properly.
0176    */
0177   virtual void doinit();
0178   //@}
0179 
0180 private:
0181 
0182   /**
0183    * The assignment operator is private and must never be called.
0184    * In fact, it should not even be implemented.
0185    */
0186   MEee2VV & operator=(const MEee2VV &) = delete;
0187 
0188 private:
0189 
0190   /**
0191    *  Vertices
0192    */
0193   //@{
0194   /**
0195    *   FFPVertex
0196    */
0197   AbstractFFVVertexPtr FFPvertex_;
0198 
0199   /**
0200    *   FFWVertex
0201    */
0202   AbstractFFVVertexPtr FFWvertex_;
0203 
0204   /**
0205    *   FFZVertex
0206    */
0207   AbstractFFVVertexPtr FFZvertex_;
0208 
0209   /**
0210    *  WWW Vertex
0211    */ 
0212   AbstractVVVVertexPtr WWWvertex_;
0213   //@}
0214 
0215   /**
0216    *  Processes
0217    */
0218   unsigned int process_;
0219 
0220   /**
0221    *  Treatment of the the W and Z masses
0222    */
0223   unsigned int massOption_;
0224 
0225   /**
0226    *  The matrix element
0227    */
0228   mutable ProductionMatrixElement me_;
0229 };
0230 
0231 }
0232 
0233 #endif /* HERWIG_MEee2VV_H */