Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // a1ThreePionDecayer.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_a1ThreePionDecayer_H
0010 #define HERWIG_a1ThreePionDecayer_H
0011 //
0012 // This is the declaration of the a1ThreePionDecayer class.
0013 //
0014 #include "Herwig/Decay/DecayIntegrator.h"
0015 #include "Herwig/Decay/PhaseSpaceMode.h"
0016 #include "Herwig/Utilities/Kinematics.h"
0017 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
0018 
0019 namespace Herwig {
0020 
0021 using namespace ThePEG;
0022 
0023 /** \ingroup Decay
0024  *
0025  *  The  <code>a1ThreePionDecayer</code> class is designed to implement the decay
0026  *  of the a_1 to three pions. The model used is one based on the Novosibirsk
0027  *  four pion current used in TAUOLA. 
0028  *
0029  *  - The matrix element for the decay \f$a_1^0\to\pi^0\pi^0\pi^0\f$ is
0030  * 
0031  *    \f[J^\mu =\frac{F_{a_1}(q^2)g}{qM^2_{\rho_0}}\epsilon_\mu\left[
0032  * q^2z \sum_i p^\mu_i \frac1{D_\sigma(s_i)}\right]\f]
0033  *  
0034  *  - The matrix element for the decay \f$a_1^+\to\pi^0\pi^0\pi^+\f$ is
0035  *
0036  *    \f[J^\mu =\frac{F_{a_1}(q^2)g}{qM^2_{\rho_0}}\epsilon_\mu\left[
0037  *  q^2z\frac1{D_\sigma(s_3)} p_3^\mu 
0038  *  +\sum_k g_{\rho_k}\left\{
0039  *      \frac1{D_{\rho_k}(s_1)}\left(p_0\cdot p_3p_2^\mu-p_0\cdot p_2p_3^\mu\right)
0040  *     +\frac1{D_{\rho_k}(s_2)}\left(p_0\cdot p_3p_1^\mu-p_0\cdot p_1p_3^\mu\right) \right\}
0041  * \right]\f]
0042  *
0043  *  - The matrix element for the decay \f$a_10\to\pi^+\pi^-\pi^0\f$ is
0044  *
0045  *   \f[J^\mu =\frac{F_{a_1}(q^2)g}{qM^2_{\rho_0}}\left[ 
0046  * q^2z\frac1{D_\sigma(s_3)}p_3^\mu
0047  *  +\sum_k g_{\rho_k}\left\{
0048  *      \frac1{D_{\rho_k}(s_1)}\left(p_0\cdot p_3p_2^\mu-p_0\cdot p_2p_3^\mu\right)
0049  *     +\frac1{D_{\rho_k}(s_2)}\left(p_0\cdot p_3p_1^\mu-p_0\cdot p_1p_3^\mu\right)\right\}
0050  * \right]\f]
0051  *
0052  *  - The current for the decay \f$a_1^+\to\pi^+\pi^+\pi^-\f$ is
0053  *
0054  *   \f[J^\mu = \frac{F_{a_1}(q^2)g}{qM^2_{\rho_0}}\left[
0055  * q^2z\left(\frac1{D_\sigma(s_1)}p_1^\mu+\frac1{D_\sigma(s_2)}p_2^\mu\right)
0056  *  -\sum_k g_{\rho_k}\left\{
0057  *      \frac1{D_{\rho_k}(s_1)}\left(p_0\cdot p_3p_2^\mu-p_0\cdot p_2p_3^\mu\right)
0058  *     +\frac1{D_{\rho_k}(s_2)}\left(p_0\cdot p_3p_1^\mu-p_0\cdot p_1p_3^\mu\right)\right\}
0059  * \right]\f]
0060  *
0061  *  *  The denominator factor is
0062  *  \f[D_\sigma(q^2) = q^2-M^2+iM\Gamma\frac{g_\sigma(q^2)}{g_\sigma(M^2)}\f] 
0063  *  where \f$g(s) = \left(1-4\frac{m_{\pi}^2}{s}\right)\f$ for the \f$\sigma\f$ meson,
0064  *  and
0065  * \f[D_{\rho_k}(q^2) = q^2-M^2_{\rho_k}-M_{\rho_k}\Gamma_{\rho_k}dm(q^2)
0066  *   +iM_{\rho_k}\Gamma_{\rho_k}\frac{g_{\rho_k}(q^2)}{g_{\rho_k}(M^2)}
0067  * \f]
0068  *  for the \f$\rho\f$.
0069  *  
0070  *  The propagator factors are normalized such that \f$D(0)=-1\f$.
0071  *
0072  *  Here
0073  *  \f[dm(q^2) = \frac1{g_{\rho_k}(M^2_{\rho_k}}\left(h_{\rho_k}(q^2)-h_{\rho_k}(M^2_{\rho_k}
0074  *   -\left.(q^2-M^2_{\rho_k})\frac{dh_{\rho_k}(q^2)}{dq^2}\right|_{q^2=M^2_{\rho_k}}
0075  *   \right)\f]
0076  *  where
0077  * \f[h_{\rho_k}(q^2) = 
0078  *   \left\{ \begin{array}{cc}
0079  *   \frac{\sqrt{1-\frac{4m_\pi^2}{q^2}}\ln\left(\frac{1+\sqrt{1-\frac{4m_\pi^2}{q^2}}}{1-\sqrt{1-\frac{4m_\pi^2}{q^2}}}\right)(q^2-4m_\pi^2)}\pi  & {\rm for\ } q^2>4m_\pi^2 \\
0080  *   -8\frac{m_\pi^2}{\pi} & {\rm for\ } q^2=0\,{\rm GeV^2} \\
0081  *   0                     & {\rm otherwise} 
0082  *   \end{array}\right.\f]  
0083  *
0084  *  The \f$a_1\f$ form factor for the off-shell \f$a_1\f$ is given by
0085  * \f[F_{a_1}(q^2) = \frac{\left(1+m^2_{a_1}/\Lambda^2\right)}
0086  *                        {\left(1+      q^2/\Lambda^2\right)}.\f]
0087  *   
0088  *  The masses and couplings are
0089  * - \f$z\f$ is the relative coupling of the \f$\sigma\f$.
0090  * - \f$m_\pi\f$ is the mass of the pion.
0091  * - \f$g_{\rho_k}\f$ is the coupling of the \f$k\f$th \f$\rho\f$ multiplet.
0092  * - \f$M_{\rho_k}\f$ the mass of the \f$k\f$th \f$\rho\f$ resonance.
0093  * - \f$\Gamma_{\rho_k}\f$ the width of the \f$k\f$th \f$\rho\f$ resonance.
0094  * - \f$M_\sigma\f$ the mass of the \f$\sigma\f$ meson.
0095  * - \f$\Gamma_\sigma\f$ the width of the \f$\sigma\f$ meson.
0096  * - \f$m_{a_1}\f$ the mass of the \f$a_1\f$ meson.
0097  * - \f$\Lambda^2\f$ the mass parameter for the \f$a_1\f$ form factor.
0098  * @see FourPionNovosibirskCurrent
0099  * @see DecayIntegrator
0100  * 
0101  */
0102 class a1ThreePionDecayer: public DecayIntegrator {
0103   
0104 public:
0105   
0106   /**
0107    * Default constructor.
0108    */
0109   a1ThreePionDecayer();
0110 
0111   /**
0112    * Which of the possible decays is required
0113    * @param cc Is this mode the charge conjugate
0114    * @param parent The decaying particle
0115    * @param children The decay products
0116    */
0117   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0118              const tPDVector & children) const;
0119 
0120   /**
0121    * Return the matrix element squared for a given mode and phase-space channel.
0122    * @param ichan The channel we are calculating the matrix element for. 
0123    * @param part The decaying Particle.
0124    * @param outgoing The particles produced in the decay
0125    * @param momenta  The momenta of the particles produced in the decay
0126    * @param meopt Option for the calculation of the matrix element
0127    * @return The matrix element squared for the phase-space configuration.
0128    */
0129   double me2(const int ichan,const Particle & part,
0130          const tPDVector & outgoing,
0131          const vector<Lorentz5Momentum> & momenta,
0132          MEOption meopt) const;
0133 
0134   /**
0135    *   Construct the SpinInfos for the particles produced in the decay
0136    */
0137   virtual void constructSpinInfo(const Particle & part,
0138                  ParticleVector outgoing) const;
0139 
0140   /**
0141    * Method to return an object to calculate the 3 body partial width.
0142    * @param dm The DecayMode
0143    * @return A pointer to a WidthCalculatorBase object capable of calculating the width
0144    */
0145   virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const;
0146 
0147   /**
0148    * The matrix element to be integrated for the three-body decays as a function
0149    * of the invariant masses of pairs of the outgoing particles.
0150    * @param imode The mode for which the matrix element is needed.
0151    * @param q2 The scale, \e i.e. the mass squared of the decaying particle.
0152    * @param s3 The invariant mass squared of particles 1 and 2, \f$s_3=m^2_{12}\f$.
0153    * @param s2 The invariant mass squared of particles 1 and 3, \f$s_2=m^2_{13}\f$.
0154    * @param s1 The invariant mass squared of particles 2 and 3, \f$s_1=m^2_{23}\f$.
0155    * @param m1 The mass of the first  outgoing particle.
0156    * @param m2 The mass of the second outgoing particle.
0157    * @param m3 The mass of the third  outgoing particle.
0158    * @return The matrix element
0159    */
0160   virtual double threeBodyMatrixElement(const int imode , const Energy2 q2,
0161                     const Energy2 s3, const Energy2 s2,
0162                     const Energy2 s1, const Energy  m1,
0163                     const Energy  m2, const Energy m3) const;
0164 
0165   /**
0166    * Output the setup information for the particle database
0167    * @param os The stream to output the information to
0168    * @param header Whether or not to output the information for MySQL
0169    */
0170   virtual void dataBaseOutput(ofstream & os,bool header) const;
0171   
0172 public:
0173    
0174   /** @name Functions used by the persistent I/O system. */
0175   //@{
0176   /**
0177    * Function used to write out object persistently.
0178    * @param os the persistent output stream written to.
0179    */
0180   void persistentOutput(PersistentOStream & os) const;
0181 
0182   /**
0183    * Function used to read in object persistently.
0184    * @param is the persistent input stream read from.
0185    * @param version the version number of the object when written.
0186    */
0187   void persistentInput(PersistentIStream & is, int version);
0188   //@}
0189 
0190   /**
0191    * Standard Init function used to initialize the interfaces.
0192    */
0193   static void Init();
0194 
0195 protected:
0196 
0197   /** @name Clone Methods. */
0198   //@{
0199   /**
0200    * Make a simple clone of this object.
0201    * @return a pointer to the new object.
0202    */
0203   virtual IBPtr clone() const {return new_ptr(*this);}
0204 
0205   /** Make a clone of this object, possibly modifying the cloned object
0206    * to make it sane.
0207    * @return a pointer to the new object.
0208    */
0209   virtual IBPtr fullclone() const {return new_ptr(*this);}
0210   //@}
0211 
0212 protected:
0213 
0214   /** @name Standard Interfaced functions. */
0215   //@{
0216   /**
0217    * Initialize this object after the setup phase before saving and
0218    * EventGenerator to disk.
0219    * @throws InitException if object could not be initialized properly.
0220    */
0221   virtual void doinit();
0222 
0223   /**
0224    * Initialize this object to the begining of the run phase.
0225    */
0226   virtual void doinitrun();
0227   //@}
0228 
0229 private:
0230   
0231   /**
0232    * Private and non-existent assignment operator.
0233    */
0234   a1ThreePionDecayer & operator=(const a1ThreePionDecayer &) = delete;
0235   
0236 private:
0237   
0238   /**
0239    * Breit-wigner for the \f$\sigma\f$, this is \f$\frac1{D_\sigma(q^2)}\f$.
0240    * @param q2 The scale, \f$q^2\f$.
0241    * @return The Breit-Wigner
0242    */
0243   Complex sigmaBreitWigner(Energy2 q2) const {
0244     Energy q=sqrt(q2);
0245     Energy width=_sigmawidth*Kinematics::pstarTwoBodyDecay(q,_mpi,_mpi)/_psigma;
0246     Energy2 msigma2=_sigmamass*_sigmamass;
0247     Complex ii(0.,1.);
0248     complex<Energy2> denom = q>2.*_mpi ? q2-msigma2+ii*msigma2*width/q :
0249       q2-msigma2;
0250     return msigma2/denom;
0251   }
0252   
0253   /**
0254    * The \f$a_1\f$ form factor, \f$F_{a_1}(q^2)\f$
0255    * @param q2 The scale, \f$q^2\f$.
0256    * @return The form factor.
0257    */
0258   double a1FormFactor(Energy2 q2) const {
0259     return (1.+_a1mass2/_lambda2)/(1.+q2/_lambda2);
0260   }
0261 
0262   /**
0263    * Breit-Wigner for the \f$\rho\f$, this is  \f$\frac1{D_{\rho_k}(q^2)}\f$.
0264    * @param q2 The scale, \f$q^2\f$.
0265    * @param ires The \f$\rho\f$ multiplet.
0266    * @return The Breit-Wigner
0267    */
0268   Complex rhoBreitWigner(Energy2 q2,int ires) const {
0269     Energy q=sqrt(q2);
0270     Energy2 grhom = 8.*_prho[ires]*_prho[ires]*_prho[ires]/_rhomass[ires];
0271     complex<Energy2> denom;
0272     Complex ii(0.,1.);
0273     if(q2<4.*_mpi2) {
0274       denom=q2-_rhomass[ires]*_rhomass[ires]-_rhowidth[ires]*_rhomass[ires]*
0275     (hFunction(q)-_hm2[ires]-(q2-_rhomass[ires]*_rhomass[ires])*_dhdq2m2[ires])
0276     /grhom;
0277     }
0278     else {
0279       Energy pcm=2.*Kinematics::pstarTwoBodyDecay(q,_mpi,_mpi);
0280       Energy2 grho = pcm*pcm*pcm/q;
0281       denom=q2-_rhomass[ires]*_rhomass[ires]
0282     -_rhowidth[ires]*_rhomass[ires]*
0283     (hFunction(q)-_hm2[ires]-(q2-_rhomass[ires]*_rhomass[ires])*_dhdq2m2[ires])/grhom
0284     +ii*_rhomass[ires]*_rhowidth[ires]*grho/grhom;
0285     }
0286     return _rhoD[ires]/denom;
0287   }
0288 
0289   /**
0290    *  Normalisation factor for the \f$\rho\f$ propagator to ensure \f$D(0)=-1\f$.
0291    * @param ires The \f$\rho\f$ multiplet.
0292    * @return The normalisation factor.
0293    */
0294   Energy2 DParameter(int ires) const {
0295     Energy2 grhom = 8.*_prho[ires]*_prho[ires]*_prho[ires]/_rhomass[ires];
0296     return _rhomass[ires]*_rhomass[ires]+_rhowidth[ires]*_rhomass[ires]*
0297       (hFunction(ZERO)-_hm2[ires]+sqr(_rhomass[ires])*_dhdq2m2[ires])/grhom;
0298   }
0299 
0300   /**
0301    * The \f$\frac{dh}{dq^2}\f$ function in the rho propagator evaluated at \f$q^2=m^2\f$.
0302    * @param ires The \f$\rho\f$ resonance for the function
0303    * @return \f$\frac{dh}{dq^2}\f$ evaluated at \f$q^2=m^2\f$.
0304    */
0305   double dhdq2Parameter(int ires) const  {
0306     Energy2 mrho2(sqr(_rhomass[ires]));
0307     double root = sqrt(1.-4.*_mpi2/mrho2);
0308     using Constants::pi;
0309     return root/pi*(root+(1.+2*_mpi2/mrho2)*log((1+root)/(1-root)));
0310   }
0311   
0312   /**
0313    * The \f$h(q^2)\f$ function in the \f$\rho\f$ propagator.
0314    * @param q The scale, \f$q\f$.
0315    * @return The function \f$h(q^2)\f$.
0316    */
0317   Energy2 hFunction(const Energy q) const  {
0318     static const Energy2 eps(0.01*MeV2);
0319     Energy2 q2=sqr(q), output;
0320     if(q2>4*_mpi2) {
0321       double root = sqrt(1.-4.*_mpi2/q2);
0322       output=root*log((1.+root)/(1.-root))*(q2-4*_mpi2)/Constants::pi;
0323     }
0324     else if(q2>eps) output=ZERO;
0325     else            output=-8.*_mpi2/Constants::pi;
0326     return output;
0327   }
0328 
0329   /**
0330    *  Momentum Function
0331    */
0332   Energy4 lambda(Energy2 a, Energy2 b, Energy2 c) const {
0333     return sqr(a)+sqr(b)+sqr(c)-2.*a*b-2.*a*c-2.*b*c;
0334   }
0335   
0336 private:
0337 
0338   /**
0339    * Mass of the rho resonances
0340    */
0341   vector<Energy> _rhomass;
0342 
0343   /**
0344    * Width of the rho resonaces
0345    */
0346   vector<Energy> _rhowidth;
0347 
0348   /**
0349    * Momentum of the pions produced in the \f$\rho\f$ decay.
0350    */
0351   vector<Energy> _prho;
0352 
0353   /**
0354    * The function \f$h(q^2)\f$ evaluated at \f$q^2=M^2_{\rho_k}\f$
0355    */
0356   vector<Energy2> _hm2;
0357 
0358   /**
0359    * The normalization factor for the \f$\rho_k\f$ propagator factor.
0360    */
0361   vector<Energy2> _rhoD;
0362 
0363   /**
0364    * The \f$\frac{dh}{dq^2}\f$ function in the rho propagator evaluated at \f$q^2=m^2\f$
0365    * for the different \f$\rho\f$ multiplets.
0366    */
0367   vector<double> _dhdq2m2;
0368 
0369   /**
0370    * The mass of the \f$\sigma\f$ meson. 
0371    */
0372   Energy _sigmamass;
0373 
0374   /**
0375    * The width of the \f$\sigma\f$ meson. 
0376    */
0377   Energy _sigmawidth;
0378 
0379   /**
0380    * The momenta of the pions produced in the \f$\sigma\f$ meson decay. 
0381    */
0382   Energy _psigma;
0383 
0384   /**
0385    * The mass of the pion, \f$m_\pi\f$.
0386    */
0387   Energy _mpi;
0388 
0389   /**
0390    * The mass of the pion, \f$m^2_\pi\f$.
0391    */
0392   Energy2 _mpi2;
0393 
0394   /**
0395    * The \f$\Lambda^2\f$ parameter for the \f$a_1\f$ form factor.
0396    */
0397   Energy2 _lambda2;
0398   
0399   /**
0400    * The mass squared of the \f$a_1\f$ meson, \f$m_{a_1}^2\f$.
0401    */
0402   Energy2 _a1mass2;
0403 
0404   /**
0405    * The \f$z\f$ coupling for the \f$\sigma\f$ resonance.
0406    */
0407   Complex _zsigma;
0408 
0409   /**
0410    * The magnitude of the \f$z\f$ \f$\sigma\f$ coupling.
0411    */
0412   double _zmag;
0413 
0414   /**
0415    * The phase of the \f$z\f$ \f$\sigma\f$ coupling.
0416    */
0417   double _zphase;
0418 
0419   /**
0420    * \f$g_{\rho_k}\f$ is the coupling of the \f$k\f$ th \f$\rho\f$ multiplet.
0421    */
0422   vector<Complex> _rhocoupling;
0423 
0424   /**
0425    *  Magnitude of the rho coupling
0426    */
0427   vector<double> _rhomag;
0428 
0429   /**
0430    *  Phase of the rho coupling
0431    */
0432   vector<double> _rhophase;
0433 
0434   /**
0435    * The overall coupling for the decay.
0436    */
0437   double _coupling;
0438 
0439   /**
0440    * use local values of the mass parameters
0441    */
0442   bool _localparameters;
0443 
0444   /**
0445    * Weights for the channels for the zero charged pion channel.
0446    */
0447   mutable vector<double> _zerowgts;
0448   
0449   /**
0450    * Weights for the channels for the one charged pion channel.
0451    */
0452   mutable vector<double> _onewgts;
0453   
0454   /**
0455    * Weights for the channels for the two charged pion channel.
0456    */
0457   mutable vector<double> _twowgts;
0458   
0459   /**
0460    * Weights for the channels for the three charged pion channel.
0461    */
0462   mutable vector<double> _threewgts;
0463 
0464   /**
0465    * Maximum weight for the zero charged pion channel.
0466    */
0467   mutable double _zeromax;
0468 
0469   /**
0470    * Maximum weight for the one charged pion channel.
0471    */
0472   mutable double _onemax;
0473 
0474   /**
0475    * Maximum weight for the two charged pion channel.
0476    */
0477   mutable double _twomax;
0478 
0479   /**
0480    * Maximum weight for the three charged pion channel.
0481    */
0482   mutable double _threemax;
0483 
0484   /**
0485    *  Spin density matrix
0486    */
0487   mutable RhoDMatrix _rho;
0488 
0489   /**
0490    *  Polarization vectors
0491    */
0492   mutable vector<Helicity::LorentzPolarizationVector> _vectors;
0493 
0494 };
0495   
0496 }
0497 
0498 
0499 #endif /* HERWIG_a1ThreePionDecayer_H */