evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtBLLNuLAmp.hh
Go to the documentation of this file.
1 
2 /***********************************************************************
3 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4 * *
5 * This file is part of EvtGen. *
6 * *
7 * EvtGen is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * EvtGen is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19 ***********************************************************************/
20 
21 #ifndef EVTBLLNUL_AMP_HH
22 #define EVTBLLNUL_AMP_HH
23 
24 #include "EvtGenBase/EvtAmp.hh"
25 #include "EvtGenBase/EvtComplex.hh"
26 #include "EvtGenBase/EvtId.hh"
29 
30 #include <vector>
31 
32 class EvtParticle;
33 
34 // Description: Header file for the amplitude calculation for the "BLLNUL"
35 // model which generates rare four-leptonic B-decays
36 // B^-(p) -> ell^+(k_1) ell^-(k_2) neu (k_3) ell^-(k_4)
37 
38 class EvtBLLNuLAmp {
39  public:
40  EvtBLLNuLAmp( double Vub = 4.09e-3 );
41  EvtBLLNuLAmp( double qSqMin, double kSqMin, bool symmetry,
42  double Vub = 4.09e-3 );
43 
44  void CalcAmp( EvtParticle* parent, EvtAmp& amp ) const;
45  void setParameters( double qSqMin, double kSqMin, bool symmetry );
46 
47  // Resonance poles
48  class ResPole final {
49  public:
50  ResPole( double mass, double width, double coupling );
51 
52  EvtComplex propagator( double qSq, int numForm = 0 ) const;
53 
54  double getMass() const { return m0_; }
55  double getMassSq() const { return m0Sq_; }
56  double getWidth() const { return w0_; }
57  double getCoupling() const { return c_; }
58 
59  private:
60  double m0_; // pole mass
61  double m0Sq_;
62  double w0_; // width
63  double c_; // coupling constant
66  };
67 
68  protected:
70  const double qSq, const double kSq,
71  const double MB, const int sign ) const;
72 
73  std::vector<EvtComplex> getVMDTerms( double qSq, double kSq, double MB ) const;
74 
75  EvtComplex getBStarTerm( double qSq, double kSq, double MB ) const;
76 
77  double FF_B2Bstar( double qSq ) const;
78 
79  double FF_V( double kSq ) const;
80 
81  double FF_A1( double kSq ) const;
82 
83  double FF_A2( double kSq ) const;
84 
85  private:
86  // Kinematic cut-offs
87  double qSqMin_;
88  double kSqMin_;
89 
90  // If we have identical charged lepton flavours
91  bool symmetry_;
92 
93  // B+, B- Ids
95 
96  // Form factor constants
97  double coupling_, sqrt2_;
98  double fBu_;
99 
100  // Resonance poles
102 
103  std::vector<EvtBLLNuLAmp::ResPole> resPoles_;
104  int nPoles_;
105 
106  // Complex number constants
108 };
109 
110 inline void EvtBLLNuLAmp::setParameters( double qSqMin, double kSqMin,
111  bool symmetry )
112 {
113  qSqMin_ = qSqMin;
114  kSqMin_ = kSqMin;
115  symmetry_ = symmetry;
116 }
117 
118 #endif
void CalcAmp(EvtParticle *parent, EvtAmp &amp) const
EvtComplex propagator(double qSq, int numForm=0) const
double kSqMin_
Definition: EvtBLLNuLAmp.hh:88
double qSqMin_
Definition: EvtBLLNuLAmp.hh:87
EvtComplex getBStarTerm(double qSq, double kSq, double MB) const
std::vector< EvtBLLNuLAmp::ResPole > resPoles_
double getMassSq() const
Definition: EvtBLLNuLAmp.hh:55
double FF_A2(double kSq) const
EvtComplex unitI_
void setParameters(double qSqMin, double kSqMin, bool symmetry)
std::vector< EvtComplex > getVMDTerms(double qSq, double kSq, double MB) const
EvtComplex zero_
double FF_V(double kSq) const
EvtBLLNuLAmp(double Vub=4.09e-3)
ResPole(double mass, double width, double coupling)
EvtTensor4C getHadronTensor(const EvtVector4R &q, const EvtVector4R &k, const double qSq, const double kSq, const double MB, const int sign) const
Definition: EvtId.hh:27
double FF_B2Bstar(double qSq) const
double getCoupling() const
Definition: EvtBLLNuLAmp.hh:57
double coupling_
Definition: EvtBLLNuLAmp.hh:97
double getWidth() const
Definition: EvtBLLNuLAmp.hh:56
Definition: EvtAmp.hh:30
EvtBLLNuLAmp::ResPole Bstar_
double getMass() const
Definition: EvtBLLNuLAmp.hh:54
double FF_A1(double kSq) const
EvtBLLNuLAmp::ResPole Upsilon_