Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // EtaPiPiGammaDecayer.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_EtaPiPiGammaDecayer_H
0010 #define HERWIG_EtaPiPiGammaDecayer_H
0011 // This is the declaration of the EtaPiPiGammaDecayer class.
0012 
0013 #include "Herwig/Utilities/Kinematics.h"
0014 #include "Herwig/Decay/DecayIntegrator.h"
0015 #include "Herwig/Decay/PhaseSpaceMode.h"
0016 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
0017 #include "Herwig/Decay/FormFactors/OmnesFunction.fh"
0018 
0019 namespace Herwig {
0020 using namespace ThePEG;
0021 
0022 /** \ingroup Decay
0023  *
0024  * The <code>EtaPiPiGammaDecayer</code> class implements the decay of
0025  * the \f$\eta\f$ or \f$\eta'\f$ to \f$\pi^+\pi^-\gamma\f$ using either 
0026  * a VMD type model or a model using either the theoretical or experimental 
0027  * form of the Omnes function taken from hep-ph/0112150.
0028  *
0029  * The matrix element is given by
0030  * \f[\mathcal{M} = B(s_{+-},s_{+\gamma},s_{-\gamma})\epsilon^{\mu\nu\alpha\beta}
0031  *      \epsilon^*_{\mu}p_{+\nu}p_{-\alpha}p_{\gamma\beta}\f]
0032  * where \f$p_{+,-}\f$ are the momenta of the positively and negatively charged pions,
0033  * \f$p_{\gamma}\f$ is the momentum of the photon and \f$s_{ij} = (p_i+p_j)^2\f$.
0034  *
0035  *  The different models take
0036  *
0037  *  \f[B(s_{+-},s_{+\gamma},s_{-\gamma}) = 
0038  *  B_0\left(1+\frac32\frac{s_{+-}}{M^2_\rho-s_{+-}-iM_\rho\Gamma_\rho(s_{+-})}\right)\f]
0039  *  where \f$M_\rho\f$ and \f$\Gamma_\rho\f$ are the mass and running width 
0040  *  of the \f$\rho\f$
0041  *  respectively for the VMD model.
0042  *
0043  *  For the Omnes function case we take
0044  *
0045  *  \f[B(s_{+-},s_{+\gamma},s_{-\gamma}) = 
0046  *  B_0\left(1-c+c\frac{1+as_{+-}}{D_1(s_{+-})}\right)\f]
0047  *  either the experimental or analytic form of the Omnes function \f$D_1(s_{+-})\f$
0048  *  taken from hep-ph/0112150 can be used.
0049  *
0050  *  The coefficient \f$B_0\f$ is given in hep-ph/0112150. We use the values from this
0051  *  paper and use their default choice \f$c=1\f$, \f$a=\frac1{2M_\rho}\f$.
0052  *
0053  * @see DecayIntegrator
0054  * 
0055  */
0056 class EtaPiPiGammaDecayer: public DecayIntegrator {
0057 
0058 public:
0059 
0060   /**
0061    * Default constructor.
0062    */
0063   EtaPiPiGammaDecayer();
0064   
0065   /**
0066    * Which of the possible decays is required
0067    * @param cc Is this mode the charge conjugate
0068    * @param parent The decaying particle
0069    * @param children The decay products
0070    */
0071   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0072              const tPDVector & children) const;
0073   
0074   /**
0075    * Return the matrix element squared for a given mode and phase-space channel.
0076    * @param ichan The channel we are calculating the matrix element for. 
0077    * @param part The decaying Particle.
0078    * @param outgoing The particles produced in the decay
0079    * @param momenta  The momenta of the particles produced in the decay
0080    * @param meopt Option for the calculation of the matrix element
0081    * @return The matrix element squared for the phase-space configuration.
0082    */
0083   double me2(const int ichan,const Particle & part,
0084          const tPDVector & outgoing,
0085          const vector<Lorentz5Momentum> & momenta,
0086          MEOption meopt) const;
0087 
0088   /**
0089    *   Construct the SpinInfos for the particles produced in the decay
0090    */
0091   virtual void constructSpinInfo(const Particle & part,
0092                  ParticleVector outgoing) const;
0093 
0094   /**
0095    * Method to return an object to calculate the 3 body partial width.
0096    * @param dm The DecayMode
0097    * @return A pointer to a WidthCalculatorBase object capable of calculating the width
0098    */
0099   virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
0100 
0101   /**
0102    * The matrix element to be integrated for the three-body decays as a function
0103    * of the invariant masses of pairs of the outgoing particles.
0104    * @param imode The mode for which the matrix element is needed.
0105    * @param q2 The scale, \e i.e. the mass squared of the decaying particle.
0106    * @param s3 The invariant mass squared of particles 1 and 2, \f$s_3=m^2_{12}\f$.
0107    * @param s2 The invariant mass squared of particles 1 and 3, \f$s_2=m^2_{13}\f$.
0108    * @param s1 The invariant mass squared of particles 2 and 3, \f$s_1=m^2_{23}\f$.
0109    * @param m1 The mass of the first  outgoing particle.
0110    * @param m2 The mass of the second outgoing particle.
0111    * @param m3 The mass of the third  outgoing particle.
0112    * @return The matrix element
0113    */
0114   virtual double threeBodyMatrixElement(const int imode,const Energy2 q2,
0115                     const  Energy2 s3,const Energy2 s2,
0116                     const Energy2 s1,const Energy m1,
0117                     const Energy m2,const Energy m3) const;
0118 
0119   /**
0120    * Output the setup information for the particle database
0121    * @param os The stream to output the information to
0122    * @param header Whether or not to output the information for MySQL
0123    */
0124   virtual void dataBaseOutput(ofstream & os,bool header) const;
0125 
0126 public:
0127 
0128   /** @name Functions used by the persistent I/O system. */
0129   //@{
0130   /**
0131    * Function used to write out object persistently.
0132    * @param os the persistent output stream written to.
0133    */
0134   void persistentOutput(PersistentOStream & os) const;
0135 
0136   /**
0137    * Function used to read in object persistently.
0138    * @param is the persistent input stream read from.
0139    * @param version the version number of the object when written.
0140    */
0141   void persistentInput(PersistentIStream & is, int version);
0142   //@}
0143 
0144   /**
0145    * Standard Init function used to initialize the interfaces.
0146    */
0147   static void Init();
0148 
0149 protected:
0150 
0151   /** @name Clone Methods. */
0152   //@{
0153   /**
0154    * Make a simple clone of this object.
0155    * @return a pointer to the new object.
0156    */
0157   virtual IBPtr clone() const {return new_ptr(*this);}
0158 
0159   /** Make a clone of this object, possibly modifying the cloned object
0160    * to make it sane.
0161    * @return a pointer to the new object.
0162    */
0163   virtual IBPtr fullclone() const {return new_ptr(*this);}
0164   //@}
0165   
0166 protected:
0167   
0168   /** @name Standard Interfaced functions. */
0169   //@{
0170 
0171   /**
0172    * Initialize this object after the setup phase before saving and
0173    * EventGenerator to disk.
0174    * @throws InitException if object could not be initialized properly.
0175    */
0176   virtual void doinit();
0177 
0178   /**
0179    * Initialize this object to the begining of the run phase.
0180    */
0181   virtual void doinitrun();
0182   //@}
0183 
0184 private:
0185 
0186   /**
0187    * Private and non-existent assignment operator.
0188    */
0189   EtaPiPiGammaDecayer & operator=(const EtaPiPiGammaDecayer &) = delete;
0190 
0191 private:
0192 
0193   /**
0194    * the pion decay constant, \f$F_\pi\f$.
0195    */
0196   Energy _fpi;
0197 
0198   /**
0199    * the PDG code for the incoming particle
0200    */
0201   vector<int> _incoming;
0202 
0203   /**
0204    * Coupling for the decay, \f$B_0\f$.
0205    */
0206   vector<double> _coupling;
0207 
0208   /**
0209    * The maximum weight
0210    */
0211   vector<double> _maxweight;
0212 
0213   /**
0214    * The option for the energy dependence of the prefactor
0215    */
0216   vector<int> _option;
0217 
0218   /**
0219    * The constants for the omnes function form.
0220    */
0221   InvEnergy2 _aconst;
0222 
0223   /**
0224    * The constants for the Omnes function form.
0225    */
0226   double _cconst;
0227 
0228   /**
0229    * The \f$\rho\f$ mass
0230    */
0231   Energy _mrho;
0232 
0233   /**
0234    * The \f$\rho\f$ width
0235    */
0236   Energy _rhowidth;
0237 
0238   /**
0239    * Constant for the running \f$rho\f$ width.
0240    */
0241   double _rhoconst;
0242 
0243   /**
0244    * The \f$m_\pi\f$.
0245    */
0246   Energy _mpi;
0247 
0248   /**
0249    * Use local values of the parameters.
0250    */
0251   bool _localparameters;
0252 
0253   /**
0254    *  Object calculating the Omnes function
0255    */
0256   OmnesFunctionPtr omnesFunction_;
0257 
0258   /**
0259    *  Spin densit matrix
0260    */
0261   mutable RhoDMatrix _rho;
0262 
0263   /**
0264    *  Polarization vectors for the photon
0265    */
0266   mutable vector<Helicity::LorentzPolarizationVector> _vectors;
0267 };
0268 }
0269 
0270 #endif /* HERWIG_EtaPiPiGammaDecayer_H */