Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_BaryonThreeQuarkModelFormFactor_H
0003 #define HERWIG_BaryonThreeQuarkModelFormFactor_H
0004 //
0005 // This is the declaration of the BaryonThreeQuarkModelFormFactor class.
0006 //
0007 #include "BaryonFormFactor.h"
0008 #include "ThePEG/PDT/ParticleData.h"
0009 
0010 namespace Herwig {
0011 using namespace ThePEG;
0012 
0013 /** \ingroup Decay
0014  *
0015  *  The BaryonThreeQuarkModelFormFactor class implements the 
0016  *  form factors for the semi-leptonic decay of baryons containing a heavy quark
0017  *  from the relativistic three-quark model calculation of PRD56, 348.
0018  *
0019  *  As the only formulae in the paper are for the heavy-to-heavy i.e. bottom
0020  *  to charm decay this there are the only modes included, although the paper
0021  *  also includes charm decays and bottom decays to light quarks.
0022  *
0023  *  The form factors are calculated by numerical computing the integrals from
0024  *  PRD56, 348 to obtain the coefficients for the expansion of the form factors.
0025  *
0026  * @see BaryonFormFactor
0027  */
0028 class BaryonThreeQuarkModelFormFactor: public BaryonFormFactor {
0029   
0030 public:
0031 
0032   /**
0033    * Default constructor
0034    */
0035   BaryonThreeQuarkModelFormFactor();
0036 
0037   /** @name Functions used by the persistent I/O system. */
0038   //@{
0039   /**
0040    * Function used to write out object persistently.
0041    * @param os the persistent output stream written to.
0042    */
0043   void persistentOutput(PersistentOStream & os) const;
0044 
0045   /**
0046    * Function used to read in object persistently.
0047    * @param is the persistent input stream read from.
0048    * @param version the version number of the object when written.
0049    */
0050   void persistentInput(PersistentIStream & is, int version);
0051   //@}
0052 
0053   /**
0054    * Standard Init function used to initialize the interfaces.
0055    */
0056   static void Init();
0057 
0058 protected:
0059 
0060   /** @name Clone Methods. */
0061   //@{
0062   /**
0063    * Make a simple clone of this object.
0064    * @return a pointer to the new object.
0065    */
0066   virtual IBPtr clone() const {return new_ptr(*this);}
0067 
0068   /** Make a clone of this object, possibly modifying the cloned object
0069    * to make it sane.
0070    * @return a pointer to the new object.
0071    */
0072   virtual IBPtr fullclone() const {return new_ptr(*this);}
0073   //@}
0074 
0075 public:
0076 
0077   /** @name Form Factors */
0078   //@{
0079   /**
0080    * The form factor for the weak decay of a spin \f$\frac12\f$ baryon to a 
0081    * spin \f$\frac12\f$ baryon.  
0082    * @param q2 The scale \f$q^2\f$.
0083    * @param iloc The location in the form factor list.
0084    * @param id0 The PDG code of the incoming baryon.
0085    * @param id1 The PDG code of the outgoing baryon.
0086    * @param m0 The mass of the incoming baryon.
0087    * @param m1 The mass of the outgoing baryon.
0088    * @param f1v The form factor \f$F^V_1\f$.
0089    * @param f2v The form factor \f$F^V_2\f$.
0090    * @param f3v The form factor \f$F^V_3\f$.
0091    * @param f1a The form factor \f$F^A_1\f$.
0092    * @param f2a The form factor \f$F^A_2\f$.
0093    * @param f3a The form factor \f$F^A_3\f$.
0094    * @param virt Whether the q2 is space or timelike
0095    */
0096   virtual void SpinHalfSpinHalfFormFactor(Energy2 q2,int iloc, int id0, int id1,
0097                       Energy m0, Energy m1,
0098                       Complex & f1v,Complex & f2v,Complex & f3v,
0099                       Complex & f1a,Complex & f2a,Complex & f3a,
0100                       FlavourInfo flavour,
0101                       Virtuality virt=SpaceLike);
0102 
0103   /**
0104    * The form factor for the weak decay of a spin \f$\frac12\f$ baryon to a 
0105    * spin \f$\frac32\f$ baryon.  
0106    * @param q2 The scale \f$q^2\f$.
0107    * @param iloc The location in the form factor list.
0108    * @param id0 The PDG code of the incoming baryon.
0109    * @param id1 The PDG code of the outgoing baryon.
0110    * @param m0 The mass of the incoming baryon.
0111    * @param m1 The mass of the outgoing baryon.
0112    * @param g1v The form factor \f$G^V_1\f$.
0113    * @param g2v The form factor \f$G^V_2\f$.
0114    * @param g3v The form factor \f$G^V_3\f$.
0115    * @param g4v The form factor \f$G^V_4\f$.
0116    * @param g1a The form factor \f$G^A_1\f$.
0117    * @param g2a The form factor \f$G^A_2\f$.
0118    * @param g3a The form factor \f$G^A_3\f$.
0119    * @param g4a The form factor \f$G^A_4\f$.
0120    * @param virt Whether the q2 is space or timelike
0121    */
0122   virtual void SpinHalfSpinThreeHalfFormFactor(Energy2 q2,int iloc, int id0, int id1,
0123                            Energy m0, Energy m1,
0124                            Complex & g1v,Complex & g2v,Complex & g3v,
0125                            Complex & g4v,Complex & g1a,Complex & g2a,
0126                            Complex & g3a,Complex & g4a,
0127                            FlavourInfo flavour,
0128                            Virtuality virt=SpaceLike);
0129   //@}
0130 
0131   /**
0132    * Output the setup information for the particle database
0133    * @param os The stream to output the information to
0134    * @param header Whether or not to output the information for MySQL
0135    * @param create Whether or not to add a statement creating the object
0136    */
0137   virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
0138 
0139   /**
0140    *  The integrand for the coefficients of the expansion. This is a function of the
0141    * integration variable \f$x\f$ which is chosen to transform the integrand over \f$y\f$
0142    * which is from \f$0\f$ to \f$\infty\f$ to an integral between 0 and 1. This means
0143    * that \f$y=\frac{1-x}{x}\f$.
0144    * @param x The integration variable.
0145    */
0146   double operator ()(double x) const;
0147   /** Argument type for GaussianIntegrator */
0148   typedef double ArgType;
0149   /** Return type for GaussianIntegrator */
0150   typedef double ValType;
0151 
0152   /**
0153    * The integrand for the semi-analytic calculation of the semi-leptonic width.
0154    * This is included for testing purposes.
0155    * @param omega The \f$\omega\f$ parameter of the heavy quark form-factors.
0156    * @param m0 The mass of the incoming baryon.
0157    * @param m1 The mass of the outgoing baryon.
0158    * @param type The type of the decay 
0159    * @param imass The baryonic mass parameter to use.
0160    * @param id0 PDG code for the decaying particle
0161    * @param id1 PDG code for the decay product
0162    */
0163   Energy widthIntegrand(double omega,Energy m0, Energy m1, int type, int imass,
0164             int id0,int id1);
0165 
0166 protected:
0167 
0168   /** @name Function needed to calculate the form factors */
0169   //@{
0170   /**
0171    * Returns the function \f$\Phi_N\f$ function of PRD56, 348 as a function
0172    * of \f$\omega\f$. 
0173    */
0174   vector<double> phiFunction(double);
0175 
0176   /**
0177    * The integral of a power of the the \f$S\f$ function of PRD56, 348 with respect
0178    * to \f$\theta\f$. This is used to 
0179    * calculate the coefficients of the expansion to compute the form factors.
0180    * The integral is calculated by computing a low power of the integrand and then
0181    * using recursion relations to calculate the pwoer requested.
0182    * @param y The \f$y\f$ variable of the function which is integrate over numerically.
0183    * @param N The power to which the integrand is raised.
0184    * @param SNm2 The integral with the function raised to the power \f$N/2-1\f$.
0185    * @param SN The integral with the function raised to the power \f$N\f$.  
0186    */
0187   void SN(double y,int N,double & SNm2,double & SN) const;
0188   //@}
0189 
0190 protected:
0191 
0192   /** @name Standard Interfaced functions. */
0193   //@{
0194 
0195   /**
0196    * Initialize this object after the setup phase before saving and
0197    * EventGenerator to disk.
0198    * @throws InitException if object could not be initialized properly.
0199    */
0200   virtual void doinit();
0201   //@}
0202 
0203 private:
0204 
0205   /**
0206    * Private and non-existent assignment operator.
0207    */
0208   BaryonThreeQuarkModelFormFactor & operator=(const BaryonThreeQuarkModelFormFactor &) = delete;
0209 
0210 private:
0211 
0212   /** @name Parameters for the form factors */
0213   //@{
0214   /**
0215    * Initialization of the expansion coefficients
0216    */
0217   bool _initialize;
0218 
0219   /**
0220    * Order of the expansion for the form factors.
0221    */
0222   unsigned int _order;
0223 
0224   /**
0225    *  Mass of the light quarks used in the calculation of the form factors.
0226    */
0227   Energy _mlight;
0228 
0229   /**
0230    *  Mass of the strange quark used in the calculation of the form factors.
0231    */
0232   Energy _mstrange;
0233 
0234   /**
0235    *  The heavy quark \f$\Lambda_Q\f$ parameter for the calculation of the form factors.
0236    */
0237   Energy _LambdaQ;
0238 
0239   /**
0240    *  The \f$\Lambda_{qq}\f$ parameter for the calculation of the form factors.
0241    */
0242   Energy _Lambdaqq;
0243 
0244   /**
0245    *  The \f$\Lambda_{sq}\f$ parameter for the calculation of the form factors.
0246    */
0247   Energy _Lambdasq;
0248 
0249 
0250   /**
0251    *  The \f$\Lambda_{ss}\f$ parameter for the calculation of the form factors.
0252    */
0253   Energy _Lambdass;
0254 
0255   /**
0256    *  Coefficients for the expansion of the \f$\xi(\omega)\f$ form factor.
0257    */
0258   vector<double> _C0;
0259 
0260   /**
0261    *  Coefficients for the expansion of the \f$\xi_1(\omega)\f$ form factor.
0262    */
0263   vector<double> _C1;
0264 
0265   /**
0266    *  Coefficients for the expansion of the \f$\xi_2(\omega)\f$ form factor.
0267    */
0268   vector<double> _C2;
0269 
0270   /**
0271    *  Coefficient of the first term in the integrand for the coefficient calculation.
0272    */
0273   double _a;
0274 
0275   /**
0276    *  Coefficient of the second term in the integrand for the coefficient calculation.
0277    */
0278   double _b;
0279 
0280   /**
0281    *  The \f$\mu^2\f$ parameter for the coefficient calculation.
0282    */
0283   double _mu2;
0284 
0285   /**
0286    *  the order of the coefficient being calculated.
0287    */
0288   int _N;
0289   //@}
0290 };
0291 
0292 }
0293 
0294 #endif /* HERWIG_BaryonThreeQuarkModelFormFactor_H */