|
|
|||
File indexing completed on 2026-08-06 09:24:04
0001 // -*- C++ -*- 0002 // 0003 // OneKaonTwoPionCurrent.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_OneKaonTwoPionCurrent_H 0010 #define HERWIG_OneKaonTwoPionCurrent_H 0011 // 0012 // This is the declaration of the OneKaonTwoPionCurrent class. 0013 // 0014 0015 #include "WeakCurrent.h" 0016 #include "Herwig/Decay/ResonanceHelpers.h" 0017 #include <numeric> 0018 0019 namespace Herwig { 0020 0021 using namespace ThePEG; 0022 0023 /** 0024 * The OneKaonTwoPionCurrent class implements the model of M. Finkemeier 0025 * and E.~Mirkes, Z. Phys. C 69 (1996) 243 [arXiv:hep-ph/9503474], 0026 * for the weak current for three mesons where at least one of the mesons is 0027 * a kaon. 0028 * 0029 * \ingroup Decay 0030 * 0031 * This is the base class for the three meson decays of the weak current. 0032 * It is designed so that the currents for the following modes can be implemented 0033 * in classes inheriting from this 0034 * - \f$ \pi^- \pi^- \pi^+ \f$, (imode=0) 0035 * - \f$ \pi^0 \pi^0 \pi^- \f$, (imode=1) 0036 * - \f$ K^- \pi^- K^+ \f$, (imode=2) 0037 * - \f$ K^0 \pi^- \bar{K}^0\f$, (imode=3) 0038 * - \f$ K^- \pi^0 K^0 \f$, (imode=4) 0039 * - \f$ \pi^0 \pi^0 K^- \f$, (imode=5) 0040 * - \f$ K^- \pi^- \pi^+ \f$, (imode=6) 0041 * - \f$ \pi^- \bar{K}^0 \pi^0 \f$, (imode=7) 0042 * - \f$ \pi^- \pi^0 \eta \f$, (imode=8) 0043 * 0044 * obviously there are other modes with three pseudoscalar mesons for the decay 0045 * of the weak current but this model original came from \f$\tau\f$ decay where 0046 * these are the only modes. However one case which is important is the inclusion 0047 * of the mixing in the neutral kaon sector for which we include the additional 0048 * currents 0049 * - \f$ K^0_S \pi^- K^0_S\f$, (imode=9) 0050 * - \f$ K^0_L \pi^- K^0_L\f$, (imode=10) 0051 * - \f$ K^0_S \pi^- K^0_L\f$, (imode=11) 0052 * 0053 * In this case the current is given by 0054 * \f[ J^\mu = \left(g^{\mu\nu}-\frac{q^\mu q^\nu}{q^2}\right) 0055 * \left[F_1(p_2-p_3)^\mu +F_2(p_3-p_1)^\mu+F_3(p_1-p_2)^\mu\right] 0056 * +q^\mu F_4 0057 * +F_5\epsilon^{\mu\alpha\beta\gamma}p_1^\alpha p_2^\beta p_3^\gamma 0058 * \f] 0059 * where 0060 * - \f$p_{1,2,3}\f$ are the momenta of the mesons in the order given above. 0061 * - \f$F_1,F_2,F_3,F_4,F_5\f$ are the form factors which must be 0062 * calculated in the calculateFormFactors member which should be implemented 0063 * in classes inheriting from this. 0064 * 0065 * @see WeakCurrent. 0066 * 0067 * \author Peter Richardson 0068 * @see \ref OneKaonTwoPionCurrentInterfaces "The interfaces" 0069 * defined for OneKaonTwoPionCurrent. 0070 */ 0071 class OneKaonTwoPionCurrent: public WeakCurrent { 0072 0073 public: 0074 0075 /** 0076 * The default constructor. 0077 */ 0078 OneKaonTwoPionCurrent(); 0079 0080 /** @name Methods for the construction of the phase space integrator. */ 0081 //@{ 0082 /** 0083 * Complete the construction of the decay mode for integration.classes inheriting 0084 * from this one. 0085 * This method is purely virtual and must be implemented in the classes inheriting 0086 * from WeakCurrent. 0087 * @param icharge The total charge of the outgoing particles in the current. 0088 * @param resonance If specified only include terms with this particle 0089 * @param flavour Information on the required flavours of the quarks 0090 * @param imode The mode in the current being asked for. 0091 * @param mode The phase space mode for the integration 0092 * @param iloc The location of the of the first particle from the current in 0093 * the list of outgoing particles. 0094 * @param ires The location of the first intermediate for the current. 0095 * @param phase The prototype phase space channel for the integration. 0096 * @param upp The maximum possible mass the particles in the current are 0097 * allowed to have. 0098 * @return Whether the current was sucessfully constructed. 0099 */ 0100 virtual bool createMode(int icharge, tcPDPtr resonance, 0101 FlavourInfo flavour, 0102 unsigned int imode,PhaseSpaceModePtr mode, 0103 unsigned int iloc,int ires, 0104 PhaseSpaceChannel phase, Energy upp ); 0105 //@} 0106 0107 0108 /** 0109 * Hadronic current. This method is purely virtual and must be implemented in 0110 * all classes inheriting from this one. 0111 * @param resonance If specified only include terms with this particle 0112 * @param flavour Information on the required flavours of the quarks 0113 * @param imode The mode 0114 * @param ichan The phase-space channel the current is needed for. 0115 * @param scale The invariant mass of the particles in the current. 0116 * @param outgoing The particles produced in the decay 0117 * @param momenta The momenta of the particles produced in the decay 0118 * @param meopt Option for the calculation of the matrix element 0119 * @return The current. 0120 */ 0121 virtual vector<LorentzPolarizationVectorE> 0122 current(tcPDPtr resonance, 0123 FlavourInfo flavour, 0124 const int imode, const int ichan,Energy & scale, 0125 const tPDVector & outgoing, 0126 const vector<Lorentz5Momentum> & momenta, 0127 DecayIntegrator::MEOption meopt) const; 0128 0129 /** 0130 * Accept the decay. Checks the mesons against the list. 0131 * @param id The id's of the particles in the current. 0132 * @return Can this current have the external particles specified. 0133 */ 0134 virtual bool accept(vector<int> id); 0135 0136 /** 0137 * Return the decay mode number for a given set of particles in the current. 0138 * Checks the mesons against the list. 0139 * @param id The id's of the particles in the current. 0140 * @return The number of the mode 0141 */ 0142 virtual unsigned int decayMode(vector<int> id); 0143 0144 /** 0145 * The particles produced by the current. This returns the mesons for the mode. 0146 * @param icharge The total charge of the particles in the current. 0147 * @param imode The mode for which the particles are being requested 0148 * @param iq The PDG code for the quark 0149 * @param ia The PDG code for the antiquark 0150 * @return The external particles for the current. 0151 */ 0152 virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia); 0153 0154 /** 0155 * Output the setup information for the particle database 0156 * @param os The stream to output the information to 0157 * @param header Whether or not to output the information for MySQL 0158 * @param create Whether or not to add a statement creating the object 0159 */ 0160 virtual void dataBaseOutput(ofstream & os,bool header,bool create) const; 0161 0162 public: 0163 0164 /** @name Functions used by the persistent I/O system. */ 0165 //@{ 0166 /** 0167 * Function used to write out object persistently. 0168 * @param os the persistent output stream written to. 0169 */ 0170 void persistentOutput(PersistentOStream & os) const; 0171 0172 /** 0173 * Function used to read in object persistently. 0174 * @param is the persistent input stream read from. 0175 * @param version the version number of the object when written. 0176 */ 0177 void persistentInput(PersistentIStream & is, int version); 0178 //@} 0179 0180 /** 0181 * The standard Init function used to initialize the interfaces. 0182 * Called exactly once for each class by the class description system 0183 * before the main function starts or 0184 * when this class is dynamically loaded. 0185 */ 0186 static void Init(); 0187 0188 protected: 0189 0190 /** @name Clone Methods. */ 0191 //@{ 0192 /** 0193 * Make a simple clone of this object. 0194 * @return a pointer to the new object. 0195 */ 0196 virtual IBPtr clone() const; 0197 0198 /** Make a clone of this object, possibly modifying the cloned object 0199 * to make it sane. 0200 * @return a pointer to the new object. 0201 */ 0202 virtual IBPtr fullclone() const; 0203 //@} 0204 0205 protected: 0206 0207 /** 0208 * Initialize this object after the setup phase before saving and 0209 * EventGenerator to disk. 0210 * @throws InitException if object could not be initialized properly. 0211 */ 0212 virtual void doinit(); 0213 0214 private: 0215 0216 /** 0217 * The assignment operator is private and must never be called. 0218 * In fact, it should not even be implemented. 0219 */ 0220 OneKaonTwoPionCurrent & operator=(const OneKaonTwoPionCurrent &) = delete; 0221 0222 private: 0223 0224 /** 0225 * The \f$\rho\f$ lineshape for the axial-vector terms 0226 * @param q2 The scale \f$q^2\f$ for the lineshape 0227 * @param ires Which \f$\rho\f$ multiplet 0228 */ 0229 Complex Trho1(Energy2 q2,int ires) const { 0230 if(ires>=int(_rho1wgts.size())) return 0.; 0231 double norm = std::accumulate(_rho1wgts.begin(),_rho1wgts.end(),0.); 0232 unsigned int imin=0,imax=_rho1wgts.size(); 0233 if(ires>0) { 0234 imin=ires; 0235 imax=imin+1; 0236 } 0237 Complex output(0.); 0238 for(unsigned int ix=imin;ix<imax;++ix) 0239 output+=_rho1wgts[ix]* 0240 Resonance::BreitWignerPWave(q2,_rho1mass[ix],_rho1width[ix],_mpi,_mpi); 0241 return output/norm; 0242 } 0243 0244 /** 0245 * The \f$K^*\f$ lineshape for the axial-vector terms 0246 * @param q2 The scale \f$q^2\f$ for the lineshape 0247 * @param ires Which \f$K^*\f$ multiplet 0248 */ 0249 Complex TKstar1(Energy2 q2,int ires) const { 0250 if(ires>=int(_kstar1wgts.size())) return 0.; 0251 double norm = std::accumulate(_kstar1wgts.begin(),_kstar1wgts.end(),0.); 0252 unsigned int imin=0,imax=_kstar1wgts.size(); 0253 if(ires>0) { 0254 imin=ires; 0255 imax=imin+1; 0256 } 0257 Complex output(0.); 0258 for(unsigned int ix=imin;ix<imax;++ix) 0259 output+=_kstar1wgts[ix]* 0260 Resonance::BreitWignerPWave(q2,_kstar1mass[ix],_kstar1width[ix],_mK,_mpi); 0261 return output/norm; 0262 } 0263 0264 /** 0265 * The \f$K^*\f$ lineshape for the vector terms 0266 * @param q2 The scale \f$q^2\f$ for the lineshape 0267 * @param ires Which \f$K^*\f$ multiplet 0268 */ 0269 Complex TKstar2(Energy2 q2,int ires) const { 0270 if(ires>=int(_kstar2wgts.size())) return 0.; 0271 double norm = std::accumulate(_kstar2wgts.begin(),_kstar2wgts.end(),0.); 0272 unsigned int imin=0,imax=_kstar2wgts.size(); 0273 if(ires>0) { 0274 imin=ires; 0275 imax=imin+1; 0276 } 0277 Complex output(0.); 0278 for(unsigned int ix=imin;ix<imax;++ix) 0279 output+=_kstar2wgts[ix]* 0280 Resonance::BreitWignerPWave(q2,_kstar2mass[ix],_kstar2width[ix],_mK,_mpi); 0281 return output/norm; 0282 } 0283 0284 /** 0285 * The \f$K_1\f$ line shape 0286 * @param q2 The scale \f$q^2\f$ for the Breit-Wigner 0287 * @param iopt Whether this is \f$K^*\pi\f$ or \f$\rho K\f$. 0288 * @param ires the resonance 0289 */ 0290 Complex TK1(Energy2 q2,unsigned int iopt,int ires) const; 0291 0292 private: 0293 0294 /** 0295 * Parameters for the \f$\rho\f$ in the axial-vector terms 0296 */ 0297 //@{ 0298 /** 0299 * Weight for the different resonances 0300 */ 0301 vector<double> _rho1wgts; 0302 0303 /** 0304 * Masses 0305 */ 0306 vector<Energy> _rho1mass; 0307 0308 /** 0309 * Widths 0310 */ 0311 vector<Energy> _rho1width; 0312 //@} 0313 0314 /** 0315 * Parameters for the \f$K^*\f$ in the axial-vector terms 0316 */ 0317 //@{ 0318 /** 0319 * Weight for the different resonances 0320 */ 0321 vector<double> _kstar1wgts; 0322 0323 /** 0324 * Masses 0325 */ 0326 vector<Energy> _kstar1mass; 0327 0328 /** 0329 * Widths 0330 */ 0331 vector<Energy> _kstar1width; 0332 //@} 0333 0334 /** 0335 * Parameters for the \f$K^*\f$ in the vector terms 0336 */ 0337 //@{ 0338 /** 0339 * Weight for the different resonances 0340 */ 0341 vector<double> _kstar2wgts; 0342 0343 /** 0344 * Masses 0345 */ 0346 vector<Energy> _kstar2mass; 0347 0348 /** 0349 * Widths 0350 */ 0351 vector<Energy> _kstar2width; 0352 //@} 0353 0354 /** 0355 * Parameters for the three meson resonances 0356 */ 0357 //@{ 0358 0359 /** 0360 * The masses of the \f$aK1\f$ resonances. 0361 */ 0362 vector<Energy> _k1mass; 0363 0364 /** 0365 * The widths of the \f$K_1\f$ resonances. 0366 */ 0367 vector<Energy> _k1width; 0368 0369 /** 0370 * The weights for the different \f$K_1\f$ resonances for \f$K_1\to K^*\pi\f$ 0371 */ 0372 vector<double> _k1wgta; 0373 0374 /** 0375 * The weights for the different \f$K_1\f$ resonaces for \f$K_1\to\rho K\f$. 0376 */ 0377 vector<double> _k1wgtb; 0378 //@} 0379 0380 /** 0381 * The pion decay constant, \f$f_\pi\f$. 0382 */ 0383 Energy _fpi; 0384 0385 /** 0386 * The pion mass 0387 */ 0388 Energy _mpi; 0389 0390 /** 0391 * The kaon mass 0392 */ 0393 Energy _mK; 0394 //@} 0395 }; 0396 0397 } 0398 0399 #endif /* HERWIG_OneKaonTwoPionCurrent_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|