|
|
|||
File indexing completed on 2026-08-06 09:24:05
0001 // -*- C++ -*- 0002 // 0003 // TwoPionPhotonCurrent.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_TwoPionPhotonCurrent_H 0010 #define HERWIG_TwoPionPhotonCurrent_H 0011 // 0012 // This is the declaration of the TwoPionPhotonCurrent class. 0013 // 0014 #include "WeakCurrent.h" 0015 0016 namespace Herwig { 0017 using namespace ThePEG; 0018 0019 /** \ingroup Decay 0020 * 0021 * This class implements the decay current for \f$\pi^\pm\pi^0 \gamma\f$ via 0022 * an intermediate \f$\omega\f$. It inherits from the <code>WeakCurrent</code> 0023 * class and implements the hadronic current. 0024 * 0025 * The model is based on the one used in TAUOLA, Comput.Phys.Commun.76:361-380,1993. 0026 * The current is given by 0027 * \f[J^\mu = e T \left\{ 0028 * \epsilon^\mu\left[ m^2_\pi p_1\cdot p_3 0029 * -p_2\cdot p_3(p_2\cdot p_1-p_1\cdot p_3)\right] 0030 * -p_2^\mu\left[p_2\cdot\epsilon p_1\cdot p_3-p_1\cdot\epsilon p_2\cdot p_3\right] 0031 * +p_3^\mu\left[\epsilon\cdot p_2-\epsilon\cdot p_1(m^2_\pi+p_2\cdotp_3)\right] 0032 *\right\}\f] 0033 * where 0034 * - \f$p_1\f$ is the momentum of the charged pion 0035 * - \f$p_2\f$ is the momentum of the neutral pion 0036 * - \f$p_3\f$ is the momentum of the photon 0037 * - \f$\epsilon\f$ is the polarization of the photon 0038 * - \f$e\f$ is the electric charge of the positron 0039 * and the normaliztion factor is 0040 * \f[T = F(q^2)F(0)\frac1{\sqrt{2}B_\omega(s_2)}\f] 0041 * and 0042 * \f[F(s) = \sqrt{2}F_\rho g_{\rho\omega\pi}\sum_k\sigma_k B_{\rho_k}(s)\f] 0043 * where 0044 * - \f$B_\omega(s)=\frac1{m^2_\omega-s-im_\omega\Gamma_\omega}\f$ is the Breit-Wigner for the \f$\omega\f$. 0045 * - \f$m_\omega\f$ is the mass of the \f$\omega\f$. 0046 * - \f$\Gamma_\omega \f$ is the width of the \f$\omega\f$. 0047 * - \f$F_\rho\f$ is the coupling for the conversion of the \f$\rho\f$ to a photon. 0048 * - \f$g_{\rho\omega\pi}\f$ is the coupling of \f$\rho\f$, \f$\omega\f$, \f$\pi\f$. 0049 * - \f$m_{\rho_k}\f$ is the mass of the \f$k\f$th \f$\rho\f$ resonance 0050 * - \f$B_{\rho_k}(s)=\frac1{m^2_{\rho_k}-s-im_{\rho_k}\Gamma_{\rho_k}}\f$ is the 0051 * Breit-Wigner for \f${\rho_k}\f$. 0052 * - \f$m_{\rho_k}\f$ is the mass of the \f${\rho_k}\f$. 0053 * - \f$\Gamma_{\rho_k} \f$ is the width of the \f${\rho_k}\f$. 0054 * 0055 * @see WeakCurrent 0056 * 0057 * \author Peter Richardson 0058 * 0059 */ 0060 class TwoPionPhotonCurrent: public WeakCurrent { 0061 0062 public: 0063 0064 /** 0065 * Default constructor 0066 */ 0067 TwoPionPhotonCurrent(); 0068 0069 /** @name Functions used by the persistent I/O system. */ 0070 //@{ 0071 /** 0072 * Function used to write out object persistently. 0073 * @param os the persistent output stream written to. 0074 */ 0075 void persistentOutput(PersistentOStream & os) const; 0076 0077 /** 0078 * Function used to read in object persistently. 0079 * @param is the persistent input stream read from. 0080 * @param version the version number of the object when written. 0081 */ 0082 void persistentInput(PersistentIStream & is, int version); 0083 //@} 0084 0085 /** 0086 * Standard Init function used to initialize the interfaces. 0087 */ 0088 static void Init(); 0089 0090 public: 0091 0092 /** @name Methods for the construction of the phase space integrator. */ 0093 //@{ 0094 /** 0095 * Complete the construction of the decay mode for integration.classes inheriting 0096 * from this one. 0097 * This method is purely virtual and must be implemented in the classes inheriting 0098 * from WeakCurrent. 0099 * @param icharge The total charge of the outgoing particles in the current. 0100 * @param resonance If specified only include terms with this particle 0101 * @param flavour Information on the required flavours of the quarks 0102 * @param imode The mode in the current being asked for. 0103 * @param mode The phase space mode for the integration 0104 * @param iloc The location of the of the first particle from the current in 0105 * the list of outgoing particles. 0106 * @param ires The location of the first intermediate for the current. 0107 * @param phase The prototype phase space channel for the integration. 0108 * @param upp The maximum possible mass the particles in the current are 0109 * allowed to have. 0110 * @return Whether the current was sucessfully constructed. 0111 */ 0112 virtual bool createMode(int icharge, tcPDPtr resonance, 0113 FlavourInfo flavour, 0114 unsigned int imode,PhaseSpaceModePtr mode, 0115 unsigned int iloc,int ires, 0116 PhaseSpaceChannel phase, Energy upp ); 0117 0118 /** 0119 * The particles produced by the current. This just returns the pseudoscalar 0120 * meson. 0121 * @param icharge The total charge of the particles in the current. 0122 * @param imode The mode for which the particles are being requested 0123 * @param iq The PDG code for the quark 0124 * @param ia The PDG code for the antiquark 0125 * @return The external particles for the current. 0126 */ 0127 virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia); 0128 //@} 0129 0130 /** 0131 * Hadronic current. This method is purely virtual and must be implemented in 0132 * all classes inheriting from this one. 0133 * @param resonance If specified only include terms with this particle 0134 * @param flavour Information on the required flavours of the quarks 0135 * @param imode The mode 0136 * @param ichan The phase-space channel the current is needed for. 0137 * @param scale The invariant mass of the particles in the current. 0138 * @param outgoing The particles produced in the decay 0139 * @param momenta The momenta of the particles produced in the decay 0140 * @param meopt Option for the calculation of the matrix element 0141 * @return The current. 0142 */ 0143 virtual vector<LorentzPolarizationVectorE> 0144 current(tcPDPtr resonance, 0145 FlavourInfo flavour, 0146 const int imode, const int ichan,Energy & scale, 0147 const tPDVector & outgoing, 0148 const vector<Lorentz5Momentum> & momenta, 0149 DecayIntegrator::MEOption meopt) const; 0150 0151 /** 0152 * Construct the SpinInfo for the decay products 0153 */ 0154 virtual void constructSpinInfo(ParticleVector decay) const; 0155 0156 /** 0157 * Accept the decay. Checks the meson against the list 0158 * @param id The id's of the particles in the current. 0159 * @return Can this current have the external particles specified. 0160 */ 0161 virtual bool accept(vector<int> id); 0162 0163 /** 0164 * Return the decay mode number for a given set of particles in the current. 0165 * Checks the meson against the list 0166 * @param id The id's of the particles in the current. 0167 * @return The number of the mode 0168 */ 0169 virtual unsigned int decayMode(vector<int> id); 0170 0171 /** 0172 * Output the setup information for the particle database 0173 * @param os The stream to output the information to 0174 * @param header Whether or not to output the information for MySQL 0175 * @param create Whether or not to add a statement creating the object 0176 */ 0177 virtual void dataBaseOutput(ofstream & os,bool header,bool create) const; 0178 0179 protected: 0180 0181 /** @name Clone Methods. */ 0182 //@{ 0183 /** 0184 * Make a simple clone of this object. 0185 * @return a pointer to the new object. 0186 */ 0187 virtual IBPtr clone() const {return new_ptr(*this);} 0188 0189 /** Make a clone of this object, possibly modifying the cloned object 0190 * to make it sane. 0191 * @return a pointer to the new object. 0192 */ 0193 virtual IBPtr fullclone() const {return new_ptr(*this);} 0194 //@} 0195 0196 private: 0197 0198 /** 0199 * Private and non-existent assignment operator. 0200 */ 0201 TwoPionPhotonCurrent & operator=(const TwoPionPhotonCurrent &) = delete; 0202 0203 private: 0204 0205 /** 0206 * Calculate the \f$F(q^2)\f$ function at a given scale 0207 * @param q2 The scale \f$q^2\f$. 0208 * @return The value of the function. 0209 */ 0210 complex<InvEnergy> FFunction(Energy2 q2) const { 0211 complex<InvEnergy2> output(ZERO); 0212 for(unsigned int ix=0; ix<_resweights.size();++ix) { 0213 output -= _resweights[ix]*BreitWigner(q2,ix); 0214 } 0215 return output*_grho*_grhoomegapi*sqrt(2.); 0216 } 0217 0218 /** 0219 * Fixed width Breit wigner 0220 * @param q2 The scame \f$q^2\f$ 0221 * @param ires The resonance required (0,1,3) are the \f$\rho\f$'s and 10 is the 0222 * \f$\omega\f$. 0223 * @return The breit wigner 0224 */ 0225 complex<InvEnergy2> BreitWigner(Energy2 q2,unsigned int ires) const { 0226 static const Complex ii(0.,1.); 0227 complex<Energy2> denom; 0228 if(ires<_rhomasses.size()) { 0229 denom = q2-_rhomasses[ires]*_rhomasses[ires]+ii*_rhomasses[ires]*_rhowidths[ires]; 0230 } 0231 else if(ires==10) { 0232 denom = q2-_omegamass*_omegamass+ii*_omegamass*_omegawidth; 0233 } 0234 else assert(false); 0235 return 1./denom; 0236 } 0237 0238 private: 0239 0240 /** 0241 * Coupling of the rho to the photon, \f$F_\rho\f$. 0242 */ 0243 Energy2 _grho; 0244 0245 /** 0246 * Coupling of the rho to the omega and a pion, \f$g_{\rho\omega\pi}\f$. 0247 */ 0248 InvEnergy _grhoomegapi; 0249 0250 /** 0251 * Weights of the different rho resonances in the current 0252 */ 0253 vector<double> _resweights; 0254 0255 /** 0256 * Masses of the \f$\rho\f$ resonances 0257 */ 0258 vector<Energy> _rhomasses; 0259 0260 /** 0261 * Widths of the \f$\rho\f$ resonances 0262 */ 0263 vector<Energy> _rhowidths; 0264 0265 /** 0266 * The \f$\omega\f$ mass. 0267 */ 0268 Energy _omegamass; 0269 0270 /** 0271 * The \f$\omega\f$ width. 0272 */ 0273 Energy _omegawidth; 0274 0275 /** 0276 * Mass for the intermediate in the phase-space, this is a technical parameter to 0277 * improve the phase-space integration efficiency. 0278 */ 0279 Energy _intmass; 0280 0281 /** 0282 * Width for the intermediate in the phase-space, this is a technical parameter to 0283 * improve the phase-space integration efficiency. 0284 */ 0285 Energy _intwidth; 0286 0287 }; 0288 0289 } 0290 0291 0292 #endif /* HERWIG_TwoPionPhotonCurrent_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|