EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
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
32
33#include <map>
34#include <string>
35#include <vector>
36
37using std::map;
38using std::vector;
39
41
42class EvtDalitzReso final {
43 public:
44 // Numerator type
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
89
91
93 NumType typeN, double alpha = 0.0 ) :
94 m_dp( dp ), m_pairRes( pairRes ), m_typeN( typeN ), m_alpha( alpha ){};
95
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 ) const;
128
129 void addFlatteParam( const EvtFlatteParam& param )
130 {
131 m_flatteParams.push_back( param );
132 }
133
134 private:
135 EvtComplex psFactor( const double ma, const double mb, const double m ) const;
136 EvtComplex psFactor( const double ma1, const double mb1, const double ma2,
137 const double mb2, const double m ) const;
138 EvtComplex propGauss( const double m0, const double s0, const double m ) const;
139 EvtComplex propBreitWigner( const double m0, const double g0,
140 const double m ) const;
141 EvtComplex propBreitWignerRel( const double m0, const double g0,
142 const double m ) const;
143 EvtComplex propBreitWignerRel( const double m0, const EvtComplex& g0,
144 const double m ) const;
145 EvtComplex propBreitWignerRelCoupled( const double m0, const EvtComplex& g1,
146 const EvtComplex& g2,
147 const double m ) const;
148 EvtComplex propGounarisSakurai( const double m0, const double g0,
149 const double k0, const double m,
150 const double g, const double k ) const;
151 inline double GS_f( const double m0, const double g0, const double k0,
152 const double m, const double k ) const;
153 inline double GS_h( const double m, const double k ) const;
154 inline double GS_dhods( const double m0, const double k0 ) const;
155 inline double GS_d( const double m0, const double k0 ) const;
156
158 const EvtTwoBodyVertex& vd, const EvtTwoBodyKine& kb,
159 const EvtTwoBodyKine& kd ) const;
160 double angDep( const EvtDalitzPoint& p ) const;
161 EvtComplex mixFactor( const EvtComplex& prop,
162 const EvtComplex& prop_mix ) const;
163 EvtComplex Fvector( const double s, const int index ) const;
164 EvtComplex lass( const EvtTwoBodyKine& kd, const EvtTwoBodyVertex& vd ) const;
165 EvtComplex flatte( const double s ) const;
166
167 inline EvtComplex sqrtCplx( const double in ) const
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 m_m0, m_g0;
188
189 // Daughter masses
191
192 // variables for electromagnetic mass mixing
195
196 // variables for coupled Breit-Wigner
197 double m_g1, m_g2;
199
200 // variables for Blatt-Weisskopf form factors
201 double m_f_b, m_f_d;
202
203 // K-matrix
206 double m_s0prod;
207
208 // LASS
209 double m_a;
210 double m_r;
211 double m_Blass;
212 double m_phiB;
213 double m_R;
214 double m_phiR;
215 double m_cutoff;
217
218 //Nonresonant
219 double m_alpha;
220
221 // Flatte
222 std::vector<EvtFlatteParam> m_flatteParams;
223};
224
225#endif
EvtComplex sqrtCplx(const double in) const
void addFlatteParam(const EvtFlatteParam &param)
EvtComplex propGauss(const double m0, const double s0, const double m) const
std::vector< EvtFlatteParam > m_flatteParams
EvtDalitzPlot m_dp
EvtComplex propBreitWigner(const double m0, const double g0, const double m) const
EvtComplex m_amp_mix
EvtComplex lass(const EvtTwoBodyKine &kd, const EvtTwoBodyVertex &vd) const
EvtComplex propBreitWignerRelCoupled(const double m0, const EvtComplex &g1, const EvtComplex &g2, const double m) const
EvtSpinType::spintype m_spin
EvtComplex propGounarisSakurai(const double m0, const double g0, const double k0, const double m, const double g, const double k) const
EvtComplex numerator(const EvtDalitzPoint &p, const EvtTwoBodyVertex &vb, const EvtTwoBodyVertex &vd, const EvtTwoBodyKine &kb, const EvtTwoBodyKine &kd) const
EvtComplex m_fr13prod
CouplingType m_coupling2
EvtCyclic3::Pair m_pairRes
EvtComplex flatte(const double s) const
EvtDalitzReso * clone() const
double GS_h(const double m, const double k) const
EvtComplex m_fr14prod
double GS_d(const double m0, const double k0) const
double GS_f(const double m0, const double g0, const double k0, const double m, const double k) const
EvtComplex m_fr15prod
EvtComplex mixFactor(const EvtComplex &prop, const EvtComplex &prop_mix) const
double angDep(const EvtDalitzPoint &p) const
EvtComplex propBreitWignerRel(const double m0, const double g0, const double m) const
EvtDalitzReso(const EvtDalitzPlot &dp, EvtCyclic3::Pair pairRes, NumType typeN, double alpha=0.0)
EvtComplex m_fr12prod
EvtComplex psFactor(const double ma, const double mb, const double m) const
EvtComplex evaluate(const EvtDalitzPoint &p) const
EvtComplex Fvector(const double s, const int index) const
EvtCyclic3::Pair m_pairAng
double GS_dhods(const double m0, const double k0) const