|
|
|||
File indexing completed on 2026-08-06 09:24:03
0001 // -*- C++ -*- 0002 // 0003 // OniumToOniumPiPiDecayer.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_OniumToOniumPiPiDecayer_H 0010 #define HERWIG_OniumToOniumPiPiDecayer_H 0011 // 0012 // This is the declaration of the OniumToOniumPiPiDecayer 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 /** \ingroup Decay 0023 * The OniumToOniumPiPiDecayer class uses the matrix element of 0024 * Brown and Cahn PRL35, 1 (1975) for the decay of onium resonaces to 0025 * lighter states and pion pairs. The matrix element is given by 0026 * \f[\mathcal{M} = \epsilon'\cdot\epsilon\left[ 0027 * \mathcal{A}\left(q^2-2m^2_\pi\right)+\mathcal{B}E_1E_2\right] 0028 * +\mathcal{C}\left((\epsilon'\cdot q_1)(\epsilon\cdot q_2)+ 0029 * (\epsilon'\cdot q_2)(\epsilon\cdot q_1)\right),\f] 0030 * where \f$\epsilon'\f$ is the polarization vector of the decaying onium resonance, 0031 * \f$\epsilon\f$ is the polarization vector of the outgoing onium resonance, 0032 * \f$\mathcal{A}\f$, \f$\mathcal{B}\f$ and \f$\mathcal{C}\f$ are complex couplings, 0033 * \f$m_\pi\f$ is the pion mass, \f$E_{1,2}\f$ are the pion energies, \f$q_{1,2}\f$ 0034 * are the pion momenta and \f$q\f$ is the momentum of the \f$\pi\pi\f$ system. 0035 * 0036 * The results of hep-ex/9909038 are used for \f$\psi'\to J/\psi\f$ and arXiv:0706.2317 0037 * for \f$\Upsilon(3S)\f$ and \f$\Upsilon(2S)\f$ decays. 0038 * The remaining parameters are choosen 0039 * to approximately reproduce the distributions from hep-ex/0604031 and hep-ex/0508023. 0040 * 0041 * @see \ref OniumToOniumPiPiDecayerInterfaces "The interfaces" 0042 * defined for OniumToOniumPiPiDecayer. 0043 */ 0044 class OniumToOniumPiPiDecayer: public DecayIntegrator { 0045 0046 public: 0047 0048 /** 0049 * The default constructor. 0050 */ 0051 OniumToOniumPiPiDecayer() { 0052 // don't generate the intermediates in the phase-space 0053 generateIntermediates(false); 0054 } 0055 0056 /** 0057 * Which of the possible decays is required 0058 * @param cc Is this mode the charge conjugate 0059 * @param parent The decaying particle 0060 * @param children The decay products 0061 */ 0062 virtual int modeNumber(bool & cc, tcPDPtr parent, 0063 const tPDVector & children) const; 0064 0065 /** 0066 * Return the matrix element squared for a given mode and phase-space channel. 0067 * @param ichan The channel we are calculating the matrix element for. 0068 * @param part The decaying Particle. 0069 * @param outgoing The particles produced in the decay 0070 * @param momenta The momenta of the particles produced in the decay 0071 * @param meopt Option for the calculation of the matrix element 0072 * @return The matrix element squared for the phase-space configuration. 0073 */ 0074 double me2(const int ichan,const Particle & part, 0075 const tPDVector & outgoing, 0076 const vector<Lorentz5Momentum> & momenta, 0077 MEOption meopt) const; 0078 0079 /** 0080 * Construct the SpinInfos for the particles produced in the decay 0081 */ 0082 virtual void constructSpinInfo(const Particle & part, 0083 ParticleVector outgoing) const; 0084 0085 /** 0086 * Method to return an object to calculate the 3 body partial width. 0087 * @param dm The DecayMode 0088 * @return A pointer to a WidthCalculatorBase object capable of calculating the width 0089 */ 0090 virtual WidthCalculatorBasePtr threeBodyMEIntegrator(const DecayMode & dm) const; 0091 0092 /** 0093 * The matrix element to be integrated for the three-body decays as a function 0094 * of the invariant masses of pairs of the outgoing particles. 0095 * @param imode The mode for which the matrix element is needed. 0096 * @param q2 The scale, \e i.e. the mass squared of the decaying particle. 0097 * @param s3 The invariant mass squared of particles 1 and 2, \f$s_3=m^2_{12}\f$. 0098 * @param s2 The invariant mass squared of particles 1 and 3, \f$s_2=m^2_{13}\f$. 0099 * @param s1 The invariant mass squared of particles 2 and 3, \f$s_1=m^2_{23}\f$. 0100 * @param m1 The mass of the first outgoing particle. 0101 * @param m2 The mass of the second outgoing particle. 0102 * @param m3 The mass of the third outgoing particle. 0103 * @return The matrix element 0104 */ 0105 virtual double threeBodyMatrixElement(const int imode, const Energy2 q2, 0106 const Energy2 s3, const Energy2 s2, const 0107 Energy2 s1, const Energy m1, 0108 const Energy m2, const Energy m3) const; 0109 0110 /** 0111 * Output the setup information for the particle database 0112 * @param os The stream to output the information to 0113 * @param header Whether or not to output the information for MySQL 0114 */ 0115 virtual void dataBaseOutput(ofstream & os,bool header) const; 0116 0117 public: 0118 0119 /** @name Functions used by the persistent I/O system. */ 0120 //@{ 0121 /** 0122 * Function used to write out object persistently. 0123 * @param os the persistent output stream written to. 0124 */ 0125 void persistentOutput(PersistentOStream & os) const; 0126 0127 /** 0128 * Function used to read in object persistently. 0129 * @param is the persistent input stream read from. 0130 * @param version the version number of the object when written. 0131 */ 0132 void persistentInput(PersistentIStream & is, int version); 0133 //@} 0134 0135 /** 0136 * The standard Init function used to initialize the interfaces. 0137 * Called exactly once for each class by the class description system 0138 * before the main function starts or 0139 * when this class is dynamically loaded. 0140 */ 0141 static void Init(); 0142 0143 protected: 0144 0145 /** @name Clone Methods. */ 0146 //@{ 0147 /** 0148 * Make a simple clone of this object. 0149 * @return a pointer to the new object. 0150 */ 0151 virtual IBPtr clone() const {return new_ptr(*this);} 0152 0153 /** Make a clone of this object, possibly modifying the cloned object 0154 * to make it sane. 0155 * @return a pointer to the new object. 0156 */ 0157 virtual IBPtr fullclone() const {return new_ptr(*this);} 0158 //@} 0159 0160 protected: 0161 0162 /** @name Standard Interfaced functions. */ 0163 //@{ 0164 /** 0165 * Initialize this object after the setup phase before saving an 0166 * EventGenerator to disk. 0167 * @throws InitException if object could not be initialized properly. 0168 */ 0169 virtual void doinit(); 0170 0171 /** 0172 * Initialize this object to the begining of the run phase. 0173 */ 0174 virtual void doinitrun(); 0175 //@} 0176 0177 private: 0178 0179 /** 0180 * The assignment operator is private and must never be called. 0181 * In fact, it should not even be implemented. 0182 */ 0183 OniumToOniumPiPiDecayer & operator=(const OniumToOniumPiPiDecayer &) = delete; 0184 0185 public: 0186 0187 /** 0188 * Set the parameters for a decay mode 0189 */ 0190 string setUpDecayMode(string arg); 0191 0192 private: 0193 0194 /** 0195 * the PDG codes for the incoming onium resonace 0196 */ 0197 vector<long> incoming_; 0198 0199 /** 0200 * the PDG codes for the outgoing onium resonance 0201 */ 0202 vector<long> outgoing_; 0203 0204 /** 0205 * the maximum weight for the integration 0206 */ 0207 vector<double> maxWeight_; 0208 0209 /** 0210 * The couplings for the decays 0211 */ 0212 //@{ 0213 /** 0214 * Overall normalisation 0215 */ 0216 vector<double> coupling_; 0217 0218 /** 0219 * The complex \f$A\f$ coupling 0220 */ 0221 vector<complex<InvEnergy2> > cA_; 0222 0223 /** 0224 * The complex \f$B\f$ coupling 0225 */ 0226 vector<complex<InvEnergy2> > cB_; 0227 0228 /** 0229 * The complex \f$C\f$ coupling 0230 */ 0231 vector<complex<InvEnergy2> > cC_; 0232 //@} 0233 0234 /** 0235 * Spin density matrix 0236 */ 0237 mutable RhoDMatrix rho_; 0238 0239 /** 0240 * Polarization vectors for the incomng and outgoing onium resonances 0241 */ 0242 mutable vector<Helicity::LorentzPolarizationVector> vectors_[2]; 0243 0244 }; 0245 0246 } 0247 0248 #endif /* HERWIG_OniumToOniumPiPiDecayer_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|