Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef THEPEG_VVSDecayer_H
0003 #define THEPEG_VVSDecayer_H
0004 //
0005 // This is the declaration of the VVSDecayer class.
0006 //
0007 
0008 #include "GeneralTwoBodyDecayer.h"
0009 #include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h"
0010 #include "ThePEG/Repository/EventGenerator.h"
0011 
0012 namespace Herwig {
0013 using namespace ThePEG;
0014 using Helicity::VVSVertexPtr;
0015 
0016 /** \ingroup Decay
0017  * The VVSDecayer class implements the decay of a vector to a
0018  * vector and a scalar in a general model. It holds an VVSVertex pointer
0019  * that must be typecast from the  VertexBase pointer helid in the
0020  * GeneralTwoBodyDecayer. It implents the virtual functions me2() and
0021  * partialWidth(). 
0022  *
0023  * @see \ref VVSDecayerInterfaces "The interfaces"
0024  * defined for VVSDecayer.
0025  */
0026 class VVSDecayer: public GeneralTwoBodyDecayer {
0027 
0028 public:
0029 
0030   /**
0031    * The default constructor.
0032    */
0033   VVSDecayer() {}
0034 
0035   /** @name Virtual functions required by the Decayer class. */
0036   //@{
0037   /**
0038    * Return the matrix element squared for a given mode and phase-space channel.
0039    * @param ichan The channel we are calculating the matrix element for. 
0040    * @param part The decaying Particle.
0041    * @param outgoing The particles produced in the decay
0042    * @param momenta  The momenta of the particles produced in the decay
0043    * @param meopt Option for the calculation of the matrix element
0044    * @return The matrix element squared for the phase-space configuration.
0045    */
0046   double me2(const int ichan,const Particle & part,
0047          const tPDVector & outgoing,
0048          const vector<Lorentz5Momentum> & momenta,
0049          MEOption meopt) const;
0050 
0051   /**
0052    *   Construct the SpinInfos for the particles produced in the decay
0053    */
0054   virtual void constructSpinInfo(const Particle & part,
0055                  ParticleVector outgoing) const;
0056 
0057   /**
0058    * Function to return partial Width
0059    * @param inpart The decaying particle.
0060    * @param outa One of the decay products.
0061    * @param outb The other decay product.
0062    */
0063   virtual Energy partialWidth(PMPair inpart, PMPair outa, 
0064                   PMPair outb) const;
0065 
0066   /**
0067    *  Set the information on the decay
0068    */
0069   virtual void setDecayInfo(PDPtr incoming, PDPair outgoing,
0070                 vector<VertexBasePtr>,
0071                 map<ShowerInteraction,VertexBasePtr> &,
0072                 const vector<map<ShowerInteraction,VertexBasePtr> > &,
0073                 map<ShowerInteraction,VertexBasePtr>);
0074   
0075   /**
0076    *  Has a POWHEG style correction
0077    */
0078   virtual POWHEGType hasPOWHEGCorrection()  {
0079     POWHEGType output = FSR;
0080     for(auto vertex : vertex_) {
0081       if(vertex->orderInAllCouplings()!=1) {
0082     output = No;
0083     break;
0084       }
0085     }
0086     return output;
0087   }
0088 
0089   /**
0090    *  Three-body matrix element including additional QCD radiation
0091    */
0092   virtual double threeBodyME(const int , const Particle & inpart,
0093                  const ParticleVector & decay,
0094                  ShowerInteraction inter, MEOption meopt);
0095   //@}
0096 
0097 public:
0098 
0099   /** @name Functions used by the persistent I/O system. */
0100   //@{
0101   /**
0102    * Function used to write out object persistently.
0103    * @param os the persistent output stream written to.
0104    */
0105   void persistentOutput(PersistentOStream & os) const;
0106 
0107   /**
0108    * Function used to read in object persistently.
0109    * @param is the persistent input stream read from.
0110    * @param version the version number of the object when written.
0111    */
0112   void persistentInput(PersistentIStream & is, int version);
0113   //@}
0114 
0115   /**
0116    * The standard Init function used to initialize the interfaces.
0117    * Called exactly once for each class by the class description system
0118    * before the main function starts or
0119    * when this class is dynamically loaded.
0120    */
0121   static void Init();
0122 
0123 protected:
0124 
0125   /** @name Clone Methods. */
0126   //@{
0127   /**
0128    * Make a simple clone of this object.
0129    * @return a pointer to the new object.
0130    */
0131   virtual IBPtr clone() const;
0132 
0133   /** Make a clone of this object, possibly modifying the cloned object
0134    * to make it sane.
0135    * @return a pointer to the new object.
0136    */
0137   virtual IBPtr fullclone() const;
0138   //@}
0139 
0140 private:
0141 
0142   /**
0143    * The assignment operator is private and must never be called.
0144    * In fact, it should not even be implemented.
0145    */
0146   VVSDecayer & operator=(const VVSDecayer &) = delete;
0147 
0148 private:
0149 
0150   /**
0151    *  Abstract pointer to AbstractVVSVertex
0152    */
0153   vector<AbstractVVSVertexPtr> vertex_;
0154 
0155   /**
0156    * Pointer to the perturbative vertex
0157    */
0158   vector<VVSVertexPtr> perturbativeVertex_;
0159 
0160   /**
0161    *  Abstract pointer to AbstractVVVVertex for QCD radiation from incoming vector
0162    */
0163   map<ShowerInteraction,AbstractVVVVertexPtr> incomingVertex_;
0164 
0165   /**
0166    *  Abstract pointer to AbstractVVVVertex for QCD radiation from the first outgoing vector
0167    */
0168   map<ShowerInteraction,AbstractVVVVertexPtr> outgoingVertexV_;
0169 
0170   /**
0171    *  Abstract pointer to AbstractVVVVertex for QCD radiation from the second outgoing vector
0172    */
0173   map<ShowerInteraction,AbstractVSSVertexPtr> outgoingVertexS_;
0174 
0175   /**
0176    *  Spin density matrix
0177    */
0178   mutable RhoDMatrix rho_;
0179 
0180   /**
0181    *  Vector wavefunctions
0182    */
0183   mutable vector<Helicity::VectorWaveFunction> vectors_[2];
0184   
0185 private:
0186 
0187   /**
0188    *  Members for the POWHEG correction
0189    */
0190   //@{
0191   /**
0192    *  Spin density matrix for 3 body decay
0193    */
0194   mutable RhoDMatrix rho3_;
0195 
0196   /**
0197    *  Vector wavefunctions
0198    */
0199   mutable vector<Helicity::VectorWaveFunction> vectors3_[2];
0200 
0201     /**
0202    *  Vector wavefunction for 3 body decay
0203    */
0204   mutable vector<Helicity::VectorWaveFunction> gluon_;
0205   //@}
0206 };
0207 
0208 }
0209 
0210 #endif /* THEPEG_VVSDecayer_H */