Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_VectorMeson2SpinHalfBaryonsDecayer_H
0003 #define Herwig_VectorMeson2SpinHalfBaryonsDecayer_H
0004 //
0005 // This is the declaration of the VectorMeson2SpinHalfBaryonsDecayer class.
0006 //
0007 
0008 #include "Herwig/Decay/DecayIntegrator.h"
0009 #include "Herwig/Decay/PhaseSpaceMode.h"
0010 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
0011 #include "ThePEG/Helicity/LorentzSpinorBar.h"
0012 #include "ThePEG/Helicity/LorentzRSSpinorBar.h"
0013 
0014 namespace Herwig {
0015 
0016 using namespace ThePEG;
0017 
0018 /** \ingroup Decay
0019  *
0020  *  The <code>VectorMeson2SpinHalfBaryonsDecayer</code> class is designed for the decay
0021  *  of a vector meson to a baryon-antibaryon pair.
0022  *
0023  *  In this case the matrix element is taken to have the form
0024  *  \f[\mathcal{M} = e_g \epsilon_\mu \bar{u}(p_f) \left[\gamma^\mu \right]u(p_{\bar{f}}).\f]
0025  *
0026  *  The incoming vector mesons together with their decay products and the coupling 
0027  *  \f$e_g\f$, \f$G_E\f$ and the phase \f$\phi_E\f$ can be specified using the interfaces for the class.
0028  *  The maximum weights
0029  *  for the decays can be calculated using the Initialize interface of the
0030  *  DecayIntegrator class or specified using the interface.
0031  *
0032  *  The incoming and outgoing particles, couplings and maximum weights for
0033  *  many of the common \f$V\to f\bar{f}\f$ decays are specified in the default
0034  *  constructor.
0035  *
0036  * @see DecayIntegrator
0037  * @see \ref VectorMeson2SpinHalfBaryonsDecayerInterfaces "The interfaces"
0038  * defined for VectorMeson2SpinHalfBaryonsDecayer.
0039  *
0040  */
0041 class VectorMeson2SpinHalfBaryonsDecayer: public DecayIntegrator {
0042 
0043 public:
0044 
0045   /**
0046    * The default constructor.
0047    */
0048   VectorMeson2SpinHalfBaryonsDecayer() {}
0049 
0050   /**
0051    * Which of the possible decays is required
0052    * @param cc Is this mode the charge conjugate
0053    * @param parent The decaying particle
0054    * @param children The decay products
0055    */
0056   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0057              const tPDVector & children) const;
0058 
0059   /**
0060    * Return the matrix element squared for a given mode and phase-space channel.
0061    * @param ichan The channel we are calculating the matrix element for. 
0062    * @param part The decaying Particle.
0063    * @param outgoing The particles produced in the decay
0064    * @param momenta  The momenta of the particles produced in the decay
0065    * @param meopt Option for the calculation of the matrix element
0066    * @return The matrix element squared for the phase-space configuration.
0067    */
0068   double me2(const int ichan,const Particle & part,
0069          const tPDVector & outgoing,
0070          const vector<Lorentz5Momentum> & momenta,
0071          MEOption meopt) const;
0072 
0073   /**
0074    *   Construct the SpinInfos for the particles produced in the decay
0075    */
0076   virtual void constructSpinInfo(const Particle & part,
0077                  ParticleVector outgoing) const;
0078 
0079   /**
0080    * Output the setup information for the particle database
0081    * @param os The stream to output the information to
0082    * @param header Whether or not to output the information for MySQL
0083    */
0084   virtual void dataBaseOutput(ofstream & os,bool header) const;
0085   
0086 public:
0087 
0088   /** @name Functions used by the persistent I/O system. */
0089   //@{
0090   /**
0091    * Function used to write out object persistently.
0092    * @param os the persistent output stream written to.
0093    */
0094   void persistentOutput(PersistentOStream & os) const;
0095 
0096   /**
0097    * Function used to read in object persistently.
0098    * @param is the persistent input stream read from.
0099    * @param version the version number of the object when written.
0100    */
0101   void persistentInput(PersistentIStream & is, int version);
0102   //@}
0103 
0104   /**
0105    * The standard Init function used to initialize the interfaces.
0106    * Called exactly once for each class by the class description system
0107    * before the main function starts or
0108    * when this class is dynamically loaded.
0109    */
0110   static void Init();
0111 
0112 protected:
0113 
0114   /** @name Clone Methods. */
0115   //@{
0116   /**
0117    * Make a simple clone of this object.
0118    * @return a pointer to the new object.
0119    */
0120   virtual IBPtr clone() const;
0121 
0122   /** Make a clone of this object, possibly modifying the cloned object
0123    * to make it sane.
0124    * @return a pointer to the new object.
0125    */
0126   virtual IBPtr fullclone() const;
0127   //@}
0128 
0129 protected:
0130 
0131   /** @name Standard Interfaced functions. */
0132   //@{
0133   /**
0134    * Initialize this object after the setup phase before saving and
0135    * EventGenerator to disk.
0136    * @throws InitException if object could not be initialized properly.
0137    */
0138   virtual void doinit();
0139 
0140   /**
0141    * Initialize this object to the begining of the run phase.
0142    */
0143   virtual void doinitrun();
0144   //@}
0145   
0146 private:
0147 
0148   /**
0149    * The assignment operator is private and must never be called.
0150    * In fact, it should not even be implemented.
0151    */
0152   VectorMeson2SpinHalfBaryonsDecayer & operator=(const VectorMeson2SpinHalfBaryonsDecayer &) = delete;
0153 
0154 public:
0155 
0156   /**
0157    *   Set the parameters for a decay mode
0158    */
0159   string setUpDecayMode(string arg);
0160 
0161 private:
0162 
0163   /**
0164    * \f$G_M\f$ coupling
0165    */
0166   vector<double> gm_;
0167   
0168   /**
0169    * \f$G_E\f$ coupling
0170    */
0171   vector<double> ge_;
0172   
0173   /**
0174    * Relative phase of  \f$G_E\f$/\f$G_M\f$
0175    */
0176   vector<double> phi_;
0177 
0178   /**
0179    * the PDG codes for the incoming particles
0180    */
0181   vector<int> incoming_;
0182 
0183   /**
0184    * the PDG codes for the outgoing fermion
0185    */
0186   vector<pair<long,long> > outgoing_;
0187 
0188   /**
0189    * maximum weight for a decay
0190    */
0191   vector<double> maxweight_;
0192 
0193   /**
0194    *  Spin density matrix
0195    */
0196   mutable RhoDMatrix rho_;
0197 
0198   /**
0199    *  Polarization vectors for the decaying particle
0200    */
0201   mutable vector<Helicity::LorentzPolarizationVector> vectors_;
0202 
0203   /**
0204    *  Spinors for the decay products
0205    */
0206   mutable vector<Helicity::LorentzSpinor   <SqrtEnergy> > wave_;
0207 
0208   /**
0209    *  barred spinors for the decay products
0210    */
0211   mutable vector<Helicity::LorentzSpinorBar<SqrtEnergy> > wavebar_;
0212 
0213   /**
0214    *  Spinors for the decay products
0215    */
0216   mutable vector<Helicity::LorentzRSSpinor   <SqrtEnergy> > wave2_;
0217 
0218   /**
0219    *  barred spinors for the decay products
0220    */
0221   mutable vector<Helicity::LorentzRSSpinorBar<SqrtEnergy> > wave2bar_;
0222 };
0223 
0224 }
0225 
0226 #endif /* Herwig_VectorMeson2SpinHalfBaryonsDecayer_H */