Back to home page

EIC code displayed by LXR

 
 

    


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

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 EVTBLLNUL_AMP_HH
0022 #define EVTBLLNUL_AMP_HH
0023 
0024 #include "EvtGenBase/EvtAmp.hh"
0025 #include "EvtGenBase/EvtComplex.hh"
0026 #include "EvtGenBase/EvtId.hh"
0027 #include "EvtGenBase/EvtTensor4C.hh"
0028 #include "EvtGenBase/EvtVector4R.hh"
0029 
0030 #include <vector>
0031 
0032 class EvtParticle;
0033 
0034 // Description: Header file for the amplitude calculation for the "BLLNUL"
0035 //              model which generates rare four-leptonic B-decays
0036 //              B^-(p) -> ell^+(k_1) ell^-(k_2) neu (k_3) ell^-(k_4)
0037 
0038 class EvtBLLNuLAmp {
0039   public:
0040     EvtBLLNuLAmp( double Vub = 4.09e-3 );
0041     EvtBLLNuLAmp( double qSqMin, double kSqMin, bool symmetry,
0042                   double Vub = 4.09e-3 );
0043 
0044     void CalcAmp( EvtParticle* parent, EvtAmp& amp ) const;
0045     void setParameters( double qSqMin, double kSqMin, bool symmetry );
0046 
0047     // Resonance poles
0048     class ResPole final {
0049       public:
0050         ResPole( double mass, double width, double coupling );
0051 
0052         EvtComplex propagator( double qSq, int numForm = 0 ) const;
0053 
0054         double getMass() const { return m0_; }
0055         double getMassSq() const { return m0Sq_; }
0056         double getWidth() const { return w0_; }
0057         double getCoupling() const { return c_; }
0058 
0059       private:
0060         double m0_;    // pole mass
0061         double m0Sq_;
0062         double w0_;    // width
0063         double c_;     // coupling constant
0064         EvtComplex I_;
0065         EvtComplex Imw_;
0066     };
0067 
0068   protected:
0069     EvtTensor4C getHadronTensor( const EvtVector4R& q, const EvtVector4R& k,
0070                                  const double qSq, const double kSq,
0071                                  const double MB, const int sign ) const;
0072 
0073     std::vector<EvtComplex> getVMDTerms( double qSq, double kSq, double MB ) const;
0074 
0075     EvtComplex getBStarTerm( double qSq, double kSq, double MB ) const;
0076 
0077     double FF_B2Bstar( double qSq ) const;
0078 
0079     double FF_V( double kSq ) const;
0080 
0081     double FF_A1( double kSq ) const;
0082 
0083     double FF_A2( double kSq ) const;
0084 
0085   private:
0086     // Kinematic cut-offs
0087     double qSqMin_;
0088     double kSqMin_;
0089 
0090     // If we have identical charged lepton flavours
0091     bool symmetry_;
0092 
0093     // B+, B- Ids
0094     EvtId BpId_, BnId_;
0095 
0096     // Form factor constants
0097     double coupling_, sqrt2_;
0098     double fBu_;
0099 
0100     // Resonance poles
0101     EvtBLLNuLAmp::ResPole Bstar_, Upsilon_;
0102 
0103     std::vector<EvtBLLNuLAmp::ResPole> resPoles_;
0104     int nPoles_;
0105 
0106     // Complex number constants
0107     EvtComplex zero_, unitI_;
0108 };
0109 
0110 inline void EvtBLLNuLAmp::setParameters( double qSqMin, double kSqMin,
0111                                          bool symmetry )
0112 {
0113     qSqMin_ = qSqMin;
0114     kSqMin_ = kSqMin;
0115     symmetry_ = symmetry;
0116 }
0117 
0118 #endif