Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_FtoFVVDecayer_H
0003 #define HERWIG_FtoFVVDecayer_H
0004 //
0005 // This is the declaration of the FtoFVVDecayer class.
0006 //
0007 
0008 #include "GeneralThreeBodyDecayer.h"
0009 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0010 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0011 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
0012 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0013 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0014 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
0015 
0016 namespace Herwig {
0017 using namespace ThePEG;
0018 
0019 /**
0020  * The FtoFVVDecayer class provides the general matrix elements for the
0021  * decay of a fermion to a fermion and two vector bosons.
0022  *
0023  * @see \ref FtoFVVDecayerInterfaces "The interfaces"
0024  * defined for FtoFVVDecayer.
0025  */
0026 class FtoFVVDecayer: public GeneralThreeBodyDecayer {
0027 
0028 public:
0029   
0030   /**
0031    * Return the matrix element squared for a given mode and phase-space channel.
0032    * @param ichan The channel we are calculating the matrix element for. 
0033    * @param part The decaying Particle.
0034    * @param outgoing The particles produced in the decay
0035    * @param momenta  The momenta of the particles produced in the decay
0036    * @param meopt Option for the calculation of the matrix element
0037    * @return The matrix element squared for the phase-space configuration.
0038    */
0039   double me2(const int ichan,const Particle & part,
0040          const tPDVector & outgoing,
0041          const vector<Lorentz5Momentum> & momenta,
0042          MEOption meopt) const;
0043 
0044   /**
0045    *   Construct the SpinInfos for the particles produced in the decay
0046    */
0047   virtual void constructSpinInfo(const Particle & part,
0048                  ParticleVector outgoing) const;
0049   
0050   /**
0051    * Method to return an object to calculate the 3 (or higher body) partial width
0052    * @param dm The DecayMode
0053    * @return A pointer to a WidthCalculatorBase object capable of calculating the width
0054    */
0055   virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
0056 
0057 public:
0058 
0059   /** @name Functions used by the persistent I/O system. */
0060   //@{
0061   /**
0062    * Function used to write out object persistently.
0063    * @param os the persistent output stream written to.
0064    */
0065   void persistentOutput(PersistentOStream & os) const;
0066 
0067   /**
0068    * Function used to read in object persistently.
0069    * @param is the persistent input stream read from.
0070    * @param version the version number of the object when written.
0071    */
0072   void persistentInput(PersistentIStream & is, int version);
0073   //@}
0074 
0075   /**
0076    * The standard Init function used to initialize the interfaces.
0077    * Called exactly once for each class by the class description system
0078    * before the main function starts or
0079    * when this class is dynamically loaded.
0080    */
0081   static void Init();
0082 
0083 protected:
0084 
0085   /** @name Clone Methods. */
0086   //@{
0087   /**
0088    * Make a simple clone of this object.
0089    * @return a pointer to the new object.
0090    */
0091   virtual IBPtr clone() const;
0092 
0093   /** Make a clone of this object, possibly modifying the cloned object
0094    * to make it sane.
0095    * @return a pointer to the new object.
0096    */
0097   virtual IBPtr fullclone() const;
0098   //@}
0099 
0100 protected:
0101 
0102   /**
0103    *   Set up the diagrams etc
0104    */
0105   virtual void setupDiagrams(bool checkKinematics);
0106 
0107 private:
0108 
0109   /**
0110    * The assignment operator is private and must never be called.
0111    * In fact, it should not even be implemented.
0112    */
0113   FtoFVVDecayer & operator=(const FtoFVVDecayer &) = delete;
0114 
0115 private:
0116   
0117   /**
0118    * Store the vector of scalar intermediates
0119    */
0120   vector<pair<AbstractFFSVertexPtr, AbstractVVSVertexPtr> > sca_;
0121 
0122   /**
0123    * Store the vector for fermion intermediates
0124    */
0125   vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > fer_;
0126 
0127   /**
0128    * Store the vector for gauge boson intermediates
0129    */
0130   vector<pair<AbstractFFVVertexPtr, AbstractVVVVertexPtr> > vec_;
0131 
0132   /**
0133    * Store the vector of tensor intermediates
0134    */
0135   vector<pair<AbstractFFTVertexPtr, AbstractVVTVertexPtr> > ten_;
0136 
0137   /**
0138    *  Spin density matrix
0139    */
0140   mutable RhoDMatrix rho_;
0141 
0142   /**
0143    *  Spinor wavefunctions
0144    */
0145   mutable vector<SpinorWaveFunction> fwave_;
0146 
0147   /**
0148    *  Barred spinor wavefunctions
0149    */
0150   mutable vector<SpinorBarWaveFunction> fbwave_;
0151 
0152   /**
0153    *  Vector wavefunctions
0154    */
0155   mutable pair<vector<VectorWaveFunction>, vector<VectorWaveFunction> > vwave_;
0156 };
0157 
0158 }
0159 
0160 #endif /* HERWIG_FtoFVVDecayer_H */