|
|
|||
File indexing completed on 2026-08-06 09:24:04
0001 // -*- C++ -*- 0002 // 0003 // VectorMesonPScalarFermionsDecayer.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_VectorMesonPScalarFermionsDecayer_H 0010 #define HERWIG_VectorMesonPScalarFermionsDecayer_H 0011 // 0012 // This is the declaration of the VectorMesonPScalarFermionsDecayer 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>VectorMesonPScalarFermionsDecayer</code> class is designed to perform the 0025 * decay of a vector meson to a pesudo scalar and a fermion-antifermion pair according 0026 * to a current which is the \f$V\to VP\f$ vertex combined with the branching of the 0027 * vector into a fermion-antifermion pair. 0028 * 0029 * The current is 0030 * \f[\mathcal{M}=\frac{g}{(p_f+p_{\bar f})^2}\epsilon^{\mu\nu\alpha\beta} 0031 * \epsilon_{0\mu}p_{0\nu}(p_f+p_{\bar f})_\alpha 0032 * \bar{u}(p_f)\gamma_\beta v(p_{\bar f}) 0033 * \f] 0034 * 0035 * It includes the option of a vector meson dominance (VMD) type form factor 0036 * \f$\frac{-M^2+i\Gamma M}{(m^2_{ff}-M^2+i\Gamma M)}\f$. 0037 * 0038 * The incoming and outgoing meson together with the types of fermions can be 0039 * specified using the interfaces. 0040 * 0041 * @see DecayIntegrator 0042 * @see VectorMesonVectorPScalarDecayer 0043 * @see \ref VectorMesonPScalarFermionsDecayerInterfaces "The interfaces" 0044 * defined for VectorMesonPScalarFermionsDecayer. 0045 * 0046 * \author Peter Richardson 0047 * 0048 */ 0049 class VectorMesonPScalarFermionsDecayer: public DecayIntegrator { 0050 0051 public: 0052 0053 /** 0054 * Default constructor. 0055 */ 0056 VectorMesonPScalarFermionsDecayer(); 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 VectorMesonPScalarFermionsDecayer & operator=(const VectorMesonPScalarFermionsDecayer &) = 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 * PDG codes for the incoming particle 0196 */ 0197 vector<int> incoming_; 0198 0199 /** 0200 * PDG codes for the outgoing particles. 0201 */ 0202 vector<pair<long,long> > outgoing_; 0203 0204 /** 0205 * Maximum weight for a decay 0206 */ 0207 vector<double> maxweight_; 0208 0209 /** 0210 * Relative weights for the two channels 0211 */ 0212 vector<double> weight_; 0213 0214 /** 0215 * Include the VMD form factor. 0216 */ 0217 vector<int> includeVMD_; 0218 0219 /** 0220 * PDG code for the particle mass and width to use for the VMD form factor. 0221 */ 0222 vector<int> VMDid_; 0223 0224 /** 0225 * Mass for the VMD form factor. 0226 */ 0227 vector<Energy> VMDmass_; 0228 0229 /** 0230 * Width for the VMD form factor. 0231 */ 0232 vector<Energy> VMDwidth_; 0233 0234 /** 0235 * Spin density matrixl 0236 */ 0237 mutable RhoDMatrix rho_; 0238 0239 /** 0240 * Polarization vectors for the decaying particle 0241 */ 0242 mutable vector<Helicity::LorentzPolarizationVector> vectors_; 0243 0244 /** 0245 * Spinors for the fermions 0246 */ 0247 mutable vector<Helicity::LorentzSpinor <SqrtEnergy> > wave_; 0248 0249 /** 0250 * Barred spinors for the fermions 0251 */ 0252 mutable vector<Helicity::LorentzSpinorBar<SqrtEnergy> > wavebar_; 0253 }; 0254 0255 } 0256 0257 0258 #endif /* HERWIG_VectorMesonPScalarFermionsDecayer_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|