Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // PScalarLeptonNeutrinoDecayer.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_PScalarLeptonNeutrinoDecayer_H
0010 #define HERWIG_PScalarLeptonNeutrinoDecayer_H
0011 // This is the declaration of the PScalarLeptonNeutrinoDecayer class.
0012 
0013 #include "Herwig/Decay/DecayIntegrator.h"
0014 #include "ThePEG/Helicity/LorentzSpinorBar.h"
0015 
0016 namespace Herwig {
0017 using namespace ThePEG;
0018 
0019 /**  \ingroup Decay
0020  *
0021  * The PScalarLeptonNeutrinoDecayer class is designed for the decay of 
0022  * pseudoscalar mesons to a lepton and a neutrino. Although it can be used
0023  * for charged pion and kaon decays it is mainly intended for the leptonic
0024  * decays of bottom and charm mesons.
0025  *
0026  *  The matrix element is given by 
0027  * \f[\mathcal{M} = \frac1{\sqrt{2}}f_PG_FV_{CKM}m_l\bar{u}(p_{\ell})(1-\gamma_5)v(p_\nu),\f]
0028  * where
0029  * - \f$f_P\f$ is the pseudoscalar decay constant.
0030  * - \f$G_F\f$ is the Fermi constant
0031  * - \f$V_{CKM}\f$ is the relevant CKM matrix element
0032  * - \f$p_\ell\f$ is the momentum of the charged lepton
0033  * - \f$p_\nu\f$ is the momentum of the neutrino
0034  *
0035  * @see DecayIntegrator
0036  * 
0037  */
0038 class PScalarLeptonNeutrinoDecayer: public DecayIntegrator {
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    * Output the setup information for the particle database
0071    * @param os The stream to output the information to
0072    * @param header Whether or not to output the information for MySQL
0073    */
0074   virtual void dataBaseOutput(ofstream & os,bool header) const;
0075 
0076 public:
0077 
0078   /** @name Functions used by the persistent I/O system. */
0079   //@{
0080   /**
0081    * Function used to write out object persistently.
0082    * @param os the persistent output stream written to.
0083    */
0084   void persistentOutput(PersistentOStream & os) const;
0085 
0086   /**
0087    * Function used to read in object persistently.
0088    * @param is the persistent input stream read from.
0089    * @param version the version number of the object when written.
0090    */
0091   void persistentInput(PersistentIStream & is, int version);
0092   //@}
0093 
0094   /**
0095    * Standard Init function used to initialize the interfaces.
0096    */
0097   static void Init();
0098 
0099 protected:
0100 
0101   /** @name Clone Methods. */
0102   //@{
0103   /**
0104    * Make a simple clone of this object.
0105    * @return a pointer to the new object.
0106    */
0107   virtual IBPtr clone() const {return new_ptr(*this);}
0108 
0109   /** Make a clone of this object, possibly modifying the cloned object
0110    * to make it sane.
0111    * @return a pointer to the new object.
0112    */
0113   virtual IBPtr fullclone() const {return new_ptr(*this);}
0114   //@}
0115   
0116 protected:
0117   
0118   /** @name Standard Interfaced functions. */
0119   //@{
0120 
0121   /**
0122    * Initialize this object after the setup phase before saving and
0123    * EventGenerator to disk.
0124    * @throws InitException if object could not be initialized properly.
0125    */
0126   virtual void doinit();
0127 
0128   /**
0129    * Initialize this object to the begining of the run phase.
0130    */
0131   virtual void doinitrun();
0132   //@}
0133 
0134 public:
0135 
0136   /**
0137    *   Set the parameters for a decay mode
0138    */
0139   string setUpDecayMode(string arg);
0140 
0141 private:
0142 
0143   /**
0144    * Private and non-existent assignment operator.
0145    */
0146   PScalarLeptonNeutrinoDecayer & operator=(const PScalarLeptonNeutrinoDecayer &) = delete;
0147 
0148 private:
0149 
0150   /**
0151    * the PDG code for the incoming particle
0152    */
0153   vector<int> incoming_;
0154 
0155   /**
0156    * the meson decay constant for a particular particle multiplied by the CKM matrix
0157    * element, \e i.e. \f$f_pV_{CKM}\f$
0158    */
0159   vector<Energy> decayConstant_;
0160 
0161   /**
0162    * which outgoing leptons are allowed for a particular decay
0163    */
0164   vector<unsigned int> leptons_;
0165 
0166   /**
0167    * The maximum weight for the integration of decay to (\f$e\nu_e\f$, \f$\mu\nu_\mu\f$,\f$\tau\nu_\tau\f$).
0168    */
0169   vector<array<double,3> > maxWeight_;
0170 
0171   /**
0172    *  Spin density matrix
0173    */
0174   mutable RhoDMatrix rho_;
0175 
0176   /**
0177    *  Spinors for the decay products
0178    */
0179   mutable vector<Helicity::LorentzSpinor   <SqrtEnergy> > wave_;
0180 
0181   /**
0182    *  barred spinors for the decay products
0183    */
0184   mutable vector<Helicity::LorentzSpinorBar<SqrtEnergy> > wavebar_;
0185 
0186 };
0187 
0188 }
0189 
0190 
0191 #endif /* HERWIG_PScalarLeptonNeutrinoDecayer_H */