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.
EvtDalitzReso.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 __EVTDALITZRESO_HH__
22 #define __EVTDALITZRESO_HH__
23 
25 #include "EvtGenBase/EvtComplex.hh"
26 #include "EvtGenBase/EvtCyclic3.hh"
29 #include "EvtGenBase/EvtFlatte.hh"
32 
33 #include <map>
34 #include <string>
35 #include <vector>
36 
37 using std::map;
38 using std::vector;
39 
40 class EvtBlattWeisskopf;
41 
42 class EvtDalitzReso final {
43  public:
44  // Numerator type
45  enum NumType
46  {
47  NBW = 0,
49  RBW_KUEHN = 2,
50  RBW_CLEO = 3,
52  GS_CLEO = 5,
53  K_MATRIX = 6,
56  LASS = 9,
57  K_MATRIX_I = 10,
59  GAUSS_CLEO = 12,
61  FLATTE = 14,
62  NON_RES = 15,
65  };
66 
67  // Coupling type
68  // ChgPion : pi+ pi-
69  // NeuPion : pi0 pi0
70  // Pion : 0.5*[(pi+ pi-) + (pi0 pi0)]
71  // ChgKaon : K+ K-
72  // NeuKaon : K0 K0
73  // Kaon : 0.5*[(K+ K-) + (K0 K0)]
74  // EtaPion : eta pi0
76  {
77  Undefined = 0,
78  PicPic = 1,
83  KK,
88  };
89 
91 
93  NumType typeN, double alpha = 0.0 ) :
94  _dp( dp ), _pairRes( pairRes ), _typeN( typeN ), _alpha( alpha ){};
95 
96  EvtDalitzReso( const EvtDalitzPlot& dp, EvtCyclic3::Pair pairAng,
98  double m0, double g0, NumType typeN, double f_b = 0.0,
99  double f_d = 1.5 );
100 
101  EvtDalitzReso( const EvtDalitzPlot& dp, EvtCyclic3::Pair pairAng,
103  double m0, double g0, NumType typeN, double m0_mix,
104  double g0_mix, double delta_mix, EvtComplex amp_mix );
105 
106  EvtDalitzReso( const EvtDalitzPlot& dp, EvtCyclic3::Pair pairAng,
108  double m0, NumType typeN, double g1, double g2,
109  CouplingType coupling2 );
110 
111  // K-matrix
112  EvtDalitzReso( const EvtDalitzPlot& dp, EvtCyclic3::Pair pairRes,
113  std::string nameIndex, NumType typeN, EvtComplex fr12prod,
114  EvtComplex fr13prod, EvtComplex fr14prod,
115  EvtComplex fr15prod, double s0prod );
116 
117  // LASS
118  EvtDalitzReso( const EvtDalitzPlot& dp, EvtCyclic3::Pair pairRes, double m0,
119  double g0, double a, double r, double B, double phiB, double R,
120  double phiR, double cutoff = -1, bool scaleByMOverQ = false );
121 
122  //Flatte
123  EvtDalitzReso( const EvtDalitzPlot& dp, EvtCyclic3::Pair pairRes, double m0 );
124 
125  EvtDalitzReso* clone() const { return new EvtDalitzReso( *this ); }
126 
127  EvtComplex evaluate( const EvtDalitzPoint& p );
128 
129  void set_fd( double R ) { _vd.set_f( R ); }
130  void set_fb( double R ) { _vb.set_f( R ); }
131 
132  void addFlatteParam( const EvtFlatteParam& param )
133  {
134  _flatteParams.push_back( param );
135  }
136 
137  private:
138  EvtComplex psFactor( double& ma, double& mb, double& m );
139  EvtComplex psFactor( double& ma1, double& mb1, double& ma2, double& mb2,
140  double& m );
141  EvtComplex propGauss( const double& m0, const double& s0, const double& m );
142  EvtComplex propBreitWigner( const double& m0, const double& g0,
143  const double& m );
144  EvtComplex propBreitWignerRel( const double& m0, const double& g0,
145  const double& m );
146  EvtComplex propBreitWignerRel( const double& m0, const EvtComplex& g0,
147  const double& m );
148  EvtComplex propBreitWignerRelCoupled( const double& m0, const EvtComplex& g1,
149  const EvtComplex& g2, const double& m );
150  EvtComplex propGounarisSakurai( const double& m0, const double& g0,
151  const double& k0, const double& m,
152  const double& g, const double& k );
153  inline double GS_f( const double& m0, const double& g0, const double& k0,
154  const double& m, const double& k );
155  inline double GS_h( const double& m, const double& k );
156  inline double GS_dhods( const double& m0, const double& k0 );
157  inline double GS_d( const double& m0, const double& k0 );
158 
159  EvtComplex numerator( const EvtDalitzPoint& p, const EvtTwoBodyKine& vb,
160  const EvtTwoBodyKine& vd );
161  double angDep( const EvtDalitzPoint& p );
162  EvtComplex mixFactor( EvtComplex prop, EvtComplex prop_mix );
163  EvtComplex Fvector( double s, int index );
164  EvtComplex lass( double s );
165  EvtComplex flatte( const double& m );
166 
167  inline EvtComplex sqrtCplx( double in )
168  {
169  return ( in > 0 ) ? EvtComplex( sqrt( in ), 0 )
170  : EvtComplex( 0, sqrt( -in ) );
171  }
172 
173  // Dalitz plot
175 
176  // Pairing indices:
179 
180  // Spin
182 
183  // Numerator type
185 
186  // Nominal mass and width
187  double _m0, _g0;
188 
189  // Vertices
192 
193  // Daughter masses
195 
196  // variables for electromagnetic mass mixing
199 
200  // variables for coupled Breit-Wigner
201  double _g1, _g2;
203 
204  // variables for Blatt-Weisskopf form factors
205  double _f_b, _f_d;
206 
207  // K-matrix
210  double _s0prod;
211 
212  // LASS
213  double _a;
214  double _r;
215  double _Blass;
216  double _phiB;
217  double _R;
218  double _phiR;
219  double _cutoff;
221 
222  //Nonresonant
223  double _alpha;
224 
225  // Flatte
226  std::vector<EvtFlatteParam> _flatteParams;
227 };
228 
229 #endif
EvtTwoBodyVertex _vb
EvtDalitzReso * clone() const
void set_fd(double R)
std::vector< EvtFlatteParam > _flatteParams
EvtComplex sqrtCplx(double in)
double GS_d(const double &m0, const double &k0)
EvtComplex propGauss(const double &m0, const double &s0, const double &m)
EvtSpinType::spintype _spin
EvtComplex mixFactor(EvtComplex prop, EvtComplex prop_mix)
EvtComplex evaluate(const EvtDalitzPoint &p)
void set_f(double R)
EvtComplex _amp_mix
EvtCyclic3::Pair _pairAng
EvtTwoBodyVertex _vd
EvtComplex lass(double s)
EvtComplex Fvector(double s, int index)
CouplingType _coupling2
EvtComplex _fr12prod
void addFlatteParam(const EvtFlatteParam &param)
double GS_h(const double &m, const double &k)
EvtComplex propGounarisSakurai(const double &m0, const double &g0, const double &k0, const double &m, const double &g, const double &k)
EvtComplex propBreitWigner(const double &m0, const double &g0, const double &m)
EvtComplex propBreitWignerRel(const double &m0, const double &g0, const double &m)
EvtComplex _fr14prod
EvtComplex _fr13prod
EvtComplex _fr15prod
EvtDalitzReso(const EvtDalitzPlot &dp, EvtCyclic3::Pair pairRes, NumType typeN, double alpha=0.0)
EvtComplex propBreitWignerRelCoupled(const double &m0, const EvtComplex &g1, const EvtComplex &g2, const double &m)
double GS_f(const double &m0, const double &g0, const double &k0, const double &m, const double &k)
EvtCyclic3::Pair _pairRes
EvtDalitzPlot _dp
double angDep(const EvtDalitzPoint &p)
EvtComplex flatte(const double &m)
EvtComplex psFactor(double &ma, double &mb, double &m)
EvtComplex numerator(const EvtDalitzPoint &p, const EvtTwoBodyKine &vb, const EvtTwoBodyKine &vd)
void set_fb(double R)
double GS_dhods(const double &m0, const double &k0)