Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef THEPEG_VtoFFVDecayer_H
0003 #define THEPEG_VtoFFVDecayer_H
0004 //
0005 // This is the declaration of the VtoFFVDecayer 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/AbstractVVVVertex.h"
0013 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0014 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
0015 
0016 namespace Herwig {
0017   using namespace ThePEG;
0018 
0019 /**
0020  * Here is the documentation of the VtoFFVDecayer class.
0021  *
0022  * @see \ref VtoFFVDecayerInterfaces "The interfaces"
0023  * defined for VtoFFVDecayer.
0024  */
0025 class VtoFFVDecayer: public GeneralThreeBodyDecayer {
0026 
0027 public:
0028   
0029   /**
0030    * Return the matrix element squared for a given mode and phase-space channel.
0031    * @param ichan The channel we are calculating the matrix element for. 
0032    * @param part The decaying Particle.
0033    * @param outgoing The particles produced in the decay
0034    * @param momenta  The momenta of the particles produced in the decay
0035    * @param meopt Option for the calculation of the matrix element
0036    * @return The matrix element squared for the phase-space configuration.
0037    */
0038   double me2(const int ichan,const Particle & part,
0039          const tPDVector & outgoing,
0040          const vector<Lorentz5Momentum> & momenta,
0041          MEOption meopt) const;
0042 
0043   /**
0044    *   Construct the SpinInfos for the particles produced in the decay
0045    */
0046   virtual void constructSpinInfo(const Particle & part,
0047                  ParticleVector outgoing) const;
0048   
0049   /**
0050    * Method to return an object to calculate the 3 (or higher body) partial width
0051    * @param dm The DecayMode
0052    * @return A pointer to a WidthCalculatorBase object capable of 
0053    * 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   VtoFFVDecayer & operator=(const VtoFFVDecayer &) = delete;
0114 
0115 private:
0116   
0117   /**
0118    * Store the vertices for scalar intrermediate
0119    */
0120   vector<pair<AbstractVVSVertexPtr, AbstractFFSVertexPtr> > sca_;
0121 
0122   /**
0123    * Store the vertices for fermion intrermediate
0124    */
0125   vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > fer_;
0126 
0127   /**
0128    * Store the vertices for vector intrermediate
0129    */
0130   vector<pair<AbstractVVVVertexPtr, AbstractFFVVertexPtr> > vec_;
0131 
0132   /**
0133    * Store the vertices for vector intrermediate
0134    */
0135   vector<pair<AbstractVVTVertexPtr, AbstractFFTVertexPtr> > ten_;
0136 
0137   /**
0138    *  Spinr density matrix
0139    */
0140   mutable RhoDMatrix rho_;
0141 
0142   /**
0143    *  Polarization vectors for the decaying particle
0144    */
0145   mutable vector<VectorWaveFunction> inVector_;
0146 
0147   /**
0148    *  Scalar wavefunction for the decay products
0149    */
0150   mutable ScalarWaveFunction swave_;
0151 
0152   /**
0153    *  Polarization vectors for the decay products
0154    */
0155   mutable vector<VectorWaveFunction> outVector_;
0156 
0157   /**
0158    *  Spinors for the decay products
0159    */
0160   mutable pair<vector<SpinorWaveFunction>,vector<SpinorBarWaveFunction> > outspin_[3];
0161 };
0162 
0163 }
0164 
0165 #endif /* THEPEG_VtoFFVDecayer_H */