Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:23:59

0001 // -*- C++ -*-
0002 #ifndef HERWIG_SemiLeptonicBaryonDecayer_H
0003 #define HERWIG_SemiLeptonicBaryonDecayer_H
0004 //
0005 // This is the declaration of the SemiLeptonicBaryonDecayer class.
0006 //
0007 #include "Herwig/Decay/DecayIntegrator.h"
0008 #include "Herwig/Decay/WeakCurrents/LeptonNeutrinoCurrent.h"
0009 #include "Herwig/Decay/FormFactors/BaryonFormFactor.h"
0010 #include "Herwig/Decay/PhaseSpaceMode.h"
0011 #include "ThePEG/Helicity/LorentzRSSpinorBar.h"
0012 
0013 namespace Herwig {
0014 using namespace ThePEG;
0015 
0016 /** \ingroup Decay
0017  *
0018  *  The <code>SemiLeptonicBaryonDecayer</code> class is designed for the
0019  *  semi-leptonic decay of the baryons. It combine the form-factors from a 
0020  *  class inheriting from the BaryonFormFactor class and the leptonic current.
0021  *
0022  *  The decays of spin-\f$\frac12\f$ baryons to spin-\f$\frac12\f$ and
0023  *  spin-\f$\frac32\f$ baryons are currently supported. The only other decays
0024  *  which seem to occur in nature is the semi-leptonic decay of the \f$\Omega^-\f$
0025  *  which is \f$\frac32\to\frac12\f$.
0026  *
0027  * @see BaryonFormFactor.
0028  * 
0029  */
0030 class SemiLeptonicBaryonDecayer: public DecayIntegrator {
0031 
0032 public:
0033 
0034   /**
0035    * Default constructor.
0036    */
0037   SemiLeptonicBaryonDecayer();
0038 
0039   /**
0040    * Check if this decayer can perfom the decay for a particular mode.
0041    * @param parent The decaying particle
0042    * @param children The decay products
0043    */
0044   virtual bool accept(tcPDPtr parent, const tPDVector & children) const;
0045 
0046   /**
0047    * Which of the possible decays is required
0048    * @param cc Is this mode the charge conjugate
0049    * @param parent The decaying particle
0050    * @param children The decay products
0051    */
0052   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0053              const tPDVector & children) const;
0054 
0055   /**
0056    * Return the matrix element squared for a given mode and phase-space channel.
0057    * @param ichan The channel we are calculating the matrix element for. 
0058    * @param part The decaying Particle.
0059    * @param outgoing The particles produced in the decay
0060    * @param momenta  The momenta of the particles produced in the decay
0061    * @param meopt Option for the calculation of the matrix element
0062    * @return The matrix element squared for the phase-space configuration.
0063    */
0064   double me2(const int ichan,const Particle & part,
0065          const tPDVector & outgoing,
0066          const vector<Lorentz5Momentum> & momenta,
0067          MEOption meopt) const;
0068 
0069   /**
0070    *   Construct the SpinInfos for the particles produced in the decay
0071    */
0072   virtual void constructSpinInfo(const Particle & part,
0073                  ParticleVector outgoing) const;
0074   
0075   /**
0076    * Output the setup information for the particle database
0077    * @param os The stream to output the information to
0078    * @param header Whether or not to output the information for MySQL
0079    */
0080   virtual void dataBaseOutput(ofstream & os,bool header) const;
0081 
0082 public:
0083 
0084   /** @name Functions used by the persistent I/O system. */
0085   //@{
0086   /**
0087    * Function used to write out object persistently.
0088    * @param os the persistent output stream written to.
0089    */
0090   void persistentOutput(PersistentOStream & os) const;
0091 
0092   /**
0093    * Function used to read in object persistently.
0094    * @param is the persistent input stream read from.
0095    * @param version the version number of the object when written.
0096    */
0097   void persistentInput(PersistentIStream & is, int version);
0098   //@}
0099   
0100   /**
0101    * Standard Init function used to initialize the interfaces.
0102    */
0103   static void Init();
0104   
0105 protected:
0106 
0107   /** @name Clone Methods. */
0108   //@{
0109   /**
0110    * Make a simple clone of this object.
0111    * @return a pointer to the new object.
0112    */
0113   virtual IBPtr clone() const {return new_ptr(*this);}
0114 
0115   /** Make a clone of this object, possibly modifying the cloned object
0116    * to make it sane.
0117    * @return a pointer to the new object.
0118    */
0119   virtual IBPtr fullclone() const {return new_ptr(*this);}
0120   //@}
0121 
0122 protected:
0123 
0124   /** @name Standard Interfaced functions. */
0125   //@{
0126   /**
0127    * Initialize this object after the setup phase before saving and
0128    * EventGenerator to disk.
0129    * @throws InitException if object could not be initialized properly.
0130    */
0131   virtual void doinit();
0132 
0133   /**
0134    * Initialize this object to the begining of the run phase.
0135    */
0136   virtual void doinitrun();
0137   //@}
0138 
0139 protected:
0140 
0141   /**
0142    * Matrix element for \f$\frac12\to\frac12\f$.
0143    * @param part The decaying Particle.
0144    * @param outgoing The particles produced in the decay
0145    * @param momenta  The momenta of the particles produced in the decay
0146    * @param meopt Option for the calculation of the matrix element
0147    * @return The matrix element squared for the phase-space configuration.
0148    */
0149   double halfHalf(const Particle & part,
0150           const tPDVector & outgoing,
0151           const vector<Lorentz5Momentum> & momenta,
0152           MEOption meopt) const;
0153 
0154   /**
0155    * Matrix element for \f$\frac12\to\frac32\f$.
0156    * @param part The decaying Particle.
0157    * @param outgoing The particles produced in the decay
0158    * @param momenta  The momenta of the particles produced in the decay
0159    * @param meopt Option for the calculation of the matrix element
0160    * @return The matrix element squared for the phase-space configuration.
0161    */
0162   double halfThreeHalf(const Particle & part,
0163                const tPDVector & outgoing,
0164                const vector<Lorentz5Momentum> & momenta,
0165                MEOption meopt) const;
0166 
0167 private:
0168 
0169   /**
0170    * Private and non-existent assignment operator.
0171    */
0172   SemiLeptonicBaryonDecayer & operator=(const SemiLeptonicBaryonDecayer &) = delete;
0173 
0174 private:
0175 
0176   /**
0177    * The current for the leptons
0178    */
0179   LeptonNeutrinoCurrentPtr _current;
0180 
0181   /**
0182    * form-factor
0183    */
0184   BaryonFormFactorPtr _form;
0185 
0186   /**
0187    * the maximum weight
0188    */
0189   vector<double> _maxwgt;
0190 
0191   /**
0192    * mapping of the mode to the form-factor
0193    */
0194   vector<int> _modemap; 
0195 
0196   /**
0197    *  Spin density matrix
0198    */
0199   mutable RhoDMatrix _rho;
0200 
0201   /**
0202    *   Spin-\f$\frac12\f$ spinors
0203    */
0204   mutable vector<LorentzSpinor<SqrtEnergy> > _inHalf;
0205 
0206   /**
0207    *   Spin-\f$\frac12\f$ barred spinors
0208    */
0209   mutable vector<LorentzSpinorBar<SqrtEnergy> > _inHalfBar;
0210 
0211   /**
0212    *   Spin-\f$\frac32\f$ spinors
0213    */
0214   mutable vector<LorentzRSSpinor<SqrtEnergy> > _inThreeHalf;
0215 
0216   /**
0217    *   Spin-\f$\frac32\f$ barred spinors
0218    */
0219   mutable vector<LorentzRSSpinorBar<SqrtEnergy> > _inThreeHalfBar;
0220 
0221   /**
0222    *  Constants for the mapping of the leptonic vector 
0223    */
0224   mutable vector<unsigned int> _constants;
0225 
0226   /**
0227    *  Spins of the particles
0228    */
0229   mutable vector<PDT::Spin> _ispin;
0230 
0231   /**
0232    *  Location of the outgoing baryon
0233    */
0234   mutable unsigned int _ibar;
0235 };
0236 
0237 }
0238 
0239 
0240 #endif /* HERWIG_SemiLeptonicBaryonDecayer_H */