Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_StoFFFFDecayer_H
0003 #define HERWIG_StoFFFFDecayer_H
0004 //
0005 // This is the declaration of the StoFFFFDecayer class.
0006 //
0007 
0008 #include "GeneralFourBodyDecayer.h"
0009 #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
0010 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0011 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0012 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
0013 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0014 
0015 namespace Herwig {
0016 
0017 using namespace ThePEG;
0018 
0019 /**
0020  * Here is the documentation of the StoFFFFDecayer class.
0021  *
0022  * @see \ref StoFFFFDecayerInterfaces "The interfaces"
0023  * defined for StoFFFFDecayer.
0024  */
0025 class StoFFFFDecayer: public GeneralFourBodyDecayer {
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 public:
0050 
0051   /** @name Functions used by the persistent I/O system. */
0052   //@{
0053   /**
0054    * Function used to write out object persistently.
0055    * @param os the persistent output stream written to.
0056    */
0057   void persistentOutput(PersistentOStream & os) const;
0058 
0059   /**
0060    * Function used to read in object persistently.
0061    * @param is the persistent input stream read from.
0062    * @param version the version number of the object when written.
0063    */
0064   void persistentInput(PersistentIStream & is, int version);
0065   //@}
0066 
0067   /**
0068    * The standard Init function used to initialize the interfaces.
0069    * Called exactly once for each class by the class description system
0070    * before the main function starts or
0071    * when this class is dynamically loaded.
0072    */
0073   static void Init();
0074 
0075 protected:
0076 
0077   /** @name Clone Methods. */
0078   //@{
0079   /**
0080    * Make a simple clone of this object.
0081    * @return a pointer to the new object.
0082    */
0083   virtual IBPtr clone() const;
0084 
0085   /** Make a clone of this object, possibly modifying the cloned object
0086    * to make it sane.
0087    * @return a pointer to the new object.
0088    */
0089   virtual IBPtr fullclone() const;
0090   //@}
0091 
0092 protected:
0093 
0094   /** @name Standard Interfaced functions. */
0095   //@{
0096   /**
0097    * Initialize this object after the setup phase before saving an
0098    * EventGenerator to disk.
0099    * @throws InitException if object could not be initialized properly.
0100    */
0101   virtual void doinit();
0102   //@}
0103 
0104 private:
0105 
0106   /**
0107    * The assignment operator is private and must never be called.
0108    * In fact, it should not even be implemented.
0109    */
0110   StoFFFFDecayer & operator=(const StoFFFFDecayer &) = delete;
0111 
0112 private:
0113 
0114   /**
0115    *  Signs for NO
0116    */
0117   vector<double> sign_; 
0118   
0119   /**
0120    *  Potential vertices for the first step
0121    */
0122   //@{
0123   /**
0124    *   VVS Vertex
0125    */
0126   vector<AbstractVVSVertexPtr> firstVVS_;
0127 
0128   /**
0129    *   VSS Vertex
0130    */
0131   vector<AbstractVSSVertexPtr> firstVSS_;
0132 
0133   /**
0134    *   SSS Vertex
0135    */
0136   vector<AbstractSSSVertexPtr> firstSSS_;
0137 
0138   /**
0139    *   FFS Vertex
0140    */
0141   vector<AbstractFFSVertexPtr> firstFFS_;
0142   //@}
0143 
0144   /**
0145    *  Potential vertices for the second step
0146    */
0147   //@{
0148   /**
0149    *   FFV Vertex
0150    */
0151   vector<AbstractFFVVertexPtr> secondFFV_;
0152 
0153   /**
0154    *   FFS Vertex
0155    */
0156   vector<AbstractFFSVertexPtr> secondFFS_;  
0157   //@}
0158 
0159   /**
0160    *  Potential vertices for the third step
0161    */
0162   //@{
0163   /**
0164    *   FFV Vertex
0165    */
0166   vector<AbstractFFVVertexPtr> thirdFFV_;
0167 
0168   /**
0169    *   FFS Vertex
0170    */
0171   vector<AbstractFFSVertexPtr> thirdFFS_;  
0172   //@}
0173 
0174   /**
0175    *  Spin density matrix
0176    */
0177   mutable RhoDMatrix rho_;
0178 
0179   /**
0180    *  Scalar wavefunction
0181    */
0182   mutable ScalarWaveFunction swave_;
0183 
0184   /**
0185    *  Spinors for outgoing particles
0186    */
0187   mutable pair<vector<SpinorWaveFunction>,vector<SpinorBarWaveFunction> > outwave_[4];
0188 
0189 };
0190 
0191 }
0192 
0193 #endif /* HERWIG_StoFFFFDecayer_H */