Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_MEGammaGamma2PiPi_H
0003 #define Herwig_MEGammaGamma2PiPi_H
0004 //
0005 // This is the declaration of the MEGammaGamma2PiPi class.
0006 //
0007 
0008 #include "Herwig/MatrixElement/HwMEBase.h"
0009 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0010 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
0011 
0012 namespace Herwig {
0013 
0014 using namespace ThePEG;
0015 using ThePEG::Helicity::VectorWaveFunction;
0016 
0017 /**
0018  * The MEGammaGamma2PiPi class provides a smiple matrix element for \f$\gamma\gamma\to \pi^+\pi^-$ using scalar QED
0019  *
0020  * @see \ref MEGammaGamma2PiPiInterfaces "The interfaces"
0021  * defined for MEGammaGamma2PiPi.
0022  */
0023 class MEGammaGamma2PiPi: public HwMEBase {
0024 
0025 public:
0026 
0027   /**
0028    * The default constructor.
0029    */
0030   MEGammaGamma2PiPi();
0031 
0032 public:
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   /**
0089    *  Construct the vertex of spin correlations.
0090    */
0091   virtual void constructVertex(tSubProPtr);
0092 
0093 public:
0094 
0095   /**
0096    * The standard Init function used to initialize the interfaces.
0097    * Called exactly once for each class by the class description system
0098    * before the main function starts or
0099    * when this class is dynamically loaded.
0100    */
0101   static void Init();
0102 
0103 protected:
0104 
0105   /**
0106    * Matrix element for \f$\gamma\gamma\to q\bar{q}\f$
0107    * @param p1   The wavefunctions for the first  incoming photon
0108    * @param p2   The wavefunctions for the second incoming photon
0109    * @param momenta The momenta
0110    * @param calc Whether or not to calculate the matrix element
0111    */
0112   double helicityME(vector<VectorWaveFunction> &p1,vector<VectorWaveFunction> &p2,
0113             const vector<Lorentz5Momentum> & momenta,
0114             bool calc) const;
0115 
0116 protected:
0117 
0118   /** @name Clone Methods. */
0119   //@{
0120   /**
0121    * Make a simple clone of this object.
0122    * @return a pointer to the new object.
0123    */
0124   virtual IBPtr clone() const;
0125 
0126   /** Make a clone of this object, possibly modifying the cloned object
0127    * to make it sane.
0128    * @return a pointer to the new object.
0129    */
0130   virtual IBPtr fullclone() const;
0131   //@}
0132 
0133 private:
0134 
0135   /**
0136    * The assignment operator is private and must never be called.
0137    * In fact, it should not even be implemented.
0138    */
0139   MEGammaGamma2PiPi & operator=(const MEGammaGamma2PiPi &) = delete;
0140 
0141 private:
0142 
0143   /**
0144    *  Matrix element
0145    */
0146   mutable ProductionMatrixElement me_;
0147 
0148 };
0149 
0150 }
0151 
0152 #endif /* Herwig_MEGammaGamma2PiPi_H */