Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // FFSDecayer.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_FFSDecayer_H
0010 #define HERWIG_FFSDecayer_H
0011 //
0012 // This is the declaration of the FFSDecayer class.
0013 //
0014 
0015 #include "GeneralTwoBodyDecayer.h"
0016 #include "ThePEG/Repository/EventGenerator.h"
0017 #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
0018 #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
0019 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
0020 
0021 
0022 namespace Herwig {
0023 using namespace ThePEG;
0024 using Helicity::FFSVertexPtr;
0025 
0026   /** \ingroup Decay
0027    * The FFSDecayer class implements the decay of a fermion
0028    * to a fermion and a vector in a general model. It holds an FFVVertex
0029    * pointer that must be typecast from the VertexBase pointer held in
0030    * GeneralTwoBodyDecayer. It implents the virtual functions me2() and
0031    * partialWidth().
0032    *
0033    * @see GeneralTwoBodyDecayer
0034    */
0035 class FFSDecayer: public GeneralTwoBodyDecayer {
0036 
0037 public:
0038   
0039   /**
0040    * The default constructor.
0041    */
0042   FFSDecayer() {}
0043 
0044   /** @name Virtual functions required by the Decayer class. */
0045   //@{
0046   /**
0047    * Return the matrix element squared for a given mode and phase-space channel.
0048    * @param ichan The channel we are calculating the matrix element for. 
0049    * @param part The decaying Particle.
0050    * @param outgoing The particles produced in the decay
0051    * @param momenta  The momenta of the particles produced in the decay
0052    * @param meopt Option for the calculation of the matrix element
0053    * @return The matrix element squared for the phase-space configuration.
0054    */
0055   double me2(const int ichan,const Particle & part,
0056          const tPDVector & outgoing,
0057          const vector<Lorentz5Momentum> & momenta,
0058          MEOption meopt) const;
0059 
0060   /**
0061    *   Construct the SpinInfos for the particles produced in the decay
0062    */
0063   virtual void constructSpinInfo(const Particle & part,
0064                  ParticleVector outgoing) const;
0065 
0066   /**
0067    * Function to return partial Width
0068    * @param inpart The decaying particle.
0069    * @param outa One of the decay products.
0070    * @param outb The other decay product.
0071    */
0072   virtual Energy partialWidth(PMPair inpart, PMPair outa, 
0073                   PMPair outb) const;
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, MEOption meopt);
0094 
0095   /**
0096    *  Set the information on the decay
0097    */
0098   virtual void setDecayInfo(PDPtr incoming, PDPair outgoing,
0099                 vector<VertexBasePtr>,
0100                 map<ShowerInteraction,VertexBasePtr> &,
0101                 const vector<map<ShowerInteraction,VertexBasePtr> > &,
0102                 map<ShowerInteraction,VertexBasePtr>);
0103   //@}
0104 
0105 public:
0106 
0107   /** @name Functions used by the persistent I/O system. */
0108   //@{
0109   /**
0110    * Function used to write out object persistently.
0111    * @param os the persistent output stream written to.
0112    */
0113   void persistentOutput(PersistentOStream & os) const;
0114 
0115   /**
0116    * Function used to read in object persistently.
0117    * @param is the persistent input stream read from.
0118    * @param version the version number of the object when written.
0119    */
0120   void persistentInput(PersistentIStream & is, int version);
0121   //@}
0122 
0123   /**
0124    * The standard Init function used to initialize the interfaces.
0125    * Called exactly once for each class by the class description system
0126    * before the main function starts or
0127    * when this class is dynamically loaded.
0128    */
0129   static void Init();
0130 
0131 protected:
0132 
0133   /** @name Clone Methods. */
0134   //@{
0135   /**
0136    * Make a simple clone of this object.
0137    * @return a pointer to the new object.
0138    */
0139   virtual IBPtr clone() const;
0140 
0141   /** Make a clone of this object, possibly modifying the cloned object
0142    * to make it sane.
0143    * @return a pointer to the new object.
0144    */
0145   virtual IBPtr fullclone() const;
0146   //@}
0147 
0148 private:
0149 
0150   /**
0151    * The assignment operator is private and must never be called.
0152    * In fact, it should not even be implemented.
0153    */
0154   FFSDecayer & operator=(const FFSDecayer &) = delete;
0155 
0156 private:
0157 
0158   /**
0159    *  Abstract pointer to AbstractFFSVertex
0160    */
0161   vector<AbstractFFSVertexPtr> vertex_;
0162 
0163   /**
0164    * Pointer to the perturbative vertex
0165    */
0166   vector<FFSVertexPtr> perturbativeVertex_;
0167 
0168   /**
0169    *  Abstract pointer to AbstractFFVVertex for QCD radiation from incoming (anti)fermion
0170    */
0171   map<ShowerInteraction,AbstractFFVVertexPtr> incomingVertex_;
0172 
0173   /**
0174    *  Abstract pointer to AbstractFFVVertex for QCD radiation from outgoing (anti)fermion
0175    */
0176   map<ShowerInteraction,AbstractFFVVertexPtr> outgoingVertexF_;
0177 
0178   /**
0179    *  Abstract pointer to AbstractVSSVertex for QCD radiation from outgoing scalar
0180    */
0181   map<ShowerInteraction,AbstractVSSVertexPtr> outgoingVertexS_;
0182 
0183   /**
0184    *  Spin density matrix
0185    */
0186   mutable RhoDMatrix rho_;
0187 
0188   /**
0189    *  Spinor wavefunctions
0190    */
0191   mutable vector<SpinorWaveFunction>    wave_   ;
0192 
0193   /**
0194    *  Barred spinor wavefunctions
0195    */
0196   mutable vector<SpinorBarWaveFunction> wavebar_;
0197 
0198  /**
0199    *  Spin density matrix for 3 body decay
0200    */
0201   mutable RhoDMatrix rho3_;
0202 
0203   /**
0204    *  Scalar wavefunction for 3 body decay
0205    */
0206   mutable ScalarWaveFunction swave3_;
0207 
0208   /**
0209    *  Spinor wavefunction for 3 body decay
0210    */
0211   mutable vector<SpinorWaveFunction> wave3_;
0212 
0213   /**
0214    *  Barred spinor wavefunction for 3 body decay
0215    */
0216   mutable vector<SpinorBarWaveFunction> wavebar3_;
0217 
0218     /**
0219    *  Vector wavefunction for 3 body decay
0220    */
0221   mutable vector<VectorWaveFunction> gluon_;
0222 
0223 };
0224 
0225 }
0226 
0227 #endif /* HERWIG_FFSDecayer_H */