Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef THEPEG_StoFFVDecayer_H
0003 #define THEPEG_StoFFVDecayer_H
0004 //
0005 // This is the declaration of the StoFFVDecayer class.
0006 //
0007 
0008 #include "GeneralThreeBodyDecayer.h"
0009 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0010 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
0011 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0012 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0013 #include "ThePEG/Helicity/Vertex/AbstractRFVVertex.h"
0014 #include "ThePEG/Helicity/Vertex/AbstractRFSVertex.h"
0015 #include "ThePEG/Helicity/Vertex/AbstractFFVSVertex.h"
0016 
0017 namespace Herwig {
0018   using namespace ThePEG;
0019 
0020 /**
0021  * Here is the documentation of the StoFFVDecayer class.
0022  *
0023  * @see \ref StoFFVDecayerInterfaces "The interfaces"
0024  * defined for StoFFVDecayer.
0025  */
0026 class StoFFVDecayer: 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 
0054    * calculating the width
0055    */
0056   virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
0057 
0058 public:
0059 
0060   /** @name Functions used by the persistent I/O system. */
0061   //@{
0062   /**
0063    * Function used to write out object persistently.
0064    * @param os the persistent output stream written to.
0065    */
0066   void persistentOutput(PersistentOStream & os) const;
0067 
0068   /**
0069    * Function used to read in object persistently.
0070    * @param is the persistent input stream read from.
0071    * @param version the version number of the object when written.
0072    */
0073   void persistentInput(PersistentIStream & is, int version);
0074   //@}
0075 
0076   /**
0077    * The standard Init function used to initialize the interfaces.
0078    * Called exactly once for each class by the class description system
0079    * before the main function starts or
0080    * when this class is dynamically loaded.
0081    */
0082   static void Init();
0083 
0084 protected:
0085 
0086   /** @name Clone Methods. */
0087   //@{
0088   /**
0089    * Make a simple clone of this object.
0090    * @return a pointer to the new object.
0091    */
0092   virtual IBPtr clone() const;
0093 
0094   /** Make a clone of this object, possibly modifying the cloned object
0095    * to make it sane.
0096    * @return a pointer to the new object.
0097    */
0098   virtual IBPtr fullclone() const;
0099   //@}
0100 
0101 protected:
0102 
0103   /**
0104    *   Set up the diagrams etc
0105    */
0106   virtual void setupDiagrams(bool checkKinematics);
0107 
0108 private:
0109 
0110   /**
0111    * The assignment operator is private and must never be called.
0112    * In fact, it should not even be implemented.
0113    */
0114   StoFFVDecayer & operator=(const StoFFVDecayer &) = delete;
0115 
0116 private:
0117   
0118   /**
0119    * Store the vertices for fermion intrermediate
0120    */
0121   vector<pair<AbstractFFSVertexPtr, AbstractFFVVertexPtr> > fer_;
0122   
0123   /**
0124    * Store the vertices for fermion intrermediate
0125    */
0126   vector<pair<AbstractRFSVertexPtr, AbstractRFVVertexPtr> > RSfer_;
0127 
0128   /**
0129    * Store the vertices for scalar intrermediate
0130    */
0131   vector<pair<AbstractVSSVertexPtr, AbstractFFSVertexPtr> > sca_;
0132 
0133   /**
0134    * Store the vertices for vector intrermediate
0135    */
0136   vector<pair<AbstractVVSVertexPtr, AbstractFFVVertexPtr> > vec_;
0137 
0138   /**
0139    * Store the vertices for 4-point diagrams
0140    */
0141   vector<AbstractFFVSVertexPtr> four_;
0142 
0143   /**
0144    *  Spin density matrix
0145    */
0146   mutable RhoDMatrix rho_;
0147 
0148   /**
0149    *  Scalar wavefunction
0150    */
0151   mutable ScalarWaveFunction swave_;
0152 
0153   /**
0154    *  Vector wavefunction
0155    */
0156   mutable vector<VectorWaveFunction> outVector_;
0157 
0158   /**
0159    *  Spinor wavefunctions
0160    */
0161   mutable pair<vector<SpinorWaveFunction>,vector<SpinorBarWaveFunction> > outspin_[3];
0162 };
0163 
0164 }
0165 
0166 #endif /* THEPEG_StoFFVDecayer_H */