Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // EtaPiGammaGammaDecayer.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_EtaPiGammaGammaDecayer_H
0010 #define HERWIG_EtaPiGammaGammaDecayer_H
0011 // This is the declaration of the EtaPiGammaGammaDecayer class.
0012 
0013 #include "Herwig/Decay/DecayIntegrator.h"
0014 #include "Herwig/Decay/PhaseSpaceMode.h"
0015 #include "ThePEG/StandardModel/StandardModelBase.h"
0016 #include "Herwig/Utilities/Kinematics.h"
0017 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
0018 
0019 namespace Herwig {
0020 using namespace ThePEG;
0021 
0022 /** \ingroup Decay
0023  *
0024  * The <code>EtaPiGammaGammaDecayer</code> class implements a VMD model
0025  * matrix element for \f$\eta,\eta'\to \pi^0 \gamma \gamma\f$ taken from
0026  * hep-ph/0112150.
0027  *
0028  *  The matrix element is given by
0029  *  \f[ \mathcal{M} = 
0030  *    D(s,t,u)\left[ \epsilon_1\cdot\epsilon_2 q_1\cdot q_2
0031  *                  -\epsilon_1\cdot q_2\epsilon_2\cdot q_1\right]
0032  *   -E(s,t,u)\left[-\epsilon_1\cdot\epsilon_2p\cdot q_1p\cdot q_2
0033  *                  -\epsilon_1\cdot p\epsilon_2\cdot p q_1\cdot q_2
0034  *                  +\epsilon_1\cdot q_2 \epsilon_2\cdot  p  p\cdot q_1
0035  *                  +\epsilon_1\cdot  p  \epsilon_2\cdot q_1 p\cdot q_2
0036  *\right],
0037  *  \f]
0038  *  where \f$q_{1,2}\f$ are the momenta of the photons, \f$\epsilon_{1,2}\f$ are
0039  *  the polarization vectors of the photons, \f$p\f$ is the momentum of the decaying
0040  *  meson and
0041  * \f[D(s,t,u) = \frac{2\sqrt{3}}{9}g^2_{\omega\rho\pi}
0042  *              \left(\frac{2eF^2_{\pi}g}{m^2_V}\right)^2\times\left(\frac{F_\pi}{F_8}\cos\theta\mp\sqrt{2}\frac{F_\pi}{F_0}\sin\theta\right)\times\left[\frac{p\cdot q_2-m^2_\eta}{m^2_V-t}+\frac{p\cdot q_1-m^2_\eta}{m^2_V-u}\right]\f]
0043  * \f[E(s,t,u) =-\frac{2\sqrt{3}}{9}g^2_{\omega\rho\pi}\left(\frac{2eF^2_{\pi}g}{m^2_V}\right)^2\times\left(\frac{F_\pi}{F_8}\cos\theta\mp\sqrt{2}\frac{F_\pi}{F_0}\sin\theta\right)\times\left[\frac1{m^2_V-t}+\frac1{m^2_V-u}\right].\f]
0044  *  the \f$-\f$ sign corresponds to the \f$\eta\f$ decay and the \f$+\f$ to the \f$\eta'\f$ decay.
0045  *  Here
0046  * - \f$g_{\omega\rho\pi}\f$ is the coupling of the
0047  *               \f$\omega\f$ to the \f$\rho\f$ and a pion.
0048  * - \f$e\f$ is the electric charge.
0049  * - \f$F_{\pi}\f$ is the pion decay constant.
0050  * - \f$g\f$ is the conversion factor for a \f$\rho\f$ into a photon.
0051  * - \f$m_V\f$ is the mass of the vector meson, in this case we use the \f$\rho\f$.
0052  * - \f$F_0\f$ is the singlet decay constant.
0053  * - \f$F_8\f$ is the octet decay constant.
0054  * - \f$\theta\f$ is the octet-singlet mixing angle
0055  * - \f$m_\eta\f$ is the mass of the decay meson.
0056  *
0057  *  In practice we use a slightly modified form by including a running width term to 
0058  * include the \f$\eta'\f$ decay as well as the \f$\eta\f$ decay.
0059  *
0060  * @see DecayIntegrator
0061  * 
0062  */
0063 class EtaPiGammaGammaDecayer: public DecayIntegrator {
0064 
0065 public:
0066 
0067   /**
0068    * Default constructor.
0069    */
0070   EtaPiGammaGammaDecayer();
0071   
0072   /**
0073    * Which of the possible decays is required
0074    * @param cc Is this mode the charge conjugate
0075    * @param parent The decaying particle
0076    * @param children The decay products
0077    */
0078   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0079              const tPDVector & children) const;
0080   
0081   /**
0082    * Return the matrix element squared for a given mode and phase-space channel.
0083    * @param ichan The channel we are calculating the matrix element for. 
0084    * @param part The decaying Particle.
0085    * @param outgoing The particles produced in the decay
0086    * @param momenta  The momenta of the particles produced in the decay
0087    * @param meopt Option for the calculation of the matrix element
0088    * @return The matrix element squared for the phase-space configuration.
0089    */
0090   double me2(const int ichan,const Particle & part,
0091          const tPDVector & outgoing,
0092          const vector<Lorentz5Momentum> & momenta,
0093          MEOption meopt) const;
0094 
0095   /**
0096    *   Construct the SpinInfos for the particles produced in the decay
0097    */
0098   virtual void constructSpinInfo(const Particle & part,
0099                  ParticleVector outgoing) const;
0100 
0101   /**
0102    * Method to return an object to calculate the 3 body partial width.
0103    * @param dm The DecayMode
0104    * @return A pointer to a WidthCalculatorBase object capable of calculating the width
0105    */
0106   virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
0107 
0108   /**
0109    * The matrix element to be integrated for the three-body decays as a function
0110    * of the invariant masses of pairs of the outgoing particles.
0111    * @param imode The mode for which the matrix element is needed.
0112    * @param q2 The scale, \e i.e. the mass squared of the decaying particle.
0113    * @param s3 The invariant mass squared of particles 1 and 2, \f$s_3=m^2_{12}\f$.
0114    * @param s2 The invariant mass squared of particles 1 and 3, \f$s_2=m^2_{13}\f$.
0115    * @param s1 The invariant mass squared of particles 2 and 3, \f$s_1=m^2_{23}\f$.
0116    * @param m1 The mass of the first  outgoing particle.
0117    * @param m2 The mass of the second outgoing particle.
0118    * @param m3 The mass of the third  outgoing particle.
0119    * @return The matrix element
0120    */
0121   virtual double threeBodyMatrixElement(const int imode, const Energy2 q2,
0122                     const  Energy2 s3, const Energy2 s2,
0123                     const Energy2 s1, const Energy m1,
0124                     const Energy m2,const Energy m3) const;
0125 
0126   /**
0127    * Output the setup information for the particle database
0128    * @param os The stream to output the information to
0129    * @param header Whether or not to output the information for MySQL
0130    */
0131   virtual void dataBaseOutput(ofstream & os,bool header) const;
0132 
0133 public:
0134 
0135   /** @name Functions used by the persistent I/O system. */
0136   //@{
0137   /**
0138    * Function used to write out object persistently.
0139    * @param os the persistent output stream written to.
0140    */
0141   void persistentOutput(PersistentOStream & os) const;
0142 
0143   /**
0144    * Function used to read in object persistently.
0145    * @param is the persistent input stream read from.
0146    * @param version the version number of the object when written.
0147    */
0148   void persistentInput(PersistentIStream & is, int version);
0149   //@}
0150 
0151   /**
0152    * Standard Init function used to initialize the interfaces.
0153    */
0154   static void Init();
0155 
0156 protected:
0157 
0158   /** @name Clone Methods. */
0159   //@{
0160   /**
0161    * Make a simple clone of this object.
0162    * @return a pointer to the new object.
0163    */
0164   virtual IBPtr clone() const {return new_ptr(*this);}
0165 
0166   /** Make a clone of this object, possibly modifying the cloned object
0167    * to make it sane.
0168    * @return a pointer to the new object.
0169    */
0170   virtual IBPtr fullclone() const {return new_ptr(*this);}
0171   //@}
0172   
0173 protected:
0174   
0175   /** @name Standard Interfaced functions. */
0176   //@{
0177   /**
0178    * Initialize this object after the setup phase before saving and
0179    * EventGenerator to disk.
0180    * @throws InitException if object could not be initialized properly.
0181    */
0182   virtual void doinit();
0183 
0184   /**
0185    * Initialize this object to the begining of the run phase.
0186    */
0187   virtual void doinitrun();
0188   //@}
0189 
0190 private:
0191 
0192   /**
0193    * Private and non-existent assignment operator.
0194    */
0195   EtaPiGammaGammaDecayer & operator=(const EtaPiGammaGammaDecayer &) = delete;
0196 
0197 private:
0198 
0199   /**
0200    * The coupling \f$g_{\omega\rho\pi}\f$ of the \f$\rho\f$ to \f$\omega\f$ and
0201    * a \f$\pi\f$.
0202    */
0203   InvEnergy _grhoomega;
0204 
0205   /**
0206    * The pion decay constant, \f$F_{\pi}\f$
0207    */
0208   Energy _fpi;
0209 
0210   /**
0211    * The mass of the \f$\rho\f$.
0212    */
0213   Energy _rhomass;
0214 
0215   /**
0216    * The width of the \f$\rho\f$. 
0217    */
0218   Energy _rhowidth;
0219 
0220   /**
0221    * The coupling for the conversion of a rho to a photon, \f$g\f$
0222    */
0223   double _grho;
0224 
0225   /**
0226    * The mass of the pion
0227    */
0228   Energy _mpi;
0229 
0230   /**
0231    * Constant for the running \f$\rho\f$ width calculation.
0232    */
0233   double _rhoconst;
0234 
0235   /**
0236    * Use local values of the \f$\rho\f$ mass and width.
0237    */
0238   bool _localparameters;
0239 
0240   /**
0241    * Ratios of the decay constants \f$F_8/F_\pi\f$.
0242    */
0243   double _ratiofpif8;
0244 
0245   /**
0246    * Ratios of the decay constants \f$F_0/F_\pi\f$.
0247    */
0248   double _ratiofpif0;
0249 
0250   /**
0251    * the mixing angle, \f$\theta\f$.
0252    */
0253   double _theta;
0254 
0255   /**
0256    * the maximum weights for the \f$\eta\f$ decay.
0257    */
0258   double _etamax;
0259 
0260   /**
0261    * the maximum weights for the \f$\eta'\f$ decay.
0262    */
0263   double _etapmax;
0264 
0265   /**
0266    * The prefactor for the \f$D(s,t,u)\f$ function.
0267    */
0268   vector<InvEnergy2> _dconst;
0269 
0270   /**
0271    * The prefactor for the \f$E(s,t,u)\f$ function.
0272    */
0273   vector<InvEnergy2> _econst;
0274 
0275   /**
0276    *  Spin density matrix
0277    */
0278   mutable RhoDMatrix _rho;
0279 
0280   /**
0281    *  Polarization vectors for the photons
0282    */
0283   mutable vector<Helicity::LorentzPolarizationVector> _vectors[2];
0284 };
0285 
0286 }
0287 
0288 
0289 #endif /* HERWIG_EtaPiGammaGammaDecayer_H */