Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEGammaGamma2WW_H
0003 #define HERWIG_MEGammaGamma2WW_H
0004 //
0005 // This is the declaration of the MEGammaGamma2WW class.
0006 //
0007 
0008 #include "Herwig/MatrixElement/HwMEBase.h"
0009 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0010 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.fh"
0011 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.fh"
0012 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0013 
0014 namespace Herwig {
0015 using namespace ThePEG;
0016 using namespace ThePEG::Helicity;
0017 
0018 /**
0019  * The MEGammaGamma2WW class provides the matrix elements for
0020  * \f$\gamma\gamma\to f \bar{f}\f$.
0021  *
0022  * @see \ref MEGammaGamma2WWInterfaces "The interfaces"
0023  * defined for MEGammaGamma2WW.
0024  */
0025 class MEGammaGamma2WW : public HwMEBase {
0026 
0027 public:
0028 
0029   /**
0030    * The default constructor.
0031    */
0032   MEGammaGamma2WW();
0033 
0034   /** @name Virtual functions required by the MEBase class. */
0035   //@{
0036   /**
0037    * Return the order in \f$\alpha_S\f$ in which this matrix
0038    * element is given.
0039    */
0040   virtual unsigned int orderInAlphaS() const;
0041 
0042   /**
0043    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
0044    * element is given.
0045    */
0046   virtual unsigned int orderInAlphaEW() const;
0047 
0048   /**
0049    * The matrix element for the kinematical configuration
0050    * previously provided by the last call to setKinematics(), suitably
0051    * scaled by sHat() to give a dimension-less number.
0052    * @return the matrix element scaled with sHat() to give a
0053    * dimensionless number.
0054    */
0055   virtual double me2() const;
0056 
0057   /**
0058    * Return the scale associated with the last set phase space point.
0059    */
0060   virtual Energy2 scale() const;
0061 
0062   /**
0063    * Add all possible diagrams with the add() function.
0064    */
0065   virtual void getDiagrams() const;
0066 
0067   /**
0068    * Get diagram selector. With the information previously supplied with the
0069    * setKinematics method, a derived class may optionally
0070    * override this method to weight the given diagrams with their
0071    * (although certainly not physical) relative probabilities.
0072    * @param dv the diagrams to be weighted.
0073    * @return a Selector relating the given diagrams to their weights.
0074    */
0075   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
0076 
0077   /**
0078    * Return a Selector with possible colour geometries for the selected
0079    * diagram weighted by their relative probabilities.
0080    * @param diag the diagram chosen.
0081    * @return the possible colour geometries weighted by their
0082    * relative probabilities.
0083    */
0084   virtual Selector<const ColourLines *>
0085   colourGeometries(tcDiagPtr diag) const;
0086 
0087   /**
0088    *  Construct the vertex of spin correlations.
0089    */
0090   virtual void constructVertex(tSubProPtr);
0091   //@}
0092 
0093 public:
0094 
0095   /** @name Functions used by the persistent I/O system. */
0096   //@{
0097   /**
0098    * Function used to write out object persistently.
0099    * @param os the persistent output stream written to.
0100    */
0101   void persistentOutput(PersistentOStream & os) const;
0102 
0103   /**
0104    * Function used to read in object persistently.
0105    * @param is the persistent input stream read from.
0106    * @param version the version number of the object when written.
0107    */
0108   void persistentInput(PersistentIStream & is, int version);
0109   //@}
0110 
0111   /**
0112    * The standard Init function used to initialize the interfaces.
0113    * Called exactly once for each class by the class description system
0114    * before the main function starts or
0115    * when this class is dynamically loaded.
0116    */
0117   static void Init();
0118 
0119 protected:
0120 
0121   /**
0122    * Matrix element for \f$\gamma\gamma\to q\bar{q}\f$
0123    * @param p1   The wavefunctions for the first  incoming photon
0124    * @param p2   The wavefunctions for the second incoming photon
0125    * @param w1   The wavefunctions for the first  outgoing W
0126    * @param w2   The wavefunctions for the second outgoing W
0127    * @param calc Whether or not to calculate the matrix element
0128    */
0129   double helicityME(vector<VectorWaveFunction> & p1,
0130             vector<VectorWaveFunction> & p2,
0131             vector<VectorWaveFunction> & w1,
0132             vector<VectorWaveFunction> & w2, bool calc) const;
0133 
0134 protected:
0135 
0136   /** @name Clone Methods. */
0137   //@{
0138   /**
0139    * Make a simple clone of this object.
0140    * @return a pointer to the new object.
0141    */
0142   virtual IBPtr clone() const;
0143 
0144   /** Make a clone of this object, possibly modifying the cloned object
0145    * to make it sane.
0146    * @return a pointer to the new object.
0147    */
0148   virtual IBPtr fullclone() const;
0149   //@}
0150 
0151 protected:
0152 
0153   /** @name Standard Interfaced functions. */
0154   //@{
0155   /**
0156    * Initialize this object after the setup phase before saving an
0157    * EventGenerator to disk.
0158    * @throws InitException if object could not be initialized properly.
0159    */
0160   virtual void doinit();
0161   //@}
0162 
0163 private:
0164 
0165   /**
0166    * The assignment operator is private and must never be called.
0167    * In fact, it should not even be implemented.
0168    */
0169   MEGammaGamma2WW & operator=(const MEGammaGamma2WW &) = delete;
0170 
0171 private:
0172 
0173   /**
0174    *  Treatment of the the W mass
0175    */
0176   unsigned int massOption_;
0177 
0178   /**
0179    *  Pointer to the gammaWW vertex
0180    */
0181   AbstractVVVVertexPtr WWWVertex_;
0182 
0183   /**
0184    *  Pointer to the gammagammaWW vertex
0185    */
0186   AbstractVVVVVertexPtr WWWWVertex_;
0187 
0188   /**
0189    *  Matrix element
0190    */
0191   mutable ProductionMatrixElement me_;
0192 
0193 };
0194 
0195 }
0196 
0197 #endif /* HERWIG_MEGammaGamma2WW_H */