Back to home page

EIC code displayed by LXR

 
 

    


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

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