Back to home page

EIC code displayed by LXR

 
 

    


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

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