Back to home page

EIC code displayed by LXR

 
 

    


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