Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // LeptonNeutrinoCurrent.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_LeptonNeutrinoCurrent_H
0010 #define HERWIG_LeptonNeutrinoCurrent_H
0011 //
0012 // This is the declaration of the LeptonNeutrinoCurrent class.
0013 //
0014 #include "WeakCurrent.h"
0015 #include "LeptonNeutrinoCurrent.fh"
0016 #include "ThePEG/Helicity/LorentzSpinorBar.h"
0017 
0018 namespace Herwig {
0019 using namespace ThePEG;
0020 using ThePEG::Helicity::LorentzPolarizationVector;
0021 
0022 /** \ingroup Decay
0023  *
0024  *  This class implements the weak decay current for a lepton and a neutrino.
0025  *  In this case the current is given by
0026  *  \f$J^\mu = \bar{u}(p_\nu)\gamma^\mu(1-\gamma_5)u(p_\ell)\f$ 
0027  *  where
0028  *  - \f$p_\nu\f$  is the momentum of the neutrino,
0029  *  - \f$p_\ell\f$ is the momentum of the charged lepton. 
0030  *
0031  * @see WeakCurrent.
0032  * 
0033  */
0034 class LeptonNeutrinoCurrent: public WeakCurrent {
0035 
0036 public:
0037 
0038   /**
0039    * Default constructor
0040    */
0041   LeptonNeutrinoCurrent() {
0042     // set up the modes in the base class
0043     addDecayMode(11,-12);
0044     addDecayMode(13,-15);
0045     addDecayMode(15,-16);
0046     setInitialModes(3);
0047   }
0048 
0049 public:
0050 
0051   /** @name Methods for the construction of the phase space integrator. */
0052   //@{
0053   /**
0054    * Complete the construction of the decay mode for integration.classes inheriting
0055    * from this one.
0056    * This method is purely virtual and must be implemented in the classes inheriting
0057    * from WeakCurrent.
0058    * @param icharge   The total charge of the outgoing particles in the current.
0059    * @param resonance If specified only include terms with this particle
0060    * @param flavour Information on the required flavours of the quarks
0061    * @param imode     The mode in the current being asked for.
0062    * @param mode      The phase space mode for the integration
0063    * @param iloc      The location of the of the first particle from the current in
0064    *                  the list of outgoing particles.
0065    * @param ires      The location of the first intermediate for the current.
0066    * @param phase     The prototype phase space channel for the integration.
0067    * @param upp       The maximum possible mass the particles in the current are
0068    *                  allowed to have.
0069    * @return Whether the current was sucessfully constructed.
0070    */
0071   virtual bool createMode(int icharge, tcPDPtr resonance,
0072               FlavourInfo flavour,
0073               unsigned int imode,PhaseSpaceModePtr mode,
0074               unsigned int iloc,int ires,
0075               PhaseSpaceChannel phase, Energy upp );
0076 
0077   /**
0078    * The particles produced by the current. This just returns the leptons.
0079    * @param icharge The total charge of the particles in the current.
0080    * @param imode The mode for which the particles are being requested
0081    * @param iq The PDG code for the quark
0082    * @param ia The PDG code for the antiquark
0083    * @return The external particles for the current.
0084    */
0085   virtual tPDVector particles(int icharge, unsigned int imode, int iq, int ia);
0086   //@}
0087 
0088   /**
0089    * Hadronic current. This method is purely virtual and must be implemented in
0090    * all classes inheriting from this one.
0091    * @param resonance If specified only include terms with this particle
0092    * @param flavour Information on the required flavours of the quarks
0093    * @param imode The mode
0094    * @param ichan The phase-space channel the current is needed for.
0095    * @param scale The invariant mass of the particles in the current.
0096    * @param outgoing The particles produced in the decay
0097    * @param momenta  The momenta of the particles produced in the decay
0098    * @param meopt Option for the calculation of the matrix element
0099    * @return The current. 
0100    */
0101   virtual vector<LorentzPolarizationVectorE> 
0102   current(tcPDPtr resonance,
0103       FlavourInfo flavour,
0104       const int imode, const int ichan,Energy & scale,
0105       const tPDVector & outgoing,
0106       const vector<Lorentz5Momentum> & momenta,
0107       DecayIntegrator::MEOption meopt) const;
0108 
0109   /**
0110    *   Construct the SpinInfo for the decay products
0111    */
0112   void constructSpinInfo(ParticleVector decay) const;
0113 
0114   /**
0115    * Accept the decay. Checks that this is one of the allowed modes.
0116    * @param id The id's of the particles in the current.
0117    * @return Can this current have the external particles specified.
0118    */
0119   virtual bool accept(vector<int> id);
0120 
0121   /**
0122    * Returns the decay mode number for a given set of particles in the current. 
0123    * @param id The id's of the particles in the current.
0124    * @return The number of the mode
0125    */
0126   virtual unsigned int decayMode(vector<int> id);
0127 
0128   /**
0129    * Output the setup information for the particle database
0130    * @param os The stream to output the information to
0131    * @param header Whether or not to output the information for MySQL
0132    * @param create Whether or not to add a statement creating the object
0133    */
0134   virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
0135 
0136 public:
0137 
0138   /**
0139    * Standard Init function used to initialize the interfaces.
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 private:
0161 
0162   /**
0163    * Private and non-existent assignment operator.
0164    */
0165   LeptonNeutrinoCurrent & operator=(const LeptonNeutrinoCurrent &) = delete;
0166 
0167 private:
0168   
0169   /**
0170    *  Spinors for the decay products
0171    */
0172   mutable vector<Helicity::LorentzSpinor   <SqrtEnergy> > wave_;
0173 
0174   /**
0175    *  barred spinors for the decay products
0176    */
0177   mutable vector<Helicity::LorentzSpinorBar<SqrtEnergy> > wavebar_;
0178   
0179 };
0180 
0181 }
0182 
0183 
0184 #endif /* HERWIG_LeptonNeutrinoCurrent_H */