Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_MEvv2vs_H
0003 #define HERWIG_MEvv2vs_H
0004 //
0005 // This is the declaration of the MEvv2vs class.
0006 //
0007 
0008 #include "GeneralHardME.h"
0009 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0010 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0011 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
0012 #include "ThePEG/Helicity/Vertex/AbstractVVVSVertex.h"
0013 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
0014 
0015 namespace Herwig {
0016 
0017 using namespace ThePEG;
0018 using Helicity::VectorWaveFunction;
0019 using Helicity::ScalarWaveFunction;
0020 
0021 /**
0022  * This is the implementation of the matrix element for 
0023  * \f$2\to 2\f$ massless vector-boson pair to a vector and scalar boson.
0024  * It inherits from GeneralHardME and implements the appropriate virtual
0025  * member functions.
0026  *
0027  * @see \ref MEvv2vsInterfaces "The interfaces"
0028  * defined for MEvv2vs.
0029  */
0030 class MEvv2vs: public GeneralHardME {
0031 
0032 public:
0033 
0034   /**
0035    *  Typedef for VectorWaveFunction
0036    */
0037   typedef vector<VectorWaveFunction> VBVector;
0038 
0039 public:
0040 
0041   /** @name Virtual functions required by the GeneralHardME class. */
0042   //@{
0043   /**
0044    * The matrix element for the kinematical configuration
0045    * previously provided by the last call to setKinematics(), suitably
0046    * scaled by sHat() to give a dimension-less number.
0047    * @return the matrix element scaled with sHat() to give a
0048    * dimensionless number.
0049    */
0050   virtual double me2() const;
0051   //@}
0052 
0053   /**
0054    * Construct the vertex information for the spin correlations
0055    * @param sub Pointer to the relevent SubProcess
0056    */
0057   virtual void constructVertex(tSubProPtr sub);
0058 
0059 private:
0060 
0061   /**
0062    * Compute the matrix element for \f$V\, V\to V\, V\f$
0063    * @param vin1 VectorWaveFunctions for first incoming particle
0064    * @param vin2 VectorWaveFunctions for second incoming particle
0065    * @param vout1 VectorWaveFunctions for first outgoing particle
0066    * @param mc Whether vout1 is massless or not
0067    * @param sout2  ScalarWaveFunction for outgoing particle
0068    * @param me2 colour averaged, spin summed ME
0069    * @param first Whether or not first call to decide if colour decomposition etc
0070    * should be calculated
0071    * @return ProductionMatrixElement containing results of 
0072    * helicity calculations
0073    */
0074   ProductionMatrixElement 
0075   vv2vsHeME(VBVector & vin1, VBVector & vin2, 
0076         VBVector & vout1, bool mc, ScalarWaveFunction & sout2,
0077         double & me2, bool first ) const;
0078 
0079 public:
0080 
0081   /** @name Functions used by the persistent I/O system. */
0082   //@{
0083   /**
0084    * Function used to write out object persistently.
0085    * @param os the persistent output stream written to.
0086    */
0087   void persistentOutput(PersistentOStream & os) const;
0088 
0089   /**
0090    * Function used to read in object persistently.
0091    * @param is the persistent input stream read from.
0092    * @param version the version number of the object when written.
0093    */
0094   void persistentInput(PersistentIStream & is, int version);
0095   //@}
0096 
0097   /**
0098    * The standard Init function used to initialize the interfaces.
0099    * Called exactly once for each class by the class description system
0100    * before the main function starts or
0101    * when this class is dynamically loaded.
0102    */
0103   static void Init();
0104 
0105 protected:
0106 
0107   /** @name Clone Methods. */
0108   //@{
0109   /**
0110    * Make a simple clone of this object.
0111    * @return a pointer to the new object.
0112    */
0113   virtual IBPtr clone() const;
0114 
0115   /** Make a clone of this object, possibly modifying the cloned object
0116    * to make it sane.
0117    * @return a pointer to the new object.
0118    */
0119   virtual IBPtr fullclone() const;
0120   //@}
0121 
0122 protected:
0123 
0124   /** @name Standard Interfaced functions. */
0125   //@{
0126   /**
0127    * Initialize this object after the setup phase before saving an
0128    * EventGenerator to disk.
0129    * @throws InitException if object could not be initialized properly.
0130    */
0131   virtual void doinit();
0132   //@}
0133 
0134 private:
0135 
0136   /**
0137    * The assignment operator is private and must never be called.
0138    * In fact, it should not even be implemented.
0139    */
0140   MEvv2vs & operator=(const MEvv2vs &) = delete;
0141 
0142 private:
0143 
0144   /**
0145    * Store the dynamically casted VVSVertex and VSSVertex pointers
0146    */
0147   vector<pair<AbstractVVSVertexPtr, AbstractVSSVertexPtr> > scalar_;
0148 
0149   /**
0150    * Store the dynamically casted VVVVertex and VVSVertex pointers
0151    */
0152   vector<pair<AbstractVVVVertexPtr, AbstractVVSVertexPtr> > vector_;
0153 
0154   /**
0155    * Store the dynamically casted VVVSVertex pointer
0156    */
0157   vector<AbstractVVVSVertexPtr> four_;
0158 
0159 };
0160 
0161 }
0162 
0163 #endif /* HERWIG_MEvv2vs_H */