Back to home page

EIC code displayed by LXR

 
 

    


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

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