Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_Baryon1MesonDecayerBase_H
0003 #define HERWIG_Baryon1MesonDecayerBase_H
0004 //
0005 // This is the declaration of the Baryon1MesonDecayerBase class.
0006 //
0007 #include "Herwig/Decay/DecayIntegrator.h"
0008 #include "Herwig/PDT/BaryonWidthGenerator.fh"
0009 #include "Herwig/Decay/PhaseSpaceMode.h"
0010 #include "ThePEG/Helicity/LorentzSpinor.h"
0011 #include "ThePEG/Helicity/LorentzSpinorBar.h"
0012 #include "ThePEG/Helicity/LorentzRSSpinor.h"
0013 #include "ThePEG/Helicity/LorentzRSSpinorBar.h"
0014 #include "Baryon1MesonDecayerBase.fh"
0015 
0016 namespace Herwig {
0017 using namespace ThePEG;
0018 
0019 /** \ingroup Decay
0020  *
0021  *  The <code>Baryon1MesonDecayerBase</code> class is the base class for the decay of
0022  *  a baryon to another baryon and a pseudoscalar or vector meson.
0023  *  All the matrix elements involving either a spin-1/2 or spin-3/2 baryons are 
0024  *  now implemented apart from \f$\frac32\to\frac32+1\f$. The matrix elements
0025  *  are implemented in a general form with general couplings which must be
0026  *  supplied in classes inheriting from the one by implementing one of the coupling
0027  *  members.
0028  *
0029  *  - The matrix element for \f$\frac12\to\frac12+0\f$
0030  *    \f[\mathcal{M} = \bar{u}(p_1)(A+B\gamma_5)u(p_0)\f]
0031  *  - The matrix element for \f$\frac12\to\frac12+1\f$ 
0032  *    \f[\mathcal{M} = \bar{u}(p_1)\epsilon^{*\beta}\left[
0033  *           \gamma_\beta(A_1+B_1\gamma_5)
0034  *            +p_{0\beta}(A_2+B_2\gamma_5)\right]u(p_0)\f]
0035  *  - The matrix element for \f$\frac12\to\frac32+0\f$
0036  *    \f[\bar{u}^\alpha(p_1) p_{0\alpha}\left[A+B\gamma_5\right]u(p_0)\f]
0037  *  - The matrix element for \f$\frac12\to\frac32+1\f$
0038  *    \f[\bar{u}^\alpha(p_1)\epsilon^{*\beta}\left[
0039  *      g_{\alpha\beta}(A_1+B_1\gamma_5)
0040  *     +p_{0\alpha}(A_2+B_2\gamma_5)
0041  *     +p_{0\alpha}p_{0\beta}(A_3+B_3\gamma_5)
0042  *      \right]u(p_0)\f]
0043  *  - The matrix element for \f$\frac32\to\frac12+0\f$
0044  *    \f[\bar{u}(p_1) p_{1\alpha}\left[A+B\gamma_5\right]u^\alpha(p_0)\f]
0045  *  - The matrix element for \f$\frac32\to\frac12+1\f$
0046  *    \f[\bar{u}(p_1)\epsilon^{*\beta}\left[
0047  *      g_{\alpha\beta}(A_1+B_1\gamma_5)
0048  *     +p_{1\alpha}(A_2+B_2\gamma_5)
0049  *     +p_{1\alpha}p_{0\beta}(A_3+B_3\gamma_5)
0050  *      \right]u^\alpha(p_0)\f]
0051  *  - The matrix element for \f$\frac32\to\frac32+0\f$
0052  *   \f[\bar{u}^\alpha(p_1)\left[(A_1+B_1\gamma_5)g_{\alpha\beta}
0053  *      +p_{0\alpha}p_{1\beta}(A_2+B_2\gamma_5)\right]u^\beta(p_0)\f]
0054  *
0055  * @see DecayIntegrator
0056  */
0057 class Baryon1MesonDecayerBase: public DecayIntegrator {
0058 
0059   /**
0060    *  The BaryonWidthGenerator is a friend to get access to the couplings
0061    */
0062   friend class BaryonWidthGenerator; 
0063 
0064 public:
0065 
0066 
0067   /**
0068    * Return the matrix element squared for a given mode and phase-space channel.
0069    * @param ichan The channel we are calculating the matrix element for. 
0070    * @param part The decaying Particle.
0071    * @param outgoing The particles produced in the decay
0072    * @param momenta  The momenta of the particles produced in the decay
0073    * @param meopt Option for the calculation of the matrix element
0074    * @return The matrix element squared for the phase-space configuration.
0075    */
0076   double me2(const int ichan,const Particle & part,
0077          const tPDVector & outgoing,
0078          const vector<Lorentz5Momentum> & momenta,
0079          MEOption meopt) const;
0080 
0081   /**
0082    *   Construct the SpinInfos for the particles produced in the decay
0083    */
0084   virtual void constructSpinInfo(const Particle & part,
0085                  ParticleVector outgoing) const;
0086 
0087   /**
0088    * Specify the \f$1\to2\f$ matrix element to be used in the running width calculation.
0089    * @param dm The DecayMode
0090    * @param mecode The code for the matrix element as described
0091    *               in the GenericWidthGenerator class.
0092    * @param coupling The coupling for the matrix element.
0093    * @return True or False if this mode can be handled.
0094    */
0095   virtual bool twoBodyMEcode(const DecayMode & dm, int & mecode,
0096                  double & coupling) const;
0097 
0098   /**
0099    * Output the setup information for the particle database
0100    * @param os The stream to output the information to
0101    * @param header Whether or not to output the information for MySQL
0102    */
0103   virtual void dataBaseOutput(ofstream & os,bool header) const;
0104 
0105 protected:
0106 
0107   /**
0108    *  Coupling Members.
0109    */
0110   //@{
0111   /**
0112    * Couplings for spin-\f$\frac12\f$ to spin-\f$\frac12\f$ and a scalar.
0113    * This method must be implemented in any class inheriting from this one
0114    * which includes \f$\frac12\to\frac12+0\f$ decays. 
0115    * @param imode The mode
0116    * @param m0 The mass of the decaying particle.
0117    * @param m1 The mass of the outgoing baryon.
0118    * @param m2 The mass of the outgoing meson.
0119    * @param A The coupling \f$A\f$ described above.
0120    * @param B The coupling \f$B\f$ described above.
0121    */
0122   virtual void halfHalfScalarCoupling(int imode, Energy m0, Energy m1, Energy m2,
0123                       Complex& A,Complex& B) const;
0124 
0125   /**
0126    * Couplings for spin-\f$\frac12\f$ to spin-\f$\frac12\f$ and a vector.
0127    * This method must be implemented in any class inheriting from this one
0128    * which includes \f$\frac12\to\frac12+1\f$ decays. 
0129    * @param imode The mode
0130    * @param m0 The mass of the decaying particle.
0131    * @param m1 The mass of the outgoing baryon.
0132    * @param m2 The mass of the outgoing meson.
0133    * @param A1 The coupling \f$A_1\f$ described above.
0134    * @param A2 The coupling \f$A_2\f$ described above.
0135    * @param B1 The coupling \f$B_1\f$ described above.
0136    * @param B2 The coupling \f$B_2\f$ described above.
0137    */
0138   virtual void halfHalfVectorCoupling(int imode, Energy m0, Energy m1, Energy m2,
0139                       Complex& A1,Complex& A2,
0140                       Complex& B1,Complex& B2) const;
0141 
0142   /**
0143    * Couplings for spin-\f$\frac12\f$ to spin-\f$\frac32\f$ and a scalar.
0144    * This method must be implemented in any class inheriting from this one
0145    * which includes \f$\frac12\to\frac32+0\f$ or \f$\frac32\to\frac12+0\f$ decays. 
0146    * @param imode The mode
0147    * @param m0 The mass of the decaying particle.
0148    * @param m1 The mass of the outgoing baryon.
0149    * @param m2 The mass of the outgoing meson.
0150    * @param A The coupling \f$A\f$ described above.
0151    * @param B The coupling \f$B\f$ described above.
0152    */
0153   virtual void halfThreeHalfScalarCoupling(int imode, Energy m0, Energy m1, Energy m2,
0154                        Complex& A,Complex& B) const;
0155 
0156   /**
0157    * Couplings for spin-\f$\frac12\f$ to spin-\f$\frac32\f$ and a vector.
0158    * This method must be implemented in any class inheriting from this one
0159    * which includes \f$\frac12\to\frac32+1\f$ or \f$\frac32\to\frac12+1\f$ decays. 
0160    * @param imode The mode
0161    * @param m0 The mass of the decaying particle.
0162    * @param m1 The mass of the outgoing baryon.
0163    * @param m2 The mass of the outgoing meson.
0164    * @param A1 The coupling \f$A_1\f$ described above.
0165    * @param A2 The coupling \f$A_2\f$ described above.
0166    * @param A3 The coupling \f$A_3\f$ described above.
0167    * @param B1 The coupling \f$B_1\f$ described above.
0168    * @param B2 The coupling \f$B_2\f$ described above.
0169    * @param B3 The coupling \f$B_3\f$ described above.
0170    */
0171   virtual void halfThreeHalfVectorCoupling(int imode, Energy m0, Energy m1, Energy m2,
0172                        Complex& A1,Complex& A2,Complex& A3,
0173                        Complex& B1,Complex& B2,Complex& B3) const;
0174 
0175 
0176   /**
0177    * Couplings for spin-\f$\frac32\f$ to spin-\f$\frac12\f$ and a scalar.
0178    * This method must be implemented in any class inheriting from this one
0179    * which includes \f$\frac12\to\frac32+0\f$ or \f$\frac32\to\frac12+0\f$ decays. 
0180    * @param imode The mode
0181    * @param m0 The mass of the decaying particle.
0182    * @param m1 The mass of the outgoing baryon.
0183    * @param m2 The mass of the outgoing meson.
0184    * @param A The coupling \f$A\f$ described above.
0185    * @param B The coupling \f$B\f$ described above.
0186    */
0187   virtual void threeHalfHalfScalarCoupling(int imode, Energy m0, Energy m1, Energy m2,
0188                        Complex& A,Complex& B) const;
0189 
0190   /**
0191    * Couplings for spin-\f$\frac32\f$ to spin-\f$\frac12\f$ and a vector.
0192    * This method must be implemented in any class inheriting from this one
0193    * which includes \f$\frac12\to\frac32+1\f$ or \f$\frac32\to\frac12+1\f$ decays. 
0194    * @param imode The mode
0195    * @param m0 The mass of the decaying particle.
0196    * @param m1 The mass of the outgoing baryon.
0197    * @param m2 The mass of the outgoing meson.
0198    * @param A1 The coupling \f$A_1\f$ described above.
0199    * @param A2 The coupling \f$A_2\f$ described above.
0200    * @param A3 The coupling \f$A_3\f$ described above.
0201    * @param B1 The coupling \f$B_1\f$ described above.
0202    * @param B2 The coupling \f$B_2\f$ described above.
0203    * @param B3 The coupling \f$B_3\f$ described above.
0204    */
0205   virtual void threeHalfHalfVectorCoupling(int imode, Energy m0, Energy m1, Energy m2,
0206                        Complex& A1,Complex& A2,Complex& A3,
0207                        Complex& B1,Complex& B2,Complex& B3) const;
0208 
0209   /**
0210    * Couplings for spin-\f$\frac32\f$ to spin-\f$\frac32\f$ and a scalar.
0211    * This method must be implemented in any class inheriting from this one
0212    * which includes \f$\frac32\to\frac32+0\f$ decays. 
0213    * @param imode The mode
0214    * @param m0 The mass of the decaying particle.
0215    * @param m1 The mass of the outgoing baryon.
0216    * @param m2 The mass of the outgoing meson.
0217    * @param A1 The coupling \f$A_1\f$ described above.
0218    * @param A2 The coupling \f$A_2\f$ described above.
0219    * @param B1 The coupling \f$B_1\f$ described above.
0220    * @param B2 The coupling \f$B_2\f$ described above.
0221    */
0222   virtual void threeHalfThreeHalfScalarCoupling(int imode,Energy m0,Energy m1,Energy m2,
0223                         Complex& A1,Complex& A2,
0224                         Complex& B1,Complex& B2) const;
0225   //@}
0226 
0227 public:
0228 
0229   /**
0230    * Standard Init function used to initialize the interfaces.
0231    */
0232   static void Init();
0233 
0234 private:
0235 
0236   /**
0237    * Matrix Element Calculation Members
0238    */
0239   //@{
0240   /**
0241    * Matrix element for spin-\f$\frac12\f$ to spin-\f$\frac12\f$ and a scalar.
0242    * @param ichan The channel we are calculating the matrix element for. 
0243    * @param part The decaying Particle.
0244    * @param outgoing The particles produced in the decay
0245    * @param momenta  The momenta of the particles produced in the decay
0246    * @param meopt Option for the calculation of the matrix element
0247    * @return The matrix element squared.
0248    */
0249   double halfHalfScalar(const int ichan,const Particle & part,
0250             const tPDVector & outgoing,
0251             const vector<Lorentz5Momentum> & momenta,
0252             MEOption meopt) const;
0253 
0254   /**
0255    * Matrix element for spin-\f$\frac12\f$ to spin-\f$\frac12\f$ and a vector.
0256    * @param ichan The channel we are calculating the matrix element for. 
0257    * @param part The decaying Particle.
0258    * @param outgoing The particles produced in the decay
0259    * @param momenta  The momenta of the particles produced in the decay
0260    * @param meopt Option for the calculation of the matrix element
0261    * @return The matrix element squared.
0262    */
0263   double halfHalfVector(const int ichan,const Particle & part,
0264             const tPDVector & outgoing,
0265             const vector<Lorentz5Momentum> & momenta,
0266             MEOption meopt) const;
0267 
0268   /**
0269    * Matrix element for spin-\f$\frac12\f$ to spin-\f$\frac32\f$ and a scalar.
0270    * @param ichan The channel we are calculating the matrix element for. 
0271    * @param part The decaying Particle.
0272    * @param outgoing The particles produced in the decay
0273    * @param momenta  The momenta of the particles produced in the decay
0274    * @param meopt Option for the calculation of the matrix element
0275    * @return The matrix element squared.
0276    */
0277   double halfThreeHalfScalar(const int ichan,const Particle & part,
0278                  const tPDVector & outgoing,
0279                  const vector<Lorentz5Momentum> & momenta,
0280                  MEOption meopt) const;
0281 
0282   /**
0283    * Matrix element for spin-\f$\frac12\f$ to spin-\f$\frac32\f$ and a vector.
0284    * @param ichan The channel we are calculating the matrix element for. 
0285    * @param part The decaying Particle.
0286    * @param outgoing The particles produced in the decay
0287    * @param momenta  The momenta of the particles produced in the decay
0288    * @param meopt Option for the calculation of the matrix element
0289    * @return The matrix element squared.
0290    */
0291   double halfThreeHalfVector(const int ichan,const Particle & part,
0292                  const tPDVector & outgoing,
0293                  const vector<Lorentz5Momentum> & momenta,
0294                  MEOption meopt) const;
0295 
0296   /**
0297    * Matrix element for spin-\f$\frac32\f$ to spin-\f$\frac12\f$ and a scalar.
0298    * @param ichan The channel we are calculating the matrix element for. 
0299    * @param part The decaying Particle.
0300    * @param outgoing The particles produced in the decay
0301    * @param momenta  The momenta of the particles produced in the decay
0302    * @param meopt Option for the calculation of the matrix element
0303    * @return The matrix element squared.
0304    */
0305   double threeHalfHalfScalar(const int ichan,const Particle & part,
0306                  const tPDVector & outgoing,
0307                  const vector<Lorentz5Momentum> & momenta,
0308                  MEOption meopt) const;
0309 
0310   /**
0311    * Matrix element for spin-\f$\frac32\f$ to spin-\f$\frac12\f$ and a vector.
0312    * @param ichan The channel we are calculating the matrix element for. 
0313    * @param part The decaying Particle.
0314    * @param outgoing The particles produced in the decay
0315    * @param momenta  The momenta of the particles produced in the decay
0316    * @param meopt Option for the calculation of the matrix element
0317    * @return The matrix element squared.
0318    */
0319   double threeHalfHalfVector(const int ichan,const Particle & part,
0320                  const tPDVector & outgoing,
0321                  const vector<Lorentz5Momentum> & momenta,
0322                  MEOption meopt) const;
0323 
0324   /**
0325    * Matrix element for spin-\f$\frac32\f$ to spin-\f$\frac32\f$ and a scalar.
0326    * @param ichan The channel we are calculating the matrix element for. 
0327    * @param part The decaying Particle.
0328    * @param outgoing The particles produced in the decay
0329    * @param momenta  The momenta of the particles produced in the decay
0330    * @param meopt Option for the calculation of the matrix element
0331    * @return The matrix element squared.
0332    */
0333   double threeHalfThreeHalfScalar(const int ichan,const Particle & part,
0334                   const tPDVector & outgoing,
0335                   const vector<Lorentz5Momentum> & momenta,
0336                   MEOption meopt) const;
0337   //@}
0338 
0339 private:
0340 
0341   /**
0342    * Private and non-existent assignment operator.
0343    */
0344   Baryon1MesonDecayerBase & operator=(const Baryon1MesonDecayerBase &) = delete;
0345 
0346 private:
0347 
0348   /**
0349    *  Spin density matrx
0350    */
0351   mutable RhoDMatrix _rho;
0352 
0353   /**
0354    *  Spin-\f$\frac12\f$ spinor
0355    */
0356   mutable vector<Helicity::LorentzSpinor<SqrtEnergy> >      _inHalf;
0357 
0358   /**
0359    *  Spin-\f$\frac12\f$ barred spinor
0360    */
0361   mutable vector<Helicity::LorentzSpinorBar<SqrtEnergy> >   _inHalfBar;
0362 
0363   /**
0364    *  Spin-\f$\frac32\f$ spinor
0365    */
0366   mutable vector<Helicity::LorentzRSSpinor<SqrtEnergy> >    _inThreeHalf;
0367 
0368   /**
0369    *  Spin-\f$\frac32\f$ barred spinor
0370    */
0371   mutable vector<Helicity::LorentzRSSpinorBar<SqrtEnergy> > _inThreeHalfBar;
0372 
0373   /**
0374    *  Polarization vector
0375    */
0376   mutable vector<Helicity::LorentzPolarizationVector> _inVec;
0377 };
0378 
0379 }
0380 
0381 
0382 #endif /* HERWIG_Baryon1MesonDecayerBase_H */