|
|
|||
File indexing completed on 2026-08-06 09:24:03
0001 // -*- C++ -*- 0002 // 0003 // ScalarVectorVectorDecayer.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_ScalarVectorVectorDecayer_H 0010 #define HERWIG_ScalarVectorVectorDecayer_H 0011 // 0012 // This is the declaration of the ScalarVectorVectorDecayer class. 0013 // 0014 0015 #include "Herwig/Decay/DecayIntegrator.h" 0016 #include "ThePEG/Helicity/LorentzPolarizationVector.h" 0017 0018 namespace Herwig { 0019 0020 using namespace ThePEG; 0021 0022 /** 0023 * The ScalarVectorVectorDecayer class is designed to perform the decay of 0024 * a scalar meson to two spin-1 particles. The matrix element is taken 0025 * to have the form 0026 * \f[\mathcal{M}=g\left[ \epsilon_1 \cdot \epsilon_2 0027 * -\frac{p_1 \cdot \epsilon_2 p_2 \cdot\epsilon_1}{p_1 \cdot p_2-m_1m_2} \right],\f] 0028 * where \f$\epsilon_{1,2}\f$ are the polarzation 0029 * vectors of the outgoing vector particles. 0030 * 0031 * The incoming scalar meson, the outgoing vectors and the coupling can 0032 * be specified using the relevant interfaces. 0033 * 0034 * @see DecayIntegrator 0035 */ 0036 class ScalarVectorVectorDecayer: public DecayIntegrator { 0037 0038 public: 0039 0040 /** 0041 * Which of the possible decays is required 0042 * @param cc Is this mode the charge conjugate 0043 * @param parent The decaying particle 0044 * @param children The decay products 0045 */ 0046 virtual int modeNumber(bool & cc, tcPDPtr parent, 0047 const tPDVector & children) const; 0048 0049 /** 0050 * Return the matrix element squared for a given mode and phase-space channel. 0051 * @param ichan The channel we are calculating the matrix element for. 0052 * @param part The decaying Particle. 0053 * @param outgoing The particles produced in the decay 0054 * @param momenta The momenta of the particles produced in the decay 0055 * @param meopt Option for the calculation of the matrix element 0056 * @return The matrix element squared for the phase-space configuration. 0057 */ 0058 double me2(const int ichan,const Particle & part, 0059 const tPDVector & outgoing, 0060 const vector<Lorentz5Momentum> & momenta, 0061 MEOption meopt) const; 0062 0063 /** 0064 * Construct the SpinInfos for the particles produced in the decay 0065 */ 0066 virtual void constructSpinInfo(const Particle & part, 0067 ParticleVector outgoing) const; 0068 0069 /** 0070 * Specify the \f$1\to2\f$ matrix element to be used in the running width calculation. 0071 * @param dm The DecayMode 0072 * @param mecode The code for the matrix element as described 0073 * in the GenericWidthGenerator class, in this case 3. 0074 * @param coupling The coupling for the matrix element. 0075 * @return True or False if this mode can be handled. 0076 */ 0077 bool twoBodyMEcode(const DecayMode & dm, int & mecode, double & coupling) const; 0078 0079 /** 0080 * Output the setup information for the particle database 0081 * @param os The stream to output the information to 0082 * @param header Whether or not to output the information for MySQL 0083 */ 0084 virtual void dataBaseOutput(ofstream & os,bool header) const; 0085 0086 public: 0087 0088 /** @name Functions used by the persistent I/O system. */ 0089 //@{ 0090 /** 0091 * Function used to write out object persistently. 0092 * @param os the persistent output stream written to. 0093 */ 0094 void persistentOutput(PersistentOStream & os) const; 0095 0096 /** 0097 * Function used to read in object persistently. 0098 * @param is the persistent input stream read from. 0099 * @param version the version number of the object when written. 0100 */ 0101 void persistentInput(PersistentIStream & is, int version); 0102 //@} 0103 0104 /** 0105 * The standard Init function used to initialize the interfaces. 0106 * Called exactly once for each class by the class description system 0107 * before the main function starts or 0108 * when this class is dynamically loaded. 0109 */ 0110 static void Init(); 0111 0112 protected: 0113 0114 /** @name Clone Methods. */ 0115 //@{ 0116 /** 0117 * Make a simple clone of this object. 0118 * @return a pointer to the new object. 0119 */ 0120 virtual IBPtr clone() const {return new_ptr(*this);} 0121 0122 /** Make a clone of this object, possibly modifying the cloned object 0123 * to make it sane. 0124 * @return a pointer to the new object. 0125 */ 0126 virtual IBPtr fullclone() const {return new_ptr(*this);} 0127 //@} 0128 0129 protected: 0130 0131 /** @name Standard Interfaced functions. */ 0132 //@{ 0133 /** 0134 * Initialize this object after the setup phase before saving an 0135 * EventGenerator to disk. 0136 * @throws InitException if object could not be initialized properly. 0137 */ 0138 virtual void doinit(); 0139 0140 /** 0141 * Initialize this object. Called in the run phase just before 0142 * a run begins. 0143 */ 0144 virtual void doinitrun(); 0145 //@} 0146 0147 private: 0148 0149 /** 0150 * The assignment operator is private and must never be called. 0151 * In fact, it should not even be implemented. 0152 */ 0153 ScalarVectorVectorDecayer & operator=(const ScalarVectorVectorDecayer &) = delete; 0154 0155 public: 0156 0157 /** 0158 * Set the parameters for a decay mode 0159 */ 0160 string setUpDecayMode(string arg); 0161 0162 private: 0163 0164 /** 0165 * the PDG code for the incoming particle 0166 */ 0167 vector<int> incoming_; 0168 0169 /** 0170 * the PDG code for the first outgoing particle 0171 */ 0172 vector<pair<long,long> > outgoing_; 0173 0174 /** 0175 * the coupling for the decay, \f$g\f$. 0176 */ 0177 vector<Energy> coupling_; 0178 0179 /** 0180 * the maximum weight for the decay 0181 */ 0182 vector<double> maxWeight_; 0183 0184 /** 0185 * Spin density matrix 0186 */ 0187 mutable RhoDMatrix rho_; 0188 0189 /** 0190 * Polarization vectors for the ecay products 0191 */ 0192 mutable vector<Helicity::LorentzPolarizationVector> vectors_[2]; 0193 }; 0194 0195 } 0196 0197 #endif /* HERWIG_ScalarVectorVectorDecayer_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|