Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // TauDecayer.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_TauDecayer_H
0010 #define HERWIG_TauDecayer_H
0011 // This is the declaration of the TauDecayer class.
0012 
0013 #include "Herwig/Decay/DecayIntegrator.h"
0014 #include "Herwig/Decay/PhaseSpaceMode.h"
0015 #include "ThePEG/Helicity/LorentzPolarizationVector.h"
0016 #include "Herwig/Decay/WeakCurrents/WeakCurrent.h"
0017 #include "ThePEG/Helicity/LorentzSpinor.h"
0018 #include "ThePEG/Helicity/LorentzSpinorBar.h"
0019 
0020 namespace Herwig {
0021 using namespace ThePEG;
0022 using ThePEG::Helicity::LorentzPolarizationVector;
0023 
0024 
0025 /** \ingroup Decay
0026  *
0027  *  The TauDecayer class performs the decay of the \f$\tau\f$. The matrix element
0028  *  for \f$\tau\f$ decay can be split into a leptonic current describing the
0029  *  weak decay of the decay to a neutrino and a highly virtual \f$W\f$ combined
0030  *  with a hadronic current for the virtual \f$W\f$ decay.
0031  *
0032  *  The matrix element has the form
0033  *  \f[\mathcal{M} = \frac{G_F}{\sqrt{2}}\bar{u}(p_{\nu_\tau})
0034  *   \gamma^\mu\left(1-\gamma^5\right)u(p_{\tau}) J_\mu,\f]
0035  *  where
0036  * - \f$G_F\f$ is the Fermi constant,
0037  * - \f$p_{\nu_\tau}\f$ is the momentum of the \f$\tau\f$ neutrino,
0038  * - \f$p_{\tau}\f$ is the momentum of the \f$\tau\f$,
0039  * - \f$ J_\mu\f$ is the hadronic current.
0040  *
0041  *  The leptonic part of this matrix element is implemented in this class 
0042  *  together with a WeakCurrent member which calculates the hadronic
0043  *  current  \f$ J_\mu\f$. This allows a range of \f$\tau\f$ decays to be
0044  *  constructed via the repository using the interfaces.
0045  *
0046  * @see DecayIntegrator.
0047  * @see WeakCurrent
0048  * 
0049  */
0050 class TauDecayer: public DecayIntegrator {
0051 
0052 public:
0053 
0054   /**
0055    * Default constructor.
0056    */
0057   TauDecayer() : polOpt_(false), tauMpol_(0.), tauPpol_(0.) {
0058     generateIntermediates(true);
0059   }
0060 
0061   /**
0062    * Check if this decayer can perfom the decay for a particular mode.
0063    * @param parent The decaying particle
0064    * @param children The decay products
0065    */
0066   virtual bool accept(tcPDPtr parent, const tPDVector & children) const;
0067 
0068   /**
0069    * Which of the possible decays is required
0070    * @param cc Is this mode the charge conjugate
0071    * @param parent The decaying particle
0072    * @param children The decay products
0073    */
0074   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0075              const tPDVector & children) const;
0076 
0077   /**
0078    * Return the matrix element squared for a given mode and phase-space channel.
0079    * @param ichan The channel we are calculating the matrix element for. 
0080    * @param part The decaying Particle.
0081    * @param outgoing The particles produced in the decay
0082    * @param momenta  The momenta of the particles produced in the decay
0083    * @param meopt Option for the calculation of the matrix element
0084    * @return The matrix element squared for the phase-space configuration.
0085    */
0086   double me2(const int ichan,const Particle & part,
0087          const tPDVector & outgoing,
0088          const vector<Lorentz5Momentum> & momenta,
0089          MEOption meopt) const;
0090 
0091   /**
0092    *   Construct the SpinInfos for the particles produced in the decay
0093    */
0094   virtual void constructSpinInfo(const Particle & part,
0095                  ParticleVector outgoing) const;
0096 
0097   /**
0098    * Output the setup information for the particle database.
0099    */
0100   void dataBaseOutput(ofstream & os,bool header) const;
0101 
0102 public:
0103 
0104   /** @name Functions used by the persistent I/O system. */
0105   //@{
0106   /**
0107    * Function used to write out object persistently.
0108    * @param os the persistent output stream written to.
0109    */
0110   void persistentOutput(PersistentOStream & os) const;
0111 
0112   /**
0113    * Function used to read in object persistently.
0114    * @param is the persistent input stream read from.
0115    * @param version the version number of the object when written.
0116    */
0117   void persistentInput(PersistentIStream & is, int version);
0118   //@}
0119 
0120   /**
0121    * Standard Init function used to initialize the interfaces.
0122    */
0123   static void Init();
0124 
0125 protected:
0126   
0127   /** @name Clone Methods. */
0128   //@{
0129   /**
0130    * Make a simple clone of this object.
0131    * @return a pointer to the new object.
0132    */
0133   virtual IBPtr clone() const {return new_ptr(*this);}
0134 
0135   /** Make a clone of this object, possibly modifying the cloned object
0136    * to make it sane.
0137    * @return a pointer to the new object.
0138    */
0139   virtual IBPtr fullclone() const {return new_ptr(*this);}
0140   //@}
0141 
0142 protected:
0143 
0144   /** @name Standard Interfaced functions. */
0145   //@{
0146 
0147   /**
0148    * Initialize this object after the setup phase before saving and
0149    * EventGenerator to disk.
0150    * @throws InitException if object could not be initialized properly.
0151    */
0152   virtual void doinit();
0153 
0154   /**
0155    * Initialize this object to the begining of the run phase.
0156    */
0157   virtual void doinitrun();
0158   //@}
0159 
0160 private:
0161 
0162   /**
0163    * Private and non-existent assignment operator.
0164    */
0165   TauDecayer & operator=(const TauDecayer &) = delete;
0166 
0167 private:
0168 
0169   /**
0170    * mapping of the modes to the currents
0171    */
0172   vector<unsigned int> modeMap_;
0173 
0174   /**
0175    * the hadronic current
0176    */
0177   WeakCurrentPtr current_;
0178 
0179   /**
0180    * location of the weights
0181    */
0182   vector<int> wgtLoc_;
0183 
0184   /**
0185    * the maximum weight
0186    */
0187   vector<double> wgtMax_;
0188 
0189   /**
0190    *  The weights for the different channels
0191    */
0192   vector<double> weights_;
0193 
0194   /**
0195    *  The spinors for the decaying particle
0196    */
0197   mutable vector<LorentzSpinor   <SqrtEnergy> > inSpin_;
0198 
0199   /**
0200    *  Barred spinors for the deaying particle
0201    */
0202   mutable vector<LorentzSpinorBar<SqrtEnergy> > inBar_ ;
0203 
0204   /**
0205    *  Rho matrix
0206    */
0207   mutable RhoDMatrix rho_;
0208 
0209   /**
0210    *  Maps for the vectors
0211    */
0212   mutable vector<unsigned int> constants_;
0213 
0214   /**
0215    *  Spins of the particles
0216    */
0217   mutable vector<PDT::Spin> iSpin_; 
0218 
0219   /**
0220    *  Option to force the polarizations of the tau leptons
0221    */
0222   bool polOpt_;
0223 
0224   /**
0225    *  Polarization for \f$\tau^-\f$
0226    */
0227   double tauMpol_;
0228 
0229   /**
0230    *  Polarization of \f$\tau^+\f$
0231    */
0232   double tauPpol_;
0233 };
0234 
0235 }
0236 
0237 
0238 #endif /* HERWIG_TauDecayer_H */