Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEPP2QQHiggs_H
0003 #define HERWIG_MEPP2QQHiggs_H
0004 //
0005 // This is the declaration of the MEPP2QQHiggs class.
0006 //
0007 
0008 #include "Herwig/MatrixElement/HwMEBase.h"
0009 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0010 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0011 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0012 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0013 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
0014 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0015 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0016 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0017 #include "Herwig/PDT/GenericMassGenerator.h"
0018 
0019 namespace Herwig {
0020 
0021 using namespace ThePEG;
0022 
0023 /**
0024  * The MEPP2QQHiggs class implements the matrix elements for
0025  * \f$gg\to Q \bar Q h^0\f$ and \f$q\bar q\to Q \bar Q h^0\f$.
0026  *
0027  * @see \ref MEPP2QQHiggsInterfaces "The interfaces"
0028  * defined for MEPP2QQHiggs.
0029  */
0030 class MEPP2QQHiggs: public HwMEBase {
0031 
0032 public:
0033 
0034   /** @name Standard constructors and destructors. */
0035   //@{
0036   /**
0037    * The default constructor.
0038    */
0039   MEPP2QQHiggs();
0040   //@}
0041 
0042 public:
0043 
0044   /** @name Virtual functions required by the MEBase class. */
0045   //@{
0046   /**
0047    * Return the order in \f$\alpha_S\f$ in which this matrix
0048    * element is given.
0049    */
0050   virtual unsigned int orderInAlphaS() const;
0051 
0052   /**
0053    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
0054    * element is given.
0055    */
0056   virtual unsigned int orderInAlphaEW() const;
0057 
0058   /**
0059    * The matrix element for the kinematical configuration
0060    * previously provided by the last call to setKinematics(), suitably
0061    * scaled by sHat() to give a dimension-less number.
0062    * @return the matrix element scaled with sHat() to give a
0063    * dimensionless number.
0064    */
0065   virtual double me2() const;
0066 
0067   /**
0068    * Return the scale associated with the last set phase space point.
0069    */
0070   virtual Energy2 scale() const;
0071 
0072   /**
0073    * Set the typed and momenta of the incoming and outgoing partons to
0074    * be used in subsequent calls to me() and colourGeometries()
0075    * according to the associated XComb object. If the function is
0076    * overridden in a sub class the new function must call the base
0077    * class one first.
0078    */
0079   virtual void setKinematics();
0080 
0081   /**
0082    * The number of internal degrees of freedom used in the matrix
0083    * element.
0084    */
0085   virtual int nDim() const;
0086 
0087   /**
0088    * Generate internal degrees of freedom given nDim() uniform
0089    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
0090    * generator, the dSigHatDR should be a smooth function of these
0091    * numbers, although this is not strictly necessary.
0092    * @param r a pointer to the first of nDim() consecutive random numbers.
0093    * @return true if the generation succeeded, otherwise false.
0094    */
0095   virtual bool generateKinematics(const double * r);
0096 
0097   /**
0098    * Return the matrix element squared differential in the variables
0099    * given by the last call to generateKinematics().
0100    */
0101   virtual CrossSection dSigHatDR() const;
0102 
0103   /**
0104    * Add all possible diagrams with the add() function.
0105    */
0106   virtual void getDiagrams() const;
0107 
0108   /**
0109    * Get diagram selector. With the information previously supplied with the
0110    * setKinematics method, a derived class may optionally
0111    * override this method to weight the given diagrams with their
0112    * (although certainly not physical) relative probabilities.
0113    * @param dv the diagrams to be weighted.
0114    * @return a Selector relating the given diagrams to their weights.
0115    */
0116   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
0117 
0118   /**
0119    * Return a Selector with possible colour geometries for the selected
0120    * diagram weighted by their relative probabilities.
0121    * @param diag the diagram chosen.
0122    * @return the possible colour geometries weighted by their
0123    * relative probabilities.
0124    */
0125   virtual Selector<const ColourLines *>
0126   colourGeometries(tcDiagPtr diag) const;
0127 
0128   /**
0129    *  Construct the vertex of spin correlations.
0130    */
0131   virtual void constructVertex(tSubProPtr);
0132   //@}
0133 
0134 protected:
0135 
0136   /**
0137    *  Members to calculate the matrix elements
0138    */
0139   //@{
0140   /**
0141    * Matrix element for \f$gg\to Q\bar{Q}h^0\f$
0142    * @param g1   The wavefunctions for the first  incoming gluon
0143    * @param g2   The wavefunctions for the second incoming gluon
0144    * @param q    The wavefunction  for the outgoing quark
0145    * @param qbar The wavefunction  for the outgoing antiquark
0146    * @param h    The wavefunction for the outgoing Higgs boson
0147    * @param flow The colour flow
0148    */
0149   double ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
0150           vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar,
0151           ScalarWaveFunction & h,
0152           unsigned int flow) const;
0153 
0154   /**
0155    * Matrix element for \f$q\bar{q}\to Q\bar{Q}h^0\f$
0156    * @param q1 The wavefunction  for the incoming quark
0157    * @param q2 The wavefunction  for the incoming antiquark
0158    * @param q3 The wavefunction  for the outgoing quark
0159    * @param q4 The wavefunction  for the outgoing antiquark
0160    * @param h    The wavefunction for the outgoing Higgs boson
0161    * @param flow The colour flow
0162    */
0163   double qqME(vector<SpinorWaveFunction> & q1,
0164           vector<SpinorBarWaveFunction> & q2,
0165           vector<SpinorBarWaveFunction>    & q3,
0166           vector<SpinorWaveFunction>    & q4,
0167           ScalarWaveFunction & h,
0168           unsigned int flow) const;
0169   //@} 
0170 
0171 public:
0172 
0173   /** @name Functions used by the persistent I/O system. */
0174   //@{
0175   /**
0176    * Function used to write out object persistently.
0177    * @param os the persistent output stream written to.
0178    */
0179   void persistentOutput(PersistentOStream & os) const;
0180 
0181   /**
0182    * Function used to read in object persistently.
0183    * @param is the persistent input stream read from.
0184    * @param version the version number of the object when written.
0185    */
0186   void persistentInput(PersistentIStream & is, int version);
0187   //@}
0188 
0189   /**
0190    * The standard Init function used to initialize the interfaces.
0191    * Called exactly once for each class by the class description system
0192    * before the main function starts or
0193    * when this class is dynamically loaded.
0194    */
0195   static void Init();
0196 
0197 protected:
0198 
0199   /** @name Clone Methods. */
0200   //@{
0201   /**
0202    * Make a simple clone of this object.
0203    * @return a pointer to the new object.
0204    */
0205   virtual IBPtr clone() const;
0206 
0207   /** Make a clone of this object, possibly modifying the cloned object
0208    * to make it sane.
0209    * @return a pointer to the new object.
0210    */
0211   virtual IBPtr fullclone() const;
0212   //@}
0213 
0214 protected:
0215 
0216   /** @name Standard Interfaced functions. */
0217   //@{
0218   /**
0219    * Initialize this object after the setup phase before saving an
0220    * EventGenerator to disk.
0221    * @throws InitException if object could not be initialized properly.
0222    */
0223   virtual void doinit();
0224   //@}
0225 
0226 private:
0227 
0228   /**
0229    * The assignment operator is private and must never be called.
0230    * In fact, it should not even be implemented.
0231    */
0232   MEPP2QQHiggs & operator=(const MEPP2QQHiggs &) = delete;
0233 
0234 private:
0235   
0236   /**
0237    *  Switches to control the subprocess
0238    */
0239   //@{
0240   /**
0241    *  Quark Flavour
0242    */
0243   unsigned int quarkFlavour_;
0244   
0245   /**
0246    *  Processes to include
0247    */
0248   unsigned int process_;
0249   //@}
0250 
0251   /**
0252    *  Switches etc for the Higgs mass generation
0253    */
0254   //@{
0255   /**
0256    * Defines the Higgs resonance shape
0257    */
0258   unsigned int shapeOpt_;
0259 
0260   /**
0261    *  On-shell mass for the higgs
0262    */
0263   Energy mh_;
0264 
0265   /**
0266    *  On-shell width for the higgs
0267    */
0268   Energy wh_;
0269 
0270   /**
0271    *  The mass generator for the Higgs
0272    */
0273   GenericMassGeneratorPtr hmass_;
0274   //@}
0275   
0276   /**
0277    *  Vertices needed to compute the diagrams
0278    */
0279   //@{
0280   /**
0281    *  \f$ggg\f$ vertex
0282    */
0283   AbstractVVVVertexPtr GGGVertex_;
0284   
0285   /**
0286    *  \f$q\bar{q}g\f$ vertex
0287    */
0288   AbstractFFVVertexPtr QQGVertex_;
0289 
0290   /**
0291    *  \f$q\bar q h^0\f$ vertex
0292    */
0293   AbstractFFSVertexPtr QQHVertex_;
0294   //@}
0295   
0296 
0297   /**
0298    *  ParticleData objects of the particles
0299    */  
0300   //@{
0301   /**
0302    *  The gluon
0303    */
0304   PDPtr gluon_;
0305 
0306   /**
0307    * The Higgs boson
0308    */
0309   PDPtr higgs_;
0310   
0311   /**
0312    *  the quarks
0313    */
0314   vector<PDPtr> quark_;
0315 
0316   /**
0317    *  the antiquarks
0318    */
0319   vector<PDPtr> antiquark_;
0320   //@}
0321 
0322   /**
0323    *  Parameters for the phase-space generation
0324    */
0325   //@{
0326   /**
0327    *  Power for the phase-space mapping
0328    */
0329   double alpha_;
0330   //@}
0331 
0332   /**
0333    *  Colour flow
0334    */
0335   mutable unsigned int flow_;
0336 
0337   /**
0338    *  Diagram
0339    */
0340   mutable unsigned int diagram_;
0341 
0342   /**
0343    *  Matrix element
0344    */
0345   mutable ProductionMatrixElement me_;
0346 };
0347 
0348 }
0349 
0350 #endif /* HERWIG_MEPP2QQHiggs_H */