|
|
|||
File indexing completed on 2026-08-06 09:24:02
0001 // -*- C++ -*- 0002 // 0003 // PScalarVectorFermionsDecayer.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 THEPEG_PScalarVectorFermionsDecayer_H 0010 #define THEPEG_PScalarVectorFermionsDecayer_H 0011 // 0012 // This is the declaration of the PScalarVectorFermionsDecayer class. 0013 // 0014 #include "Herwig/Decay/DecayIntegrator.h" 0015 #include "Herwig/Decay/PhaseSpaceMode.h" 0016 #include "ThePEG/Helicity/LorentzPolarizationVector.h" 0017 #include "ThePEG/Helicity/LorentzSpinorBar.h" 0018 0019 namespace Herwig { 0020 using namespace ThePEG; 0021 0022 /** \ingroup Decay 0023 * 0024 * The <code>PScalarVectorFermionsDecayer</code> class is designed for the decay of a 0025 * pseudoscalar meson to a spin-1 particle and a fermion-antifermion pair. In practice 0026 * these decays are of the form \f$\gamma\ell^+\ell^-\f$ and the propagator of 0027 * the off-shell boson is taken to be \f$\frac1{m^2_{f\bar{f}}}\f$. 0028 * There is also the option of including a vector meson dominance 0029 * form-factor. 0030 * 0031 * In this case the matrix element is 0032 * \f[\mathcal{M} = \frac{g}{m^2_{f\bar{f}}} 0033 * \epsilon^{\mu\nu\alpha\beta}p_{V\mu}\epsilon_{V\nu} 0034 * \bar{u}(p_f)\gamma_\alpha v(p_{\bar{f}}) p_{f\bar{f}\beta} 0035 * \f] 0036 * It includes the option of a vector meson dominance (VMD) type form factor 0037 * \f$\frac{-M^2+i\Gamma M}{(m^2_{f\bar{f}}-M^2+i\Gamma M)}\f$. 0038 * 0039 * The incoming pseudoscalar meson, the outgoing vector, the fermion and antifermion 0040 * and the coupling can be specified using the relevant interfaces. 0041 * 0042 * @see DecayIntegrator 0043 * @see PScalarVectorVectorDecayer 0044 * @see PScalar4FermionsDecayer 0045 * 0046 * \author Peter Richardson 0047 * 0048 */ 0049 class PScalarVectorFermionsDecayer: public DecayIntegrator { 0050 0051 public: 0052 0053 /** 0054 * Default constructor. 0055 */ 0056 PScalarVectorFermionsDecayer(); 0057 0058 /** 0059 * Which of the possible decays is required 0060 * @param cc Is this mode the charge conjugate 0061 * @param parent The decaying particle 0062 * @param children The decay products 0063 */ 0064 virtual int modeNumber(bool & cc, tcPDPtr parent, 0065 const tPDVector & children) const; 0066 0067 /** 0068 * Return the matrix element squared for a given mode and phase-space channel. 0069 * @param ichan The channel we are calculating the matrix element for. 0070 * @param part The decaying Particle. 0071 * @param outgoing The particles produced in the decay 0072 * @param momenta The momenta of the particles produced in the decay 0073 * @param meopt Option for the calculation of the matrix element 0074 * @return The matrix element squared for the phase-space configuration. 0075 */ 0076 double me2(const int ichan,const Particle & part, 0077 const tPDVector & outgoing, 0078 const vector<Lorentz5Momentum> & momenta, 0079 MEOption meopt) const; 0080 0081 /** 0082 * Construct the SpinInfos for the particles produced in the decay 0083 */ 0084 virtual void constructSpinInfo(const Particle & part, 0085 ParticleVector outgoing) const; 0086 0087 /** 0088 * Method to return an object to calculate the 3 body partial width. 0089 * @param dm The DecayMode 0090 * @return A pointer to a WidthCalculatorBase object capable of calculating the width 0091 */ 0092 virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const; 0093 0094 /** 0095 * The differential three body decay rate with one integral performed. 0096 * @param imode The mode for which the matrix element is needed. 0097 * @param q2 The scale, \e i.e. the mass squared of the decaying particle. 0098 * @param s The invariant mass which still needs to be integrate over. 0099 * @param m1 The mass of the first outgoing particle. 0100 * @param m2 The mass of the second outgoing particle. 0101 * @param m3 The mass of the third outgoing particle. 0102 * @return The differential rate \f$\frac{d\Gamma}{ds}\f$ 0103 */ 0104 virtual InvEnergy threeBodydGammads(const int imode, const Energy2 q2, 0105 const Energy2 s, 0106 const Energy m1, const Energy m2, 0107 const Energy m3) const; 0108 0109 /** 0110 * Output the setup information for the particle database 0111 * @param os The stream to output the information to 0112 * @param header Whether or not to output the information for MySQL 0113 */ 0114 virtual void dataBaseOutput(ofstream & os,bool header) const; 0115 0116 public: 0117 0118 /** @name Functions used by the persistent I/O system. */ 0119 //@{ 0120 /** 0121 * Function used to write out object persistently. 0122 * @param os the persistent output stream written to. 0123 */ 0124 void persistentOutput(PersistentOStream & os) const; 0125 0126 /** 0127 * Function used to read in object persistently. 0128 * @param is the persistent input stream read from. 0129 * @param version the version number of the object when written. 0130 */ 0131 void persistentInput(PersistentIStream & is, int version); 0132 //@} 0133 0134 /** 0135 * Standard Init function used to initialize the interfaces. 0136 */ 0137 static void Init(); 0138 0139 protected: 0140 0141 /** @name Clone Methods. */ 0142 //@{ 0143 /** 0144 * Make a simple clone of this object. 0145 * @return a pointer to the new object. 0146 */ 0147 virtual IBPtr clone() const {return new_ptr(*this);} 0148 0149 /** Make a clone of this object, possibly modifying the cloned object 0150 * to make it sane. 0151 * @return a pointer to the new object. 0152 */ 0153 virtual IBPtr fullclone() const {return new_ptr(*this);} 0154 //@} 0155 0156 protected: 0157 0158 /** @name Standard Interfaced functions. */ 0159 //@{ 0160 /** 0161 * Initialize this object after the setup phase before saving and 0162 * EventGenerator to disk. 0163 * @throws InitException if object could not be initialized properly. 0164 */ 0165 virtual void doinit(); 0166 0167 /** 0168 * Initialize this object to the begining of the run phase. 0169 */ 0170 virtual void doinitrun(); 0171 //@} 0172 0173 private: 0174 0175 /** 0176 * Private and non-existent assignment operator. 0177 */ 0178 PScalarVectorFermionsDecayer & operator=(const PScalarVectorFermionsDecayer &) = delete; 0179 0180 public: 0181 0182 /** 0183 * Set the parameters for a decay mode 0184 */ 0185 string setUpDecayMode(string arg); 0186 0187 private: 0188 0189 /** 0190 * coupling for a decay 0191 */ 0192 vector<InvEnergy> coupling_; 0193 0194 /** 0195 * the PDG codes for the incoming particles 0196 */ 0197 vector<int> incoming_; 0198 0199 /** 0200 * the PDG codes for the outgoing vector 0201 */ 0202 vector<pair<long,long> > outgoing_; 0203 0204 /** 0205 * maximum weight for a decay 0206 */ 0207 vector<double> maxweight_; 0208 0209 /** 0210 * Include the VMD factor 0211 */ 0212 vector<int> includeVMD_; 0213 0214 /** 0215 * PDG code for thte particle to use in the VMD factor. 0216 */ 0217 vector<int> VMDid_; 0218 0219 /** 0220 * Mass to use in the VMD factor. 0221 */ 0222 vector<Energy> VMDmass_; 0223 0224 /** 0225 * Width to use in the VMD factor. 0226 */ 0227 vector<Energy> VMDwidth_; 0228 /** 0229 * Spin density matrix 0230 */ 0231 mutable RhoDMatrix rho_; 0232 0233 /** 0234 * Polarization vectors for the decay product 0235 */ 0236 mutable vector<Helicity::LorentzPolarizationVector> vectors_; 0237 0238 /** 0239 * Spinors for the fermions 0240 */ 0241 mutable vector<Helicity::LorentzSpinor <SqrtEnergy> > wave_; 0242 0243 /** 0244 * Barred spinors for the fermions 0245 */ 0246 mutable vector<Helicity::LorentzSpinorBar<SqrtEnergy> > wavebar_; 0247 }; 0248 0249 } 0250 0251 0252 #endif /* THEPEG_PScalarVectorFermionsDecayer_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|