Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_BaryonFormFactor_H
0003 #define HERWIG_BaryonFormFactor_H
0004 //
0005 // This is the declaration of the BaryonFormFactor class.
0006 //
0007 #include "ThePEG/Interface/Interfaced.h"
0008 #include "BaryonFormFactor.fh"
0009 #include "ThePEG/Config/Complex.h"
0010 #include "Herwig/Decay/IsoSpin.h"
0011 
0012 namespace Herwig {
0013 using namespace ThePEG;
0014 
0015   /** \ingroup Decay
0016    * The BaryonFormFactor class is the base class for the implementation
0017    * of the form-factors for the weak decay of a baryon. 
0018    *
0019    *  This is designed so that the form factors can be used for both the semi-leptonic
0020    *  decays and using factorization for hadronic weak decays.
0021    *
0022    *  The form factors are given below for the decay \f$X(p_0)\to Y(p_1)\f$ with 
0023    *  \f$q_\mu=(p_0-p_1)_\mu\f$.
0024    *
0025    *
0026    *  The form-factors are defined to be 
0027    *
0028    *   \f[\bar{u}(p_1) \left[  \gamma^\mu \left(F^V_1+F^A_1 \gamma_5\right)
0029    *  +\frac{i}{(m_0+m_1)}\sigma_{\mu\nu}q^\nu\left(F^V_2+F^A_2\gamma_5\right)
0030    *  +\frac1{(m_0+m_1)}q^\mu\left(F^V_3+F^A_3\gamma_5\right)\right] u(p_0) \f]
0031    *
0032    *   for the \f$\frac12\to\frac12\f$ transition and
0033    *
0034    *  \f[\bar{u}^\alpha(p_1) \left[ g_{\alpha\mu}\left(G^V_1+G^A_1 \gamma_5\right)
0035    *   +\frac1{(m_0+m_1)}p_{0\alpha}\gamma_\mu\left(G^V_2+G^A_2\gamma_5\right)
0036    *   +\frac1{(m_0+m_1)^2}p_{0\alpha}p_{1\mu}\left(G^V_3+G^A_3\gamma_5\right)\right.\f]
0037    * \f[ \left.
0038    *   +\frac1{(m_0+m_1)^2}p_{0\alpha}q_\mu\left(G^V_4+G^A_4\gamma_5\right)\right]
0039    * \gamma_5 u(p_0) 
0040    * \f]
0041    *   for the \f$\frac12\to\frac32\f$ transition.
0042    *
0043    *  These definitions differ from those in the liturature because we have divided some
0044    *  terms by the sum of the baryon masses to ensure that the form-factors are all
0045    *  dimensionless.
0046    *
0047    *  In many applications, particularly for the decay of baryons containing a heavy
0048    *  quark, an alternative version of the form factors in terms of the velocities
0049    *  of the baryons is used. This form is
0050    *
0051    *   \f[\bar{u}(v') \left[  \gamma^\mu \left(F_1-G_1 \gamma_5\right)
0052    *                               v^\mu \left(F_2-G_2 \gamma_5\right)
0053    *                            {v'}^\mu \left(F_3-G_3\gamma_5\right)\right] u(v) \f]
0054    *
0055    *   for the \f$\frac12\to\frac12\f$ transition and
0056    *
0057    *  \f[\bar{u}^\alpha(v') \left[ v_\alpha\gamma_\mu\left(N_1-K_1 \gamma_5\right)
0058    *                              +v_\alpha v^\mu    \left(N_2-K_2 \gamma_5\right)
0059    *                              +v_\alpha {v'}^\mu \left(N_3-K_3 \gamma_5\right)
0060    *                              +g_\alpha^\mu      \left(N_4-K_4 \gamma_5\right)\right]
0061    * \gamma_5 u(v) 
0062    * \f]
0063    *   for the \f$\frac12\to\frac32\f$ transition.
0064    *
0065    *  In terms of these form factors the form factors we use are
0066    *
0067    * \f[F^V_1= F_1+\frac12(m_0+m_1)\left(\frac{F_2}{m_0}+\frac{F_3}{m_1}\right)\f]
0068    * \f[F^V_2=\frac12(m_0+m_1)\left(\frac{F_2}{m_0}+\frac{F_3}{m_1}\right)\f]
0069    * \f[F^V_3=\frac12(m_0+m_1)\left(\frac{F_2}{m_0}-\frac{F_3}{m_1}\right)\f]
0070    * \f[F^A_1=-G_1+\frac12(m_0-m_1)\left(\frac{G_2}{m_0}+\frac{G_3}{m_1}\right)\f]
0071    * \f[F^A_2=-\frac12(m_0+m_1)\left(\frac{G_2}{m_0}+\frac{G_3}{m_1}\right)\f]
0072    * \f[F^A_3=\frac12(m_0+m_1)\left(-\frac{G_2}{m_0}+\frac{G_3}{m_1}\right)\f]
0073    *
0074    *   for the \f$\frac12\to\frac12\f$ transition and
0075    *
0076    * \f[G_1^V = N_4\f]
0077    * \f[G_2^V = N_1\frac{(m_0+m_1)}{m_0}\f]
0078    * \f[G_3^V = \frac{(m_0+m_1)^2}{m_0}\left(\frac{N_2}{m_0}+\frac{N_3}{m_1}\right)\f]
0079    * \f[G_4^V = N_2\frac{(m_0+m_1)^2}{m^2_0}\f]
0080    * \f[G_1^A =-K_4\f]
0081    * \f[G_2^A =-K_1\frac{(m_0+m_1)}{m_0}\f]
0082    * \f[G_3^A =-\frac{(m_0+m_1)^2}{m_0}\left(\frac{K_2}{m_0}+\frac{K_3}{m_1}\right)\f]
0083    * \f[G_4^A =-K_2\frac{(m_0+m_1)^2}{m^2_0}\f]
0084    *
0085    *   for the \f$\frac12\to\frac32\f$ transition.
0086    *
0087    * 
0088    * @see ScalarFormFactor
0089    * 
0090    */
0091 
0092 class BaryonFormFactor: public Interfaced {
0093 
0094 public:
0095 
0096   /**
0097    *   Whether the form factor is space- or time-like
0098    */
0099   enum Virtuality {TimeLike, SpaceLike};
0100 
0101   
0102 public:
0103 
0104   /**
0105    * Default constructor
0106    */
0107   BaryonFormFactor() : _numbermodes() {}
0108 
0109   /** @name Functions used by the persistent I/O system. */
0110   //@{
0111   /**
0112    * Function used to write out object persistently.
0113    * @param os the persistent output stream written to.
0114    */
0115   void persistentOutput(PersistentOStream & os) const;
0116 
0117   /**
0118    * Function used to read in object persistently.
0119    * @param is the persistent input stream read from.
0120    * @param version the version number of the object when written.
0121    */
0122   void persistentInput(PersistentIStream & is, int version);
0123   //@}
0124 
0125   /**
0126    * Standard Init function used to initialize the interfaces.
0127    */
0128   static void Init();
0129 
0130 protected:
0131 
0132   /** @name Clone Methods. */
0133   //@{
0134   /**
0135    * Make a simple clone of this object.
0136    * @return a pointer to the new object.
0137    */
0138   virtual IBPtr clone() const {return new_ptr(*this);}
0139 
0140   /** Make a clone of this object, possibly modifying the cloned object
0141    * to make it sane.
0142    * @return a pointer to the new object.
0143    */
0144   virtual IBPtr fullclone() const {return new_ptr(*this);}
0145   //@}
0146 
0147 public:
0148 
0149   /** @name Functions to give information about the form factors available. */
0150   //@{
0151 
0152   /**
0153    * Find the location for a given pair of particle. 
0154    * \param in   PDG code for the incoming baryon.
0155    * \param out  PDG code for the outgoing baryon.
0156    * \param cc  particles or charge conjugates stored in form factor.
0157    * @return The location in the vectors storing the data. 
0158    */
0159   int formFactorNumber(int in,int out,bool & cc) const {
0160     int output(-1);
0161     unsigned int ix(0);
0162     if(_incomingid.size()==0){return output;}
0163     do {
0164       if(_incomingid[ix]== in && _outgoingid[ix]== out) {
0165     cc=false;
0166     output=ix;
0167       }
0168       else if (_incomingid[ix]==-in && _outgoingid[ix]==-out) {
0169     cc=true;
0170     output=ix;
0171       }
0172       ++ix;
0173     }
0174     while(ix<_incomingid.size()&&output<0);
0175     return output;
0176   }
0177 
0178   /**
0179    * Get the particle ids for an entry.
0180    * @param iloc The location in the list.
0181    * @param id0 The PDG code for the incoming baryon.
0182    * @param id1 The PDG code for the outgoing baryon.
0183    */
0184   void particleID(int iloc,int& id0,int& id1) {
0185     id0=_incomingid[iloc];
0186     id1=_outgoingid[iloc];
0187   }
0188 
0189   /**
0190    * Information on the form factor.
0191    * @param iloc The location in the list.
0192    * @param ispin The spin of the incoming baryon.
0193    * @param ospin The spin of the outgoing baryon.
0194    * @param spect1 The PDG code of the first spectator quark.
0195    * @param spect2 The PDG code of the second spectator quark.
0196    * @param inquark The PDG code for decaying incoming quark.
0197    * @param outquark The PDG code for the outgoing quark produced in the decay.
0198    */
0199   void formFactorInfo(int iloc,int & ispin,int & ospin,int & spect1,
0200               int & spect2, int & inquark,int & outquark) {
0201     ispin    = _incomingJ[iloc];
0202     ospin    = _outgoingJ[iloc];
0203     spect1   = _spectator1[iloc];
0204     spect2   = _spectator2[iloc];
0205     inquark  = _inquark[iloc];
0206     outquark = _outquark[iloc]; 
0207   }
0208 
0209   /**
0210    * Information on the form factor.
0211    * @param in The PDG code of the incoming baryon.
0212    * @param out The PDG code of the outgoing baryon.
0213    * @param ispin The spin of the incoming baryon.
0214    * @param ospin The spin of the outgoing baryon.
0215    * @param spect1 The PDG code of the first spectator quark.
0216    * @param spect2 The PDG code of the second spectator quark.
0217    * @param inquark The PDG code for decaying incoming quark.
0218    * @param outquark The PDG code for the outgoing quark produced in the decay.
0219    */
0220   void formFactorInfo(int in,int out,int & ispin,int & ospin,int & spect1,
0221               int & spect2, int & inquark,int & outquark) {
0222     bool dummy;
0223     unsigned int ix=formFactorNumber(in,out,dummy);
0224     formFactorInfo(ix,ispin,ospin,spect1,spect2,inquark,outquark);
0225   }
0226 
0227   /**
0228    * number of form factors
0229    */
0230   unsigned int numberOfFactors() const {return _incomingid.size();}
0231   //@}
0232 
0233 public:
0234 
0235   /** @name Form Factors */
0236   //@{
0237   /**
0238    * The form factor for the weak decay of a spin \f$\frac12\f$ baryon to a 
0239    * spin \f$\frac12\f$ baryon.  
0240    * This method is virtual and must be implementented in classes
0241    * inheriting from this which include spin\f$\frac12\f$  to spin \f$\frac12\f$
0242    * form factors.
0243    * @param q2 The scale \f$q^2\f$.
0244    * @param iloc The location in the form factor list.
0245    * @param id0 The PDG code of the incoming baryon.
0246    * @param id1 The PDG code of the outgoing baryon.
0247    * @param m0 The mass of the incoming baryon.
0248    * @param m1 The mass of the outgoing baryon.
0249    * @param f1v The form factor \f$F^V_1\f$.
0250    * @param f2v The form factor \f$F^V_2\f$.
0251    * @param f3v The form factor \f$F^V_3\f$.
0252    * @param f1a The form factor \f$F^A_1\f$.
0253    * @param f2a The form factor \f$F^A_2\f$.
0254    * @param f3a The form factor \f$F^A_3\f$.
0255    * @param virt Whether the q2 is space or timelike
0256    */
0257   virtual void SpinHalfSpinHalfFormFactor(Energy2 q2,int iloc, int id0, int id1,
0258                       Energy m0, Energy m1,
0259                       Complex & f1v,Complex & f2v,Complex & f3v,
0260                       Complex & f1a,Complex & f2a,Complex & f3a,
0261                       FlavourInfo flavour,
0262                       Virtuality virt=SpaceLike);
0263 
0264   /**
0265    * The form factor for the weak decay of a spin \f$\frac12\f$ baryon to a 
0266    * spin \f$\frac32\f$ baryon.  
0267    * This method is virtual and must be implementented in classes
0268    * inheriting from this which include spin\f$\frac12\f$  to spin \f$\frac32\f$
0269    * form factors.
0270    * @param q2 The scale \f$q^2\f$.
0271    * @param iloc The location in the form factor list.
0272    * @param id0 The PDG code of the incoming baryon.
0273    * @param id1 The PDG code of the outgoing baryon.
0274    * @param m0 The mass of the incoming baryon.
0275    * @param m1 The mass of the outgoing baryon.
0276    * @param g1v The form factor \f$G^V_1\f$.
0277    * @param g2v The form factor \f$G^V_2\f$.
0278    * @param g3v The form factor \f$G^V_3\f$.
0279    * @param g4v The form factor \f$G^V_4\f$.
0280    * @param g1a The form factor \f$G^A_1\f$.
0281    * @param g2a The form factor \f$G^A_2\f$.
0282    * @param g3a The form factor \f$G^A_3\f$.
0283    * @param g4a The form factor \f$G^A_4\f$.
0284    * @param virt Whether the q2 is space or timelike
0285    */
0286   virtual void SpinHalfSpinThreeHalfFormFactor(Energy2 q2,int iloc, int id0, int id1,
0287                            Energy m0, Energy m1,
0288                            Complex & g1v,Complex & g2v,Complex & g3v,
0289                            Complex & g4v,Complex & g1a,Complex & g2a,
0290                            Complex & g3a,Complex & g4a,
0291                            FlavourInfo flavour,
0292                            Virtuality virt=SpaceLike);
0293   //@}
0294 
0295   /**
0296    * Output the setup information for the particle database
0297    * @param os The stream to output the information to
0298    * @param header Whether or not to output the information for MySQL
0299    * @param create Whether or not to add a statement creating the object
0300    */
0301   virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
0302 
0303 protected:  
0304 
0305   /**
0306    * Add a form factor to the list.
0307    * @param in The PDG code of the incoming baryon.
0308    * @param out The PDG code of the outgoing baryon.
0309    * @param inspin The spin of the incoming baryon.
0310    * @param outspin The spin of the outgoing baryon.
0311    * @param spect1 The PDG code of the first  spectator quark.
0312    * @param spect2 The PDG code of the second spectator quark.
0313    * @param inquark The PDG code for decaying incoming quark.
0314    * @param outquark The PDG code for the outgoing quark produced in the decay.
0315    */
0316   void addFormFactor(int in,int out,int inspin, int outspin, int spect1,
0317              int spect2, int inquark,int outquark) {
0318     _incomingid.push_back(in);
0319     _outgoingid.push_back(out);
0320     _incomingJ.push_back(inspin);
0321     _outgoingJ.push_back(outspin);
0322     _spectator1.push_back(spect1);
0323     _spectator2.push_back(spect2);
0324     _inquark.push_back(inquark);
0325     _outquark.push_back(outquark);
0326   }
0327 
0328   /**
0329    *  Set initial number of modes
0330    * @param nmodes The number of modes.
0331    */
0332   void initialModes(unsigned int nmodes) {_numbermodes=nmodes;}
0333 
0334   /**
0335    * Get the initial number of modes
0336    */
0337   unsigned int initialModes() const {return _numbermodes;}
0338 
0339 protected:
0340 
0341   /** @name Standard Interfaced functions. */
0342   //@{
0343   /**
0344    * Initialize this object after the setup phase before saving and
0345    * EventGenerator to disk.
0346    * @throws InitException if object could not be initialized properly.
0347    */
0348   virtual void doinit();
0349   //@}
0350 
0351 private:
0352 
0353   /**
0354    * Private and non-existent assignment operator.
0355    */
0356   BaryonFormFactor & operator=(const BaryonFormFactor &) = delete;
0357 
0358   private:
0359 
0360   /**
0361    * the id's of the incoming particles
0362    */
0363   vector<int> _incomingid;
0364 
0365   /**
0366    * the id's of the  outgoing particles
0367    */
0368   vector<int> _outgoingid;
0369 
0370   /**
0371    * spin of the incoming particle
0372    */
0373   vector<int> _incomingJ;
0374 
0375   /**
0376    * spin of the outgoing particle
0377    */
0378   vector<int> _outgoingJ;
0379 
0380   /**
0381    * the id of the first spectator quark
0382    */
0383   vector<int> _spectator1;
0384 
0385   /**
0386    * the id of the second spectator quark
0387    */
0388   vector<int> _spectator2;
0389 
0390   /**
0391    * the id of the decaying quark
0392    */
0393   vector<int> _inquark;
0394 
0395   /**
0396    * the id of the outgoing quark
0397    */
0398   vector<int> _outquark;
0399 
0400   /**
0401    * The initial number of modes
0402    */
0403   unsigned int _numbermodes;
0404 };
0405 
0406 }
0407 
0408 #endif /* HERWIG_BaryonFormFactor_H */