Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEGammaGamma2ff_H
0003 #define HERWIG_MEGammaGamma2ff_H
0004 //
0005 // This is the declaration of the MEGammaGamma2ff class.
0006 //
0007 
0008 #include "Herwig/MatrixElement/HwMEBase.h"
0009 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0010 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
0011 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
0012 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0013 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
0014 
0015 namespace Herwig {
0016 
0017 using namespace ThePEG;
0018 
0019 /**
0020  * The MEGammaGamma2ff class provides the matrix elements for
0021  * \f$\gamma\gamma\to f \bar{f}\f$.
0022  *
0023  * @see \ref MEGammaGamma2ffInterfaces "The interfaces"
0024  * defined for MEGammaGamma2ff.
0025  */
0026 class MEGammaGamma2ff: public HwMEBase {
0027 
0028 public:
0029 
0030   /**
0031    * The default constructor.
0032    */
0033   MEGammaGamma2ff();
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    * Add all possible diagrams with the add() function.
0065    */
0066   virtual void getDiagrams() const;
0067 
0068   /**
0069    * Get diagram selector. With the information previously supplied with the
0070    * setKinematics method, a derived class may optionally
0071    * override this method to weight the given diagrams with their
0072    * (although certainly not physical) relative probabilities.
0073    * @param dv the diagrams to be weighted.
0074    * @return a Selector relating the given diagrams to their weights.
0075    */
0076   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
0077 
0078   /**
0079    * Return a Selector with possible colour geometries for the selected
0080    * diagram weighted by their relative probabilities.
0081    * @param diag the diagram chosen.
0082    * @return the possible colour geometries weighted by their
0083    * relative probabilities.
0084    */
0085   virtual Selector<const ColourLines *>
0086   colourGeometries(tcDiagPtr diag) const;
0087 
0088   /**
0089    *  Construct the vertex of spin correlations.
0090    */
0091   virtual void constructVertex(tSubProPtr);
0092   //@}
0093 
0094 public:
0095 
0096   /** @name Functions used by the persistent I/O system. */
0097   //@{
0098   /**
0099    * Function used to write out object persistently.
0100    * @param os the persistent output stream written to.
0101    */
0102   void persistentOutput(PersistentOStream & os) const;
0103 
0104   /**
0105    * Function used to read in object persistently.
0106    * @param is the persistent input stream read from.
0107    * @param version the version number of the object when written.
0108    */
0109   void persistentInput(PersistentIStream & is, int version);
0110   //@}
0111 
0112   /**
0113    * The standard Init function used to initialize the interfaces.
0114    * Called exactly once for each class by the class description system
0115    * before the main function starts or
0116    * when this class is dynamically loaded.
0117    */
0118   static void Init();
0119 
0120 protected:
0121 
0122   /**
0123    * Matrix element for \f$\gamma\gamma\to q\bar{q}\f$
0124    * @param p1   The wavefunctions for the first  incoming photon
0125    * @param p2   The wavefunctions for the second incoming photon
0126    * @param f    The wavefunction  for the outgoing fermion
0127    * @param fbar The wavefunction  for the outgoing antifermion
0128    * @param calc Whether or not to calculate the matrix element
0129    */
0130   double helicityME(vector<VectorWaveFunction> &p1,vector<VectorWaveFunction> &p2,
0131             vector<SpinorBarWaveFunction> & f,
0132             vector<SpinorWaveFunction> & fbar, bool calc) const;
0133 protected:
0134 
0135   /** @name Clone Methods. */
0136   //@{
0137   /**
0138    * Make a simple clone of this object.
0139    * @return a pointer to the new object.
0140    */
0141   virtual IBPtr clone() const {return new_ptr(*this);}
0142 
0143   /** Make a clone of this object, possibly modifying the cloned object
0144    * to make it sane.
0145    * @return a pointer to the new object.
0146    */
0147   virtual IBPtr fullclone() const {return new_ptr(*this);}
0148   //@}
0149 
0150 protected:
0151 
0152   /** @name Standard Interfaced functions. */
0153   //@{
0154   /**
0155    * Initialize this object after the setup phase before saving an
0156    * EventGenerator to disk.
0157    * @throws InitException if object could not be initialized properly.
0158    */
0159   virtual void doinit();
0160   //@}
0161 
0162 private:
0163 
0164   /**
0165    * The assignment operator is private and must never be called.
0166    * In fact, it should not even be implemented.
0167    */
0168   MEGammaGamma2ff & operator=(const MEGammaGamma2ff &) = delete;
0169 
0170 private:
0171   
0172   /**
0173    *  Which processes to include
0174    */
0175   int process_;
0176 
0177   /**
0178    *  Pointer to the photon vertex
0179    */
0180   AbstractFFVVertexPtr vertex_;
0181 
0182   /**
0183    *  Matrix element
0184    */
0185   mutable ProductionMatrixElement me_;
0186 
0187 };
0188 
0189 }
0190 
0191 #endif /* HERWIG_MEGammaGamma2ff_H */