Back to home page

EIC code displayed by LXR

 
 

    


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 */