Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // SemiLeptonicScalarDecayer.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_SemiLeptonicScalarDecayer_H
0010 #define HERWIG_SemiLeptonicScalarDecayer_H
0011 //
0012 // This is the declaration of the SemiLeptonicScalarDecayer class.
0013 //
0014 #include "Herwig/Decay/DecayIntegrator.h"
0015 #include "Herwig/Decay/FormFactors/ScalarFormFactor.h"
0016 #include "Herwig/Decay/WeakCurrents/LeptonNeutrinoCurrent.h"
0017 #include "ThePEG/Helicity/LorentzTensor.h"
0018 
0019 namespace Herwig {
0020 using namespace ThePEG;
0021 
0022 /** \ingroup Decay
0023  *
0024  *  The <code>SemiLeptonicScalarDecayer</code> class is designed for the
0025  *  semileptonic decay of a (pesudo)scalar meson to another meson and a
0026  *  lepton/neutino pair.
0027  *
0028  *  This class implements the matrix element in a general form with form-factors
0029  *  for the hadronic current. These form-factor are specified using a ScalarFormFactor
0030  *  class and the leptonic part of the decay uses the LeptonNeutrinoCurrent.
0031  * 
0032  * @see DecayIntegrator
0033  * @see ScalarFormFactor
0034  * @see LeptonNeutrinoCurrent 
0035  *
0036  */
0037 class SemiLeptonicScalarDecayer: public DecayIntegrator {
0038 
0039 public:
0040 
0041   /**
0042    * Default constructor.
0043    */
0044   SemiLeptonicScalarDecayer();
0045   
0046   /**
0047    * Check if this decayer can perfom the decay for a particular mode.
0048    * Uses the modeNumber member but can be overridden
0049    * @param parent The decaying particle
0050    * @param children The decay products
0051    */
0052   virtual bool accept(tcPDPtr parent, const tPDVector & children) const;
0053   
0054   /**
0055    * Which of the possible decays is required
0056    * @param cc Is this mode the charge conjugate
0057    * @param parent The decaying particle
0058    * @param children The decay products
0059    */
0060   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0061              const tPDVector & children) const ;
0062 
0063   /**
0064    * Return the matrix element squared for a given mode and phase-space channel.
0065    * @param ichan The channel we are calculating the matrix element for. 
0066    * @param part The decaying Particle.
0067    * @param outgoing The particles produced in the decay
0068    * @param momenta  The momenta of the particles produced in the decay
0069    * @param meopt Option for the calculation of the matrix element
0070    * @return The matrix element squared for the phase-space configuration.
0071    */
0072   double me2(const int ichan,const Particle & part,
0073          const tPDVector & outgoing,
0074          const vector<Lorentz5Momentum> & momenta,
0075          MEOption meopt) const;
0076 
0077   /**
0078    *   Construct the SpinInfos for the particles produced in the decay
0079    */
0080   virtual void constructSpinInfo(const Particle & part,
0081                  ParticleVector outgoing) const;
0082 
0083   /**
0084    * Output the setup information for the particle database
0085    * @param os The stream to output the information to
0086    * @param header Whether or not to output the information for MySQL
0087    */
0088   virtual void dataBaseOutput(ofstream & os,bool header) const;
0089 
0090 public:
0091 
0092   /** @name Functions used by the persistent I/O system. */
0093   //@{
0094   /**
0095    * Function used to write out object persistently.
0096    * @param os the persistent output stream written to.
0097    */
0098   void persistentOutput(PersistentOStream & os) const;
0099 
0100   /**
0101    * Function used to read in object persistently.
0102    * @param is the persistent input stream read from.
0103    * @param version the version number of the object when written.
0104    */
0105   void persistentInput(PersistentIStream & is, int version);
0106   //@}
0107 
0108   /**
0109    * Standard Init function used to initialize the interfaces.
0110    */
0111   static void Init();
0112 
0113 protected:
0114 
0115   /** @name Clone Methods. */
0116   //@{
0117   /**
0118    * Make a simple clone of this object.
0119    * @return a pointer to the new object.
0120    */
0121   virtual IBPtr clone() const {return new_ptr(*this);}
0122 
0123   /** Make a clone of this object, possibly modifying the cloned object
0124    * to make it sane.
0125    * @return a pointer to the new object.
0126    */
0127   virtual IBPtr fullclone() const {return new_ptr(*this);}
0128   //@}
0129 
0130 protected:
0131 
0132   /** @name Standard Interfaced functions. */
0133   //@{
0134 
0135   /**
0136    * Initialize this object after the setup phase before saving and
0137    * EventGenerator to disk.
0138    * @throws InitException if object could not be initialized properly.
0139    */
0140   virtual void doinit();
0141 
0142   /**
0143    * Initialize this object to the begining of the run phase.
0144    */
0145   virtual void doinitrun();
0146   //@}
0147 
0148 private:
0149 
0150   /**
0151    * Private and non-existent assignment operator.
0152    */
0153   SemiLeptonicScalarDecayer & operator=(const SemiLeptonicScalarDecayer &) = delete;
0154 
0155 private:
0156 
0157   /**
0158    * The leptonic current
0159    */
0160   LeptonNeutrinoCurrentPtr _current;
0161 
0162   /**
0163    * The form factor
0164    */
0165   ScalarFormFactorPtr _form;
0166 
0167   /**
0168    * the maximum weight for the integration of a given decay
0169    */
0170   vector<double> _maxwgt;
0171 
0172   /**
0173    * mapping of the mode to the form factor
0174    */
0175   vector<int> _modemap;
0176 
0177   /**
0178    *  Spin density matrix
0179    */
0180   mutable RhoDMatrix _rho;
0181 
0182   /**
0183    *  Polarization vectors for the decay products
0184    */
0185   mutable vector<Helicity::LorentzPolarizationVector> _vectors;
0186 
0187   /**
0188    *  Polarization vectors for the decay products
0189    */
0190   mutable vector<Helicity::LorentzTensor<double> > _tensors;
0191 
0192   /**
0193    *  Constants for the mapping of the leptonic current
0194    */
0195   mutable vector<unsigned int> _constants;
0196 
0197   /**
0198    *  Spins of the particles
0199    */
0200   mutable vector<PDT::Spin> _ispin;
0201 
0202   /**
0203    *  Location of the outgoing meson
0204    */
0205   mutable unsigned int _imes;
0206 };
0207 
0208 }
0209 
0210 
0211 #endif /* HERWIG_SemiLeptonicScalarDecayer_H */