Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:02

0001 // -*- C++ -*-
0002 //
0003 // PScalar4FermionsDecayer.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_PScalar4FermionsDecayer_H
0010 #define HERWIG_PScalar4FermionsDecayer_H
0011 // This is the declaration of the PScalar4FermionsDecayer class.
0012 
0013 #include "Herwig/Decay/DecayIntegrator.h"
0014 #include "Herwig/Decay/PhaseSpaceMode.h"
0015 #include "ThePEG/Helicity/LorentzSpinorBar.h"
0016 
0017 namespace Herwig {
0018 using namespace ThePEG;
0019 
0020 /** \ingroup Decay
0021  *
0022  *  The <code>PScalar4FermionsDecayer</code> class is designed for the
0023  *  decay of the neutral pion to four leptons, in this case electrons.
0024  *  The propagator for the off-shell boson is taken to be \f$\frac1{m^2}\f$. There
0025  *  is also the option of including a vector meson dominance  form-factor.
0026  *
0027  *  In this case the matrix element is
0028  *  \f[\mathcal{M} = \frac{g}{m^2_{f_1\bar{f_1}}m^2_{f_2\bar{f_2}}}
0029  *                   \epsilon^{\mu\nu\alpha\beta}    
0030  *                   \bar{u}(p_{f_1})\gamma_\mu    v(p_{\bar{f_1}})p_{f_1\bar{f_1}\nu}
0031  *                   \bar{u}(p_{f_2})\gamma_\alpha v(p_{\bar{f_2}}) p_{f_2\bar{f_2}\beta}
0032  *  \f]
0033  *  It includes the option of a vector meson dominance (VMD) type form factor  
0034  *  \f$\frac{-M^2+i\Gamma M}{(m^2_{f\bar{f}}-M^2+i\Gamma M)}\f$. In the case of identical
0035  *  fermions in also includes the exchange diagram.
0036  *  
0037  * @see DecayIntegrator
0038  * @see PScalarVectorVectorDecayer
0039  * @see PScalarVectorFermionsDecayer
0040  * 
0041  *  \author Peter Richardson
0042  *
0043  */
0044 class PScalar4FermionsDecayer: public DecayIntegrator {
0045 
0046 public:
0047 
0048   /**
0049    * Default constructor.
0050    */
0051   PScalar4FermionsDecayer();
0052   
0053   /**
0054    * Which of the possible decays is required
0055    * @param cc Is this mode the charge conjugate
0056    * @param parent The decaying particle
0057    * @param children The decay products
0058    */
0059   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0060              const tPDVector & children) const;
0061 
0062   /**
0063    * Return the matrix element squared for a given mode and phase-space channel.
0064    * @param ichan The channel we are calculating the matrix element for. 
0065    * @param part The decaying Particle.
0066    * @param outgoing The particles produced in the decay
0067    * @param momenta  The momenta of the particles produced in the decay
0068    * @param meopt Option for the calculation of the matrix element
0069    * @return The matrix element squared for the phase-space configuration.
0070    */
0071   double me2(const int ichan,const Particle & part,
0072          const tPDVector & outgoing,
0073          const vector<Lorentz5Momentum> & momenta,
0074          MEOption meopt) const;
0075 
0076   /**
0077    *   Construct the SpinInfos for the particles produced in the decay
0078    */
0079   virtual void constructSpinInfo(const Particle & part,
0080                  ParticleVector outgoing) const;
0081 
0082   /**
0083    * Output the setup information for the particle database
0084    * @param os The stream to output the information to
0085    * @param header Whether or not to output the information for MySQL
0086    */
0087   virtual void dataBaseOutput(ofstream & os,bool header) const;
0088 
0089 public:
0090 
0091   /** @name Functions used by the persistent I/O system. */
0092   //@{
0093   /**
0094    * Function used to write out object persistently.
0095    * @param os the persistent output stream written to.
0096    */
0097   void persistentOutput(PersistentOStream & os) const;
0098 
0099   /**
0100    * Function used to read in object persistently.
0101    * @param is the persistent input stream read from.
0102    * @param version the version number of the object when written.
0103    */
0104   void persistentInput(PersistentIStream & is, int version);
0105   //@}
0106 
0107   /**
0108    * Standard Init function used to initialize the interfaces.
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   /**
0135    * Initialize this object after the setup phase before saving and
0136    * EventGenerator to disk.
0137    * @throws InitException if object could not be initialized properly.
0138    */
0139   virtual void doinit();
0140 
0141   /**
0142    * Initialize this object to the begining of the run phase.
0143    */
0144   virtual void doinitrun();
0145   //@}
0146 
0147 private:
0148 
0149   /**
0150    * Private and non-existent assignment operator.
0151    */
0152   PScalar4FermionsDecayer & operator=(const PScalar4FermionsDecayer &) = delete;
0153 
0154 public:
0155 
0156   /**
0157    *   Set the parameters for a decay mode
0158    */
0159   string setUpDecayMode(string arg);
0160 
0161 private:
0162 
0163   /**
0164    * coupling for a decay
0165    */
0166   vector<InvEnergy> coupling_;
0167 
0168   /**
0169    * the PDG codes for the incoming particle
0170    */
0171   vector<int> incoming_;
0172 
0173   /**
0174    * the PDG codes for the first outgoing fermion
0175    */
0176   vector<pair<long,long> > outgoing_;
0177 
0178   /**
0179    * maximum weight for a decay
0180    */
0181   vector<double> maxweight_;
0182 
0183   /**
0184    * Include the VMD factor
0185    */
0186   vector<int> includeVMD_;
0187 
0188   /**
0189    * PDG code of the particle for the VMD factor
0190    */
0191   vector<int> VMDid_;
0192 
0193   /**
0194    * Mass of the particle for the VMD factor
0195    */
0196   vector<Energy> VMDmass_;
0197 
0198   /**
0199    * Width of the particle for the VMD factor
0200    */
0201   vector<Energy> VMDwidth_;
0202 
0203   /**
0204    *  Spin density matrix
0205    */
0206   mutable RhoDMatrix rho_;
0207 
0208   /**
0209    *  Spinors for the decay products
0210    */
0211   mutable vector<Helicity::LorentzSpinor   <SqrtEnergy> > wave_[2];
0212 
0213   /**
0214    *  Barred spinors for the decay products
0215    */
0216   mutable vector<Helicity::LorentzSpinorBar<SqrtEnergy> > wavebar_[2];
0217 };
0218 
0219 }
0220 
0221 
0222 #endif /* HERWIG_PScalar4FermionsDecayer_H */