|
|
|||
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 */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|