Back to home page

EIC code displayed by LXR

 
 

    


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

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