Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // SRFDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008 //
0009 #ifndef HERWIG_SRFDecayer_H
0010 #define HERWIG_SRFDecayer_H
0011 //
0012 // This is the declaration of the SRFDecayer class.
0013 //
0014 
0015 #include "GeneralTwoBodyDecayer.h"
0016 #include "ThePEG/Repository/EventGenerator.h"
0017 #include "ThePEG/Helicity/Vertex/Scalar/RFSVertex.h"
0018 
0019 namespace Herwig {
0020 using namespace ThePEG;
0021 using Helicity::RFSVertexPtr;
0022 
0023 /** \ingroup Decay
0024  * The SRFDecayer class implements the decay of a scalar to spin-3/2
0025  * and spin-1/2 fermion in a general model. It holds an RFSVertex pointer that 
0026  * must be typecast from the VertexBase pointer held in 
0027  * GeneralTwoBodyDecayer. It implents the virtual functions me2() and
0028  * partialWidth(). 
0029  *
0030  * @see GeneralTwoBodyDecayer
0031  */
0032 class SRFDecayer: public GeneralTwoBodyDecayer {
0033 
0034 public:
0035 
0036   /**
0037    * The default constructor.
0038    */
0039   SRFDecayer() {}
0040 
0041   /** @name Virtual functions required by the Decayer class. */
0042   //@{
0043   /**
0044    * Return the matrix element squared for a given mode and phase-space channel.
0045    * @param ichan The channel we are calculating the matrix element for. 
0046    * @param part The decaying Particle.
0047    * @param outgoing The particles produced in the decay
0048    * @param momenta  The momenta of the particles produced in the decay
0049    * @param meopt Option for the calculation of the matrix element
0050    * @return The matrix element squared for the phase-space configuration.
0051    */
0052   double me2(const int ichan,const Particle & part,
0053          const tPDVector & outgoing,
0054          const vector<Lorentz5Momentum> & momenta,
0055          MEOption meopt) const;
0056 
0057   /**
0058    *   Construct the SpinInfos for the particles produced in the decay
0059    */
0060   virtual void constructSpinInfo(const Particle & part,
0061                  ParticleVector outgoing) const;
0062   
0063   /**
0064    * Function to return partial Width
0065    * @param inpart The decaying particle.
0066    * @param outa One of the decay products.
0067    * @param outb The other decay product.
0068    */
0069   virtual Energy partialWidth(PMPair inpart, PMPair outa, 
0070                   PMPair outb) const;
0071 
0072   /**
0073    *  Set the information on the decay
0074    */
0075   virtual void setDecayInfo(PDPtr incoming, PDPair outgoing,
0076                 vector<VertexBasePtr>,
0077                 map<ShowerInteraction,VertexBasePtr> &,
0078                 const vector<map<ShowerInteraction,VertexBasePtr> > &,
0079                 map<ShowerInteraction,VertexBasePtr>);
0080   //@}
0081 
0082 public:
0083 
0084   /** @name Functions used by the persistent I/O system. */
0085   //@{
0086   /**
0087    * Function used to write out object persistently.
0088    * @param os the persistent output stream written to.
0089    */
0090   void persistentOutput(PersistentOStream & os) const;
0091 
0092   /**
0093    * Function used to read in object persistently.
0094    * @param is the persistent input stream read from.
0095    * @param version the version number of the object when written.
0096    */
0097   void persistentInput(PersistentIStream & is, int version);
0098   //@}
0099 
0100   /**
0101    * The standard Init function used to initialize the interfaces.
0102    * Called exactly once for each class by the class description system
0103    * before the main function starts or
0104    * when this class is dynamically loaded.
0105    */
0106   static void Init();
0107 
0108 protected:
0109 
0110   /** @name Clone Methods. */
0111   //@{
0112   /**
0113    * Make a simple clone of this object.
0114    * @return a pointer to the new object.
0115    */
0116   virtual IBPtr clone() const;
0117 
0118   /** Make a clone of this object, possibly modifying the cloned object
0119    * to make it sane.
0120    * @return a pointer to the new object.
0121    */
0122   virtual IBPtr fullclone() const;
0123   //@}
0124 
0125 private:
0126 
0127   /**
0128    * The assignment operator is private and must never be called.
0129    * In fact, it should not even be implemented.
0130    */
0131   SRFDecayer & operator=(const SRFDecayer &) = delete;
0132 
0133 private:
0134 
0135   /**
0136    *  Abstract pointer to AbstractFFSVertex
0137    */
0138   vector<AbstractRFSVertexPtr> vertex_;
0139 
0140   /**
0141    * Pointer to the perturbative vertex
0142    */
0143   vector<RFSVertexPtr> perturbativeVertex_;
0144 
0145   /**
0146    *  Spin density matrix
0147    */
0148   mutable RhoDMatrix rho_;
0149 
0150   /**
0151    *  Scalar wavefunction
0152    */
0153   mutable ScalarWaveFunction swave_;
0154 
0155   /**
0156    *  Spinor wavefunction
0157    */
0158   mutable vector<SpinorWaveFunction> wave_;
0159 
0160   /**
0161    *  Barred spinor wavefunction
0162    */
0163   mutable vector<SpinorBarWaveFunction> wavebar_;
0164 
0165   /**
0166    *  RS Spinor wavefunction
0167    */
0168   mutable vector<RSSpinorWaveFunction> RSwave_;
0169 
0170   /**
0171    *  Barred RS spinor wavefunction
0172    */
0173   mutable vector<RSSpinorBarWaveFunction> RSwavebar_;
0174 
0175   
0176 };
0177 
0178 }
0179 
0180 #endif /* HERWIG_SRFDecayer_H */