Back to home page

EIC code displayed by LXR

 
 

    


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

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