Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:20:04

0001 
0002 /***********************************************************************
0003 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors       *
0004 *                                                                      *
0005 * This file is part of EvtGen.                                         *
0006 *                                                                      *
0007 * EvtGen is free software: you can redistribute it and/or modify       *
0008 * it under the terms of the GNU General Public License as published by *
0009 * the Free Software Foundation, either version 3 of the License, or    *
0010 * (at your option) any later version.                                  *
0011 *                                                                      *
0012 * EvtGen is distributed in the hope that it will be useful,            *
0013 * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
0014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
0015 * GNU General Public License for more details.                         *
0016 *                                                                      *
0017 * You should have received a copy of the GNU General Public License    *
0018 * along with EvtGen.  If not, see <https://www.gnu.org/licenses/>.     *
0019 ***********************************************************************/
0020 
0021 #ifndef EVTBBSCALAR_HH
0022 #define EVTBBSCALAR_HH
0023 
0024 #include "EvtGenBase/EvtComplex.hh"
0025 #include "EvtGenBase/EvtConst.hh"
0026 #include "EvtGenBase/EvtDecayAmp.hh"
0027 #include "EvtGenBase/EvtDiracParticle.hh"
0028 #include "EvtGenBase/EvtId.hh"
0029 #include "EvtGenBase/EvtPDL.hh"
0030 #include "EvtGenBase/EvtParticle.hh"
0031 #include "EvtGenBase/EvtScalarParticle.hh"
0032 #include "EvtGenBase/EvtVector4C.hh"
0033 
0034 #include <bitset>
0035 #include <map>
0036 #include <string>
0037 #include <vector>
0038 
0039 // Implementation of the decay B- -> lambda p_bar pi according to
0040 // hep-ph/0204185, hep-ph/0211240
0041 // This model is intended to be applicable to all decays of the type B-> baryon baryon scalar
0042 
0043 struct FormFactor {
0044     double value;
0045     double sigma1;
0046     double sigma2;
0047     double mV;
0048 };
0049 
0050 enum Baryons
0051 {
0052     Lambda,
0053     Proton,
0054     Neutron,
0055     Sigma0,
0056     Sigma_minus,
0057     Xi0,
0058     Xi_minus,
0059     nBaryons
0060 };
0061 
0062 class EvtBBScalar : public EvtDecayAmp {
0063   public:
0064     EvtBBScalar();
0065     std::string getName() override;
0066     EvtBBScalar* clone() override;
0067     void decay( EvtParticle* p ) override;
0068     void init() override;
0069     void initProbMax() override;
0070 
0071   private:
0072     // used values of constants
0073     static const EvtComplex I;
0074     static const EvtComplex V_ub;
0075     static const EvtComplex V_us_star;
0076     static const EvtComplex a1;
0077     static const EvtComplex V_tb;
0078     static const EvtComplex V_ts_star;
0079     static const EvtComplex a4;
0080     static const EvtComplex a6;
0081 
0082     // used parameters in the calculation of the magnetic form factors
0083     static const double x[];
0084     static const double y[];
0085     // quark masses as used in the model
0086     static const double m_s;
0087     static const double m_u;
0088     static const double m_b;
0089 
0090     // used to choose the right value for the form factor depending on the type of scalar
0091     std::string _scalarType;
0092     mutable std::map<std::string, FormFactor> _f0Map;
0093     mutable std::map<std::string, FormFactor> _f1Map;
0094 
0095     // only consider F1+F2 here
0096     std::bitset<nBaryons> _baryonCombination;
0097     void setKnownBaryonTypes( const EvtId& baryon );
0098 
0099     double B_pi_f1( double t ) const;
0100     double B_pi_f0( double t ) const;
0101     double baryonF1F2( double t ) const;
0102     double G_p( double t ) const;
0103     double G_n( double t ) const;
0104 
0105     double baryon_gA( double t ) const;
0106     double baryon_hA( double t ) const;
0107     double baryon_gP( double t ) const;
0108     double baryon_fS( double t ) const;
0109 
0110     double D_A( double t ) const;
0111     double F_A( double t ) const;
0112     double D_P( double t ) const;
0113     double F_P( double t ) const;
0114     double D_S( double t ) const;
0115     double F_S( double t ) const;
0116 
0117     // (mB1 - mB2)/(mq1 - mq1)
0118     double _massRatio;
0119     double _baryonMassSum;
0120     double formFactorFit( double t, const std::vector<double>& params ) const;
0121 
0122     static const EvtComplex const_B;
0123     static const EvtComplex const_C;
0124     const EvtVector4C amp_A( const EvtVector4R& p4B, const EvtVector4R& p4Scalar );
0125     const EvtComplex amp_B( const EvtDiracParticle* baryon1,
0126                             const EvtDiracSpinor& b1Pol,
0127                             const EvtDiracParticle* baryon2,
0128                             const EvtDiracSpinor& b2Pol, int index );
0129     const EvtComplex amp_B_vectorPart( const EvtDiracParticle* baryon1,
0130                                        const EvtDiracSpinor& b1Pol,
0131                                        const EvtDiracParticle* baryon2,
0132                                        const EvtDiracSpinor& b2Pol, int index );
0133     const EvtComplex amp_B_axialPart( const EvtDiracParticle* baryon1,
0134                                       const EvtDiracSpinor& b1Pol,
0135                                       const EvtDiracParticle* baryon2,
0136                                       const EvtDiracSpinor& b2Pol, int index );
0137     const EvtComplex amp_C( const EvtDiracParticle* baryon1,
0138                             const EvtDiracSpinor& b1Pol,
0139                             const EvtDiracParticle* baryon2,
0140                             const EvtDiracSpinor& b2Pol, int index );
0141     const EvtComplex amp_C_scalarPart( const EvtDiracSpinor& b1Pol,
0142                                        const EvtDiracSpinor& b2Pol, double t );
0143     const EvtComplex amp_C_pseudoscalarPart( const EvtDiracSpinor& b1Pol,
0144                                              const EvtDiracSpinor& b2Pol,
0145                                              double t );
0146 
0147     // initialize phasespace and calculate the amplitude for one (i=0,1) state of the photon
0148     EvtComplex calcAmpliude( const EvtParticle* p, const unsigned int polState );
0149 };
0150 
0151 #endif