Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F19244945
EvtDalitzReso.cpp
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
34 KB
Referenced Files
None
Subscribers
None
EvtDalitzReso.cpp
View Options
/***********************************************************************
* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
* *
* This file is part of EvtGen. *
* *
* EvtGen is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* EvtGen is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
***********************************************************************/
#include
"EvtGenBase/EvtDalitzReso.hh"
#include
"EvtGenBase/EvtCyclic3.hh"
#include
"EvtGenBase/EvtGenKine.hh"
#include
"EvtGenBase/EvtMatrix.hh"
#include
"EvtGenBase/EvtPDL.hh"
#include
"EvtGenBase/EvtParticle.hh"
#include
"EvtGenBase/EvtPatches.hh"
#include
"EvtGenBase/EvtReport.hh"
#include
"EvtGenBase/EvtdFunction.hh"
#include
<assert.h>
#include
<cmath>
#include
<iostream>
#include
<stdlib.h>
#define PRECISION ( 1.e-3 )
using
EvtCyclic3
::
Index
;
using
EvtCyclic3
::
Pair
;
// single Breit-Wigner
EvtDalitzReso
::
EvtDalitzReso
(
const
EvtDalitzPlot
&
dp
,
Pair
pairAng
,
Pair
pairRes
,
EvtSpinType
::
spintype
spin
,
double
m0
,
double
g0
,
NumType
typeN
,
double
f_b
,
double
f_d
)
:
_dp
(
dp
),
_pairAng
(
pairAng
),
_pairRes
(
pairRes
),
_spin
(
spin
),
_typeN
(
typeN
),
_m0
(
m0
),
_g0
(
g0
),
_massFirst
(
dp
.
m
(
first
(
pairRes
)
)
),
_massSecond
(
dp
.
m
(
second
(
pairRes
)
)
),
_m0_mix
(
-
1.
),
_g0_mix
(
0.
),
_delta_mix
(
0.
),
_amp_mix
(
0.
,
0.
),
_g1
(
-
1.
),
_g2
(
-
1.
),
_coupling2
(
Undefined
),
_f_b
(
f_b
),
_f_d
(
f_d
),
_kmatrix_index
(
-
1
),
_fr12prod
(
0.
,
0.
),
_fr13prod
(
0.
,
0.
),
_fr14prod
(
0.
,
0.
),
_fr15prod
(
0.
,
0.
),
_s0prod
(
0.
),
_a
(
0.
),
_r
(
0.
),
_Blass
(
0.
),
_phiB
(
0.
),
_R
(
0.
),
_phiR
(
0.
),
_cutoff
(
-
1.
),
_scaleByMOverQ
(
false
),
_alpha
(
0.
)
{
_vb
=
EvtTwoBodyVertex
(
_m0
,
_dp
.
m
(
EvtCyclic3
::
other
(
_pairRes
)
),
_dp
.
bigM
(),
_spin
);
_vd
=
EvtTwoBodyVertex
(
_massFirst
,
_massSecond
,
_m0
,
_spin
);
_vb
.
set_f
(
_f_b
);
// Default values for Blatt-Weisskopf factors are 0.0 and 1.5.
_vd
.
set_f
(
_f_d
);
assert
(
_typeN
!=
K_MATRIX
&&
_typeN
!=
K_MATRIX_I
&&
_typeN
!=
K_MATRIX_II
);
// single BW cannot be K-matrix
}
// Breit-Wigner with electromagnetic mass mixing
EvtDalitzReso
::
EvtDalitzReso
(
const
EvtDalitzPlot
&
dp
,
Pair
pairAng
,
Pair
pairRes
,
EvtSpinType
::
spintype
spin
,
double
m0
,
double
g0
,
NumType
typeN
,
double
m0_mix
,
double
g0_mix
,
double
delta_mix
,
EvtComplex
amp_mix
)
:
_dp
(
dp
),
_pairAng
(
pairAng
),
_pairRes
(
pairRes
),
_spin
(
spin
),
_typeN
(
typeN
),
_m0
(
m0
),
_g0
(
g0
),
_massFirst
(
dp
.
m
(
first
(
pairRes
)
)
),
_massSecond
(
dp
.
m
(
second
(
pairRes
)
)
),
_m0_mix
(
m0_mix
),
_g0_mix
(
g0_mix
),
_delta_mix
(
delta_mix
),
_amp_mix
(
amp_mix
),
_g1
(
-
1.
),
_g2
(
-
1.
),
_coupling2
(
Undefined
),
_f_b
(
0.0
),
_f_d
(
1.5
),
_kmatrix_index
(
-
1
),
_fr12prod
(
0.
,
0.
),
_fr13prod
(
0.
,
0.
),
_fr14prod
(
0.
,
0.
),
_fr15prod
(
0.
,
0.
),
_s0prod
(
0.
),
_a
(
0.
),
_r
(
0.
),
_Blass
(
0.
),
_phiB
(
0.
),
_R
(
0.
),
_phiR
(
0.
),
_cutoff
(
-
1.
),
_scaleByMOverQ
(
false
),
_alpha
(
0.
)
{
_vb
=
EvtTwoBodyVertex
(
_m0
,
_dp
.
m
(
EvtCyclic3
::
other
(
_pairRes
)
),
_dp
.
bigM
(),
_spin
);
_vd
=
EvtTwoBodyVertex
(
_massFirst
,
_massSecond
,
_m0
,
_spin
);
_vb
.
set_f
(
0.0
);
// Default values for Blatt-Weisskopf factors.
_vd
.
set_f
(
1.5
);
// single BW (with electromagnetic mixing) cannot be K-matrix
assert
(
_typeN
!=
K_MATRIX
&&
_typeN
!=
K_MATRIX_I
&&
_typeN
!=
K_MATRIX_II
);
}
// coupled Breit-Wigner
EvtDalitzReso
::
EvtDalitzReso
(
const
EvtDalitzPlot
&
dp
,
Pair
pairAng
,
Pair
pairRes
,
EvtSpinType
::
spintype
spin
,
double
m0
,
NumType
typeN
,
double
g1
,
double
g2
,
CouplingType
coupling2
)
:
_dp
(
dp
),
_pairAng
(
pairAng
),
_pairRes
(
pairRes
),
_spin
(
spin
),
_typeN
(
typeN
),
_m0
(
m0
),
_g0
(
-
1.
),
_massFirst
(
dp
.
m
(
first
(
pairRes
)
)
),
_massSecond
(
dp
.
m
(
second
(
pairRes
)
)
),
_m0_mix
(
-
1.
),
_g0_mix
(
0.
),
_delta_mix
(
0.
),
_amp_mix
(
0.
,
0.
),
_g1
(
g1
),
_g2
(
g2
),
_coupling2
(
coupling2
),
_f_b
(
0.0
),
_f_d
(
1.5
),
_kmatrix_index
(
-
1
),
_fr12prod
(
0.
,
0.
),
_fr13prod
(
0.
,
0.
),
_fr14prod
(
0.
,
0.
),
_fr15prod
(
0.
,
0.
),
_s0prod
(
0.
),
_a
(
0.
),
_r
(
0.
),
_Blass
(
0.
),
_phiB
(
0.
),
_R
(
0.
),
_phiR
(
0.
),
_cutoff
(
-
1.
),
_scaleByMOverQ
(
false
),
_alpha
(
0.
)
{
_vb
=
EvtTwoBodyVertex
(
_m0
,
_dp
.
m
(
EvtCyclic3
::
other
(
_pairRes
)
),
_dp
.
bigM
(),
_spin
);
_vd
=
EvtTwoBodyVertex
(
_massFirst
,
_massSecond
,
_m0
,
_spin
);
_vb
.
set_f
(
0.0
);
// Default values for Blatt-Weisskopf factors.
_vd
.
set_f
(
1.5
);
assert
(
_coupling2
!=
Undefined
);
assert
(
_typeN
!=
K_MATRIX
&&
_typeN
!=
K_MATRIX_I
&&
_typeN
!=
K_MATRIX_II
);
// coupled BW cannot be K-matrix
assert
(
_typeN
!=
LASS
);
// coupled BW cannot be LASS
assert
(
_typeN
!=
NBW
);
// for coupled BW, only relativistic BW
}
// K-Matrix (A&S)
EvtDalitzReso
::
EvtDalitzReso
(
const
EvtDalitzPlot
&
dp
,
Pair
pairRes
,
std
::
string
nameIndex
,
NumType
typeN
,
EvtComplex
fr12prod
,
EvtComplex
fr13prod
,
EvtComplex
fr14prod
,
EvtComplex
fr15prod
,
double
s0prod
)
:
_dp
(
dp
),
_pairRes
(
pairRes
),
_typeN
(
typeN
),
_m0
(
0.
),
_g0
(
0.
),
_massFirst
(
dp
.
m
(
first
(
pairRes
)
)
),
_massSecond
(
dp
.
m
(
second
(
pairRes
)
)
),
_m0_mix
(
-
1.
),
_g0_mix
(
0.
),
_delta_mix
(
0.
),
_amp_mix
(
0.
,
0.
),
_g1
(
-
1.
),
_g2
(
-
1.
),
_coupling2
(
Undefined
),
_f_b
(
0.
),
_f_d
(
0.
),
_kmatrix_index
(
-
1
),
_fr12prod
(
fr12prod
),
_fr13prod
(
fr13prod
),
_fr14prod
(
fr14prod
),
_fr15prod
(
fr15prod
),
_s0prod
(
s0prod
),
_a
(
0.
),
_r
(
0.
),
_Blass
(
0.
),
_phiB
(
0.
),
_R
(
0.
),
_phiR
(
0.
),
_cutoff
(
-
1.
),
_scaleByMOverQ
(
false
),
_alpha
(
0.
)
{
assert
(
_typeN
==
K_MATRIX
||
_typeN
==
K_MATRIX_I
||
_typeN
==
K_MATRIX_II
);
_spin
=
EvtSpinType
::
SCALAR
;
if
(
nameIndex
==
"Pole1"
)
_kmatrix_index
=
1
;
else
if
(
nameIndex
==
"Pole2"
)
_kmatrix_index
=
2
;
else
if
(
nameIndex
==
"Pole3"
)
_kmatrix_index
=
3
;
else
if
(
nameIndex
==
"Pole4"
)
_kmatrix_index
=
4
;
else
if
(
nameIndex
==
"Pole5"
)
_kmatrix_index
=
5
;
else
if
(
nameIndex
==
"f11prod"
)
_kmatrix_index
=
6
;
else
assert
(
0
);
}
// LASS parameterization
EvtDalitzReso
::
EvtDalitzReso
(
const
EvtDalitzPlot
&
dp
,
Pair
pairRes
,
double
m0
,
double
g0
,
double
a
,
double
r
,
double
B
,
double
phiB
,
double
R
,
double
phiR
,
double
cutoff
,
bool
scaleByMOverQ
)
:
_dp
(
dp
),
_pairRes
(
pairRes
),
_typeN
(
LASS
),
_m0
(
m0
),
_g0
(
g0
),
_massFirst
(
dp
.
m
(
first
(
pairRes
)
)
),
_massSecond
(
dp
.
m
(
second
(
pairRes
)
)
),
_m0_mix
(
-
1.
),
_g0_mix
(
0.
),
_delta_mix
(
0.
),
_amp_mix
(
0.
,
0.
),
_g1
(
-
1.
),
_g2
(
-
1.
),
_coupling2
(
Undefined
),
_f_b
(
0.0
),
_f_d
(
1.5
),
_kmatrix_index
(
-
1
),
_fr12prod
(
0.
,
0.
),
_fr13prod
(
0.
,
0.
),
_fr14prod
(
0.
,
0.
),
_fr15prod
(
0.
,
0.
),
_s0prod
(
0.
),
_a
(
a
),
_r
(
r
),
_Blass
(
B
),
_phiB
(
phiB
),
_R
(
R
),
_phiR
(
phiR
),
_cutoff
(
cutoff
),
_scaleByMOverQ
(
scaleByMOverQ
),
_alpha
(
0.
)
{
_spin
=
EvtSpinType
::
SCALAR
;
_vd
=
EvtTwoBodyVertex
(
_massFirst
,
_massSecond
,
_m0
,
_spin
);
_vd
.
set_f
(
1.5
);
// Default values for Blatt-Weisskopf factors.
}
//Flatte
EvtDalitzReso
::
EvtDalitzReso
(
const
EvtDalitzPlot
&
dp
,
EvtCyclic3
::
Pair
pairRes
,
double
m0
)
:
_dp
(
dp
),
_pairRes
(
pairRes
),
_typeN
(
FLATTE
),
_m0
(
m0
),
_g0
(
0.
),
_massFirst
(
dp
.
m
(
first
(
pairRes
)
)
),
_massSecond
(
dp
.
m
(
second
(
pairRes
)
)
),
_m0_mix
(
-
1.
),
_g0_mix
(
0.
),
_delta_mix
(
0.
),
_amp_mix
(
0.
,
0.
),
_g1
(
-
1.
),
_g2
(
-
1.
),
_coupling2
(
Undefined
),
_f_b
(
0.
),
_f_d
(
0.
),
_kmatrix_index
(
-
1
),
_fr12prod
(
0.
,
0.
),
_fr13prod
(
0.
,
0.
),
_fr14prod
(
0.
,
0.
),
_fr15prod
(
0.
,
0.
),
_s0prod
(
0.
),
_a
(
0.
),
_r
(
0.
),
_Blass
(
0.
),
_phiB
(
0.
),
_R
(
0.
),
_phiR
(
0.
),
_cutoff
(
-
1.
),
_scaleByMOverQ
(
false
),
_alpha
(
0.
)
{
_spin
=
EvtSpinType
::
SCALAR
;
}
EvtComplex
EvtDalitzReso
::
evaluate
(
const
EvtDalitzPoint
&
x
)
{
double
m
=
sqrt
(
x
.
q
(
_pairRes
)
);
if
(
_typeN
==
NON_RES
)
return
EvtComplex
(
1.0
,
0.0
);
if
(
_typeN
==
NON_RES_LIN
)
return
m
*
m
;
if
(
_typeN
==
NON_RES_EXP
)
return
exp
(
-
_alpha
*
m
*
m
);
// do use always hash table (speed up fitting)
if
(
_typeN
==
K_MATRIX
||
_typeN
==
K_MATRIX_I
||
_typeN
==
K_MATRIX_II
)
return
Fvector
(
m
*
m
,
_kmatrix_index
);
if
(
_typeN
==
LASS
)
return
lass
(
m
*
m
);
if
(
_typeN
==
FLATTE
)
return
flatte
(
m
);
EvtComplex
amp
(
1.0
,
0.0
);
if
(
fabs
(
_dp
.
bigM
()
-
x
.
bigM
()
)
>
0.000001
)
{
_vb
=
EvtTwoBodyVertex
(
_m0
,
_dp
.
m
(
EvtCyclic3
::
other
(
_pairRes
)
),
x
.
bigM
(),
_spin
);
_vb
.
set_f
(
_f_b
);
}
EvtTwoBodyKine
vb
(
m
,
x
.
m
(
EvtCyclic3
::
other
(
_pairRes
)
),
x
.
bigM
()
);
EvtTwoBodyKine
vd
(
_massFirst
,
_massSecond
,
m
);
EvtComplex
prop
(
0
,
0
);
if
(
_typeN
==
NBW
)
{
prop
=
propBreitWigner
(
_m0
,
_g0
,
m
);
}
else
if
(
_typeN
==
GAUSS_CLEO
||
_typeN
==
GAUSS_CLEO_ZEMACH
)
{
prop
=
propGauss
(
_m0
,
_g0
,
m
);
}
else
{
if
(
_coupling2
==
Undefined
)
{
// single BW
double
g
=
(
_g0
<=
0.
||
_vd
.
pD
()
<=
0.
)
?
-
_g0
:
_g0
*
_vd
.
widthFactor
(
vd
);
// running width
if
(
_typeN
==
GS_CLEO
||
_typeN
==
GS_CLEO_ZEMACH
)
{
// Gounaris-Sakurai (GS)
prop
=
propGounarisSakurai
(
_m0
,
fabs
(
_g0
),
_vd
.
pD
(),
m
,
g
,
vd
.
p
()
);
}
else
{
// standard relativistic BW
prop
=
propBreitWignerRel
(
_m0
,
g
,
m
);
}
}
else
{
// coupled width BW
EvtComplex
G1
,
G2
;
switch
(
_coupling2
)
{
case
PicPic
:
{
G1
=
_g1
*
_g1
*
psFactor
(
_massFirst
,
_massSecond
,
m
);
static
double
mPic
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"pi+"
)
);
G2
=
_g2
*
_g2
*
psFactor
(
mPic
,
mPic
,
m
);
break
;
}
case
PizPiz
:
{
G1
=
_g1
*
_g1
*
psFactor
(
_massFirst
,
_massSecond
,
m
);
static
double
mPiz
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"pi0"
)
);
G2
=
_g2
*
_g2
*
psFactor
(
mPiz
,
mPiz
,
m
);
break
;
}
case
PiPi
:
{
G1
=
_g1
*
_g1
*
psFactor
(
_massFirst
,
_massSecond
,
m
);
static
double
mPic
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"pi+"
)
);
static
double
mPiz
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"pi0"
)
);
G2
=
_g2
*
_g2
*
psFactor
(
mPic
,
mPic
,
mPiz
,
mPiz
,
m
);
break
;
}
case
KcKc
:
{
G1
=
_g1
*
_g1
*
psFactor
(
_massFirst
,
_massSecond
,
m
);
static
double
mKc
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"K+"
)
);
G2
=
_g2
*
_g2
*
psFactor
(
mKc
,
mKc
,
m
);
break
;
}
case
KzKz
:
{
G1
=
_g1
*
_g1
*
psFactor
(
_massFirst
,
_massSecond
,
m
);
static
double
mKz
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"K0"
)
);
G2
=
_g2
*
_g2
*
psFactor
(
mKz
,
mKz
,
m
);
break
;
}
case
KK
:
{
G1
=
_g1
*
_g1
*
psFactor
(
_massFirst
,
_massSecond
,
m
);
static
double
mKc
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"K+"
)
);
static
double
mKz
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"K0"
)
);
G2
=
_g2
*
_g2
*
psFactor
(
mKc
,
mKc
,
mKz
,
mKz
,
m
);
break
;
}
case
EtaPic
:
{
G1
=
_g1
*
_g1
*
psFactor
(
_massFirst
,
_massSecond
,
m
);
static
double
mEta
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"eta"
)
);
static
double
mPic
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"pi+"
)
);
G2
=
_g2
*
_g2
*
psFactor
(
mEta
,
mPic
,
m
);
break
;
}
case
EtaPiz
:
{
G1
=
_g1
*
_g1
*
psFactor
(
_massFirst
,
_massSecond
,
m
);
static
double
mEta
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"eta"
)
);
static
double
mPiz
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"pi0"
)
);
G2
=
_g2
*
_g2
*
psFactor
(
mEta
,
mPiz
,
m
);
break
;
}
case
PicPicKK
:
{
static
double
mPic
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"pi+"
)
);
//G1 = _g1*_g1*psFactor(mPic,mPic,m);
G1
=
_g1
*
psFactor
(
mPic
,
mPic
,
m
);
static
double
mKc
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"K+"
)
);
static
double
mKz
=
EvtPDL
::
getMass
(
EvtPDL
::
getId
(
"K0"
)
);
//G2 = _g2*_g2*psFactor(mKc,mKc,mKz,mKz,m);
G2
=
_g2
*
psFactor
(
mKc
,
mKc
,
mKz
,
mKz
,
m
);
break
;
}
default
:
std
::
cout
<<
"EvtDalitzReso:evaluate(): PANIC, wrong coupling2 state."
<<
std
::
endl
;
assert
(
0
);
break
;
}
// calculate standard couple BW propagator
if
(
_coupling2
!=
WA76
)
prop
=
_g1
*
propBreitWignerRelCoupled
(
_m0
,
G1
,
G2
,
m
);
}
}
amp
*=
prop
;
// Compute form-factors (Blatt-Weisskopf penetration factor)
amp
*=
_vb
.
formFactor
(
vb
);
amp
*=
_vd
.
formFactor
(
vd
);
// Compute numerator (angular distribution)
amp
*=
numerator
(
x
,
vb
,
vd
);
// Compute electromagnetic mass mixing factor
if
(
_m0_mix
>
0.
)
{
EvtComplex
prop_mix
;
if
(
_typeN
==
NBW
)
{
prop_mix
=
propBreitWigner
(
_m0_mix
,
_g0_mix
,
m
);
}
else
{
assert
(
_g1
<
0.
);
// running width only
double
g_mix
=
_g0_mix
*
_vd
.
widthFactor
(
vd
);
prop_mix
=
propBreitWignerRel
(
_m0_mix
,
g_mix
,
m
);
}
amp
*=
mixFactor
(
prop
,
prop_mix
);
}
return
amp
;
}
EvtComplex
EvtDalitzReso
::
psFactor
(
double
&
ma
,
double
&
mb
,
double
&
m
)
{
if
(
m
>
(
ma
+
mb
)
)
{
EvtTwoBodyKine
vd
(
ma
,
mb
,
m
);
return
EvtComplex
(
0
,
2
*
vd
.
p
()
/
m
);
}
else
{
// analytical continuation
double
s
=
m
*
m
;
double
phaseFactor_analyticalCont
=
-
0.5
*
(
sqrt
(
4
*
ma
*
ma
/
s
-
1
)
+
sqrt
(
4
*
mb
*
mb
/
s
-
1
)
);
return
EvtComplex
(
phaseFactor_analyticalCont
,
0
);
}
}
EvtComplex
EvtDalitzReso
::
psFactor
(
double
&
ma1
,
double
&
mb1
,
double
&
ma2
,
double
&
mb2
,
double
&
m
)
{
return
0.5
*
(
psFactor
(
ma1
,
mb1
,
m
)
+
psFactor
(
ma2
,
mb2
,
m
)
);
}
EvtComplex
EvtDalitzReso
::
propGauss
(
const
double
&
m0
,
const
double
&
s0
,
const
double
&
m
)
{
// Gaussian
double
gauss
=
1.
/
sqrt
(
EvtConst
::
twoPi
)
/
s0
*
exp
(
-
(
m
-
m0
)
*
(
m
-
m0
)
/
2.
/
(
s0
*
s0
)
);
return
EvtComplex
(
gauss
,
0.
);
}
EvtComplex
EvtDalitzReso
::
propBreitWigner
(
const
double
&
m0
,
const
double
&
g0
,
const
double
&
m
)
{
// non-relativistic BW
return
sqrt
(
g0
/
EvtConst
::
twoPi
)
/
(
m
-
m0
-
EvtComplex
(
0.0
,
g0
/
2.
)
);
}
EvtComplex
EvtDalitzReso
::
propBreitWignerRel
(
const
double
&
m0
,
const
double
&
g0
,
const
double
&
m
)
{
// relativistic BW with real width
return
1.
/
(
m0
*
m0
-
m
*
m
-
EvtComplex
(
0.
,
m0
*
g0
)
);
}
EvtComplex
EvtDalitzReso
::
propBreitWignerRel
(
const
double
&
m0
,
const
EvtComplex
&
g0
,
const
double
&
m
)
{
// relativistic BW with complex width
return
1.
/
(
m0
*
m0
-
m
*
m
-
EvtComplex
(
0.
,
m0
)
*
g0
);
}
EvtComplex
EvtDalitzReso
::
propBreitWignerRelCoupled
(
const
double
&
m0
,
const
EvtComplex
&
g1
,
const
EvtComplex
&
g2
,
const
double
&
m
)
{
// relativistic coupled BW
return
1.
/
(
m0
*
m0
-
m
*
m
-
(
g1
+
g2
)
);
}
EvtComplex
EvtDalitzReso
::
propGounarisSakurai
(
const
double
&
m0
,
const
double
&
g0
,
const
double
&
k0
,
const
double
&
m
,
const
double
&
g
,
const
double
&
k
)
{
// Gounaris-Sakurai parameterization of pi+pi- P wave. PRD, Vol61, 112002. PRL, Vol21, 244.
// Expressions taken from BAD637v4, after fixing the imaginary part of the BW denominator: i M_R Gamma_R(s) --> i sqrt(s) Gamma_R(s)
return
(
1.
+
GS_d
(
m0
,
k0
)
*
g0
/
m0
)
/
(
m0
*
m0
-
m
*
m
-
EvtComplex
(
0.
,
m
*
g
)
+
GS_f
(
m0
,
g0
,
k0
,
m
,
k
)
);
}
inline
double
EvtDalitzReso
::
GS_f
(
const
double
&
m0
,
const
double
&
g0
,
const
double
&
k0
,
const
double
&
m
,
const
double
&
k
)
{
// m: sqrt(s)
// m0: nominal resonance mass
// k: momentum of pion in resonance rest frame (at m)
// k0: momentum of pion in resonance rest frame (at nominal resonance mass)
return
g0
*
m0
*
m0
/
(
k0
*
k0
*
k0
)
*
(
k
*
k
*
(
GS_h
(
m
,
k
)
-
GS_h
(
m0
,
k0
)
)
+
(
m0
*
m0
-
m
*
m
)
*
k0
*
k0
*
GS_dhods
(
m0
,
k0
)
);
}
inline
double
EvtDalitzReso
::
GS_h
(
const
double
&
m
,
const
double
&
k
)
{
return
2.
/
EvtConst
::
pi
*
k
/
m
*
log
(
(
m
+
2.
*
k
)
/
(
2.
*
_massFirst
)
);
}
inline
double
EvtDalitzReso
::
GS_dhods
(
const
double
&
m0
,
const
double
&
k0
)
{
return
GS_h
(
m0
,
k0
)
*
(
0.125
/
(
k0
*
k0
)
-
0.5
/
(
m0
*
m0
)
)
+
0.5
/
(
EvtConst
::
pi
*
m0
*
m0
);
}
inline
double
EvtDalitzReso
::
GS_d
(
const
double
&
m0
,
const
double
&
k0
)
{
return
3.
/
EvtConst
::
pi
*
_massFirst
*
_massFirst
/
(
k0
*
k0
)
*
log
(
(
m0
+
2.
*
k0
)
/
(
2.
*
_massFirst
)
)
+
m0
/
(
2.
*
EvtConst
::
pi
*
k0
)
-
_massFirst
*
_massFirst
*
m0
/
(
EvtConst
::
pi
*
k0
*
k0
*
k0
);
}
EvtComplex
EvtDalitzReso
::
numerator
(
const
EvtDalitzPoint
&
x
,
const
EvtTwoBodyKine
&
vb
,
const
EvtTwoBodyKine
&
vd
)
{
EvtComplex
ret
(
0.
,
0.
);
// Non-relativistic Breit-Wigner
if
(
NBW
==
_typeN
)
{
ret
=
angDep
(
x
);
}
// Standard relativistic Zemach propagator
else
if
(
RBW_ZEMACH
==
_typeN
)
{
ret
=
_vd
.
phaseSpaceFactor
(
vd
,
EvtTwoBodyKine
::
AB
)
*
angDep
(
x
);
}
// Standard relativistic Zemach propagator
else
if
(
RBW_ZEMACH2
==
_typeN
)
{
ret
=
_vd
.
phaseSpaceFactor
(
vd
,
EvtTwoBodyKine
::
AB
)
*
_vb
.
phaseSpaceFactor
(
vb
,
EvtTwoBodyKine
::
AB
)
*
angDep
(
x
);
if
(
_spin
==
EvtSpinType
::
VECTOR
)
{
ret
*=
-
4.
;
}
else
if
(
_spin
==
EvtSpinType
::
TENSOR
)
{
ret
*=
16.
/
3.
;
}
else
if
(
_spin
!=
EvtSpinType
::
SCALAR
)
assert
(
0
);
}
// Kuehn-Santamaria normalization:
else
if
(
RBW_KUEHN
==
_typeN
)
{
ret
=
_m0
*
_m0
*
angDep
(
x
);
}
// CLEO amplitude
else
if
(
(
RBW_CLEO
==
_typeN
)
||
(
GS_CLEO
==
_typeN
)
||
(
RBW_CLEO_ZEMACH
==
_typeN
)
||
(
GS_CLEO_ZEMACH
==
_typeN
)
||
(
GAUSS_CLEO
==
_typeN
)
||
(
GAUSS_CLEO_ZEMACH
==
_typeN
)
)
{
Index
iA
=
other
(
_pairAng
);
// A = other(BC)
Index
iB
=
common
(
_pairRes
,
_pairAng
);
// B = common(AB,BC)
Index
iC
=
other
(
_pairRes
);
// C = other(AB)
double
M
=
x
.
bigM
();
double
mA
=
x
.
m
(
iA
);
double
mB
=
x
.
m
(
iB
);
double
mC
=
x
.
m
(
iC
);
double
qAB
=
x
.
q
(
combine
(
iA
,
iB
)
);
double
qBC
=
x
.
q
(
combine
(
iB
,
iC
)
);
double
qCA
=
x
.
q
(
combine
(
iC
,
iA
)
);
double
M2
=
M
*
M
;
double
m02
=
(
(
RBW_CLEO_ZEMACH
==
_typeN
)
||
(
GS_CLEO_ZEMACH
==
_typeN
)
||
(
GAUSS_CLEO_ZEMACH
==
_typeN
)
)
?
qAB
:
_m0
*
_m0
;
double
mA2
=
mA
*
mA
;
double
mB2
=
mB
*
mB
;
double
mC2
=
mC
*
mC
;
if
(
_spin
==
EvtSpinType
::
SCALAR
)
ret
=
EvtComplex
(
1.
,
0.
);
else
if
(
_spin
==
EvtSpinType
::
VECTOR
)
{
ret
=
qCA
-
qBC
+
(
M2
-
mC2
)
*
(
mB2
-
mA2
)
/
m02
;
}
else
if
(
_spin
==
EvtSpinType
::
TENSOR
)
{
double
x1
=
qBC
-
qCA
+
(
M2
-
mC2
)
*
(
mA2
-
mB2
)
/
m02
;
double
x2
=
M2
-
mC2
;
double
x3
=
qAB
-
2
*
M2
-
2
*
mC2
+
x2
*
x2
/
m02
;
double
x4
=
mA2
-
mB2
;
double
x5
=
qAB
-
2
*
mB2
-
2
*
mA2
+
x4
*
x4
/
m02
;
ret
=
x1
*
x1
-
x3
*
x5
/
3.
;
}
else
assert
(
0
);
}
return
ret
;
}
double
EvtDalitzReso
::
angDep
(
const
EvtDalitzPoint
&
x
)
{
// Angular dependece for factorizable amplitudes
// unphysical cosines indicate we are in big trouble
double
cosTh
=
x
.
cosTh
(
_pairAng
,
_pairRes
);
// angle between common(reso,ang) and other(reso)
if
(
fabs
(
cosTh
)
>
1.
)
{
EvtGenReport
(
EVTGEN_INFO
,
"EvtGen"
)
<<
"cosTh "
<<
cosTh
<<
std
::
endl
;
assert
(
0
);
}
// in units of half-spin
return
EvtdFunction
::
d
(
EvtSpinType
::
getSpin2
(
_spin
),
2
*
0
,
2
*
0
,
acos
(
cosTh
)
);
}
EvtComplex
EvtDalitzReso
::
mixFactor
(
EvtComplex
prop
,
EvtComplex
prop_mix
)
{
double
Delta
=
_delta_mix
*
(
_m0
+
_m0_mix
);
return
1
/
(
1
-
Delta
*
Delta
*
prop
*
prop_mix
)
*
(
1
+
_amp_mix
*
Delta
*
prop_mix
);
}
EvtComplex
EvtDalitzReso
::
Fvector
(
double
s
,
int
index
)
{
assert
(
index
>=
1
&&
index
<=
6
);
//Define the complex coupling constant
//The convection is as follow
//i=0 --> pi+ pi-
//i=1 --> KK
//i=2 --> 4pi
//i=3 --> eta eta
//i=4 --> eta eta'
//The first index is the resonace-pole index
double
g
[
5
][
5
];
// Coupling constants. The first index is the pole index. The second index is the decay channel
double
ma
[
5
];
// Pole masses. The unit is in GeV
int
solution
=
(
_typeN
==
K_MATRIX
)
?
3
:
(
(
_typeN
==
K_MATRIX_I
)
?
1
:
(
(
_typeN
==
K_MATRIX_II
)
?
2
:
0
)
);
if
(
solution
==
0
)
{
std
::
cout
<<
"EvtDalitzReso::Fvector() error. Kmatrix solution incorrectly chosen ! "
<<
std
::
endl
;
abort
();
}
if
(
solution
==
3
)
{
// coupling constants
//pi+pi- channel
g
[
0
][
0
]
=
0.22889
;
g
[
1
][
0
]
=
0.94128
;
g
[
2
][
0
]
=
0.36856
;
g
[
3
][
0
]
=
0.33650
;
g
[
4
][
0
]
=
0.18171
;
//K+K- channel
g
[
0
][
1
]
=
-
0.55377
;
g
[
1
][
1
]
=
0.55095
;
g
[
2
][
1
]
=
0.23888
;
g
[
3
][
1
]
=
0.40907
;
g
[
4
][
1
]
=
-
0.17558
;
//4pi channel
g
[
0
][
2
]
=
0
;
g
[
1
][
2
]
=
0
;
g
[
2
][
2
]
=
0.55639
;
g
[
3
][
2
]
=
0.85679
;
g
[
4
][
2
]
=
-
0.79658
;
//eta eta channel
g
[
0
][
3
]
=
-
0.39899
;
g
[
1
][
3
]
=
0.39065
;
g
[
2
][
3
]
=
0.18340
;
g
[
3
][
3
]
=
0.19906
;
g
[
4
][
3
]
=
-
0.00355
;
//eta eta' channel
g
[
0
][
4
]
=
-
0.34639
;
g
[
1
][
4
]
=
0.31503
;
g
[
2
][
4
]
=
0.18681
;
g
[
3
][
4
]
=
-
0.00984
;
g
[
4
][
4
]
=
0.22358
;
// Pole masses
ma
[
0
]
=
0.651
;
ma
[
1
]
=
1.20360
;
ma
[
2
]
=
1.55817
;
ma
[
3
]
=
1.21000
;
ma
[
4
]
=
1.82206
;
}
else
if
(
solution
==
1
)
{
// solnI.txt
// coupling constants
//pi+pi- channel
g
[
0
][
0
]
=
0.31896
;
g
[
1
][
0
]
=
0.85963
;
g
[
2
][
0
]
=
0.47993
;
g
[
3
][
0
]
=
0.45121
;
g
[
4
][
0
]
=
0.39391
;
//K+K- channel
g
[
0
][
1
]
=
-
0.49998
;
g
[
1
][
1
]
=
0.52402
;
g
[
2
][
1
]
=
0.40254
;
g
[
3
][
1
]
=
0.42769
;
g
[
4
][
1
]
=
-
0.30860
;
//4pi channel
g
[
0
][
2
]
=
0
;
g
[
1
][
2
]
=
0
;
g
[
2
][
2
]
=
1.0
;
g
[
3
][
2
]
=
1.15088
;
g
[
4
][
2
]
=
0.33999
;
//eta eta channel
g
[
0
][
3
]
=
-
0.21554
;
g
[
1
][
3
]
=
0.38093
;
g
[
2
][
3
]
=
0.21811
;
g
[
3
][
3
]
=
0.22925
;
g
[
4
][
3
]
=
0.06919
;
//eta eta' channel
g
[
0
][
4
]
=
-
0.18294
;
g
[
1
][
4
]
=
0.23788
;
g
[
2
][
4
]
=
0.05454
;
g
[
3
][
4
]
=
0.06444
;
g
[
4
][
4
]
=
0.32620
;
// Pole masses
ma
[
0
]
=
0.7369
;
ma
[
1
]
=
1.24347
;
ma
[
2
]
=
1.62681
;
ma
[
3
]
=
1.21900
;
ma
[
4
]
=
1.74932
;
}
else
if
(
solution
==
2
)
{
// solnIIa.txt
// coupling constants
//pi+pi- channel
g
[
0
][
0
]
=
0.26014
;
g
[
1
][
0
]
=
0.95289
;
g
[
2
][
0
]
=
0.46244
;
g
[
3
][
0
]
=
0.41848
;
g
[
4
][
0
]
=
0.01804
;
//K+K- channel
g
[
0
][
1
]
=
-
0.57849
;
g
[
1
][
1
]
=
0.55887
;
g
[
2
][
1
]
=
0.31712
;
g
[
3
][
1
]
=
0.49910
;
g
[
4
][
1
]
=
-
0.28430
;
//4pi channel
g
[
0
][
2
]
=
0
;
g
[
1
][
2
]
=
0
;
g
[
2
][
2
]
=
0.70340
;
g
[
3
][
2
]
=
0.96819
;
g
[
4
][
2
]
=
-
0.90100
;
//eta eta channel
g
[
0
][
3
]
=
-
0.32936
;
g
[
1
][
3
]
=
0.39910
;
g
[
2
][
3
]
=
0.22963
;
g
[
3
][
3
]
=
0.24415
;
g
[
4
][
3
]
=
-
0.07252
;
//eta eta' channel
g
[
0
][
4
]
=
-
0.30906
;
g
[
1
][
4
]
=
0.31143
;
g
[
2
][
4
]
=
0.19802
;
g
[
3
][
4
]
=
-
0.00522
;
g
[
4
][
4
]
=
0.17097
;
// Pole masses
ma
[
0
]
=
0.67460
;
ma
[
1
]
=
1.21094
;
ma
[
2
]
=
1.57896
;
ma
[
3
]
=
1.21900
;
ma
[
4
]
=
1.86602
;
}
//Now define the K-matrix pole
double
rho1sq
,
rho2sq
,
rho4sq
,
rho5sq
;
EvtComplex
rho
[
5
];
double
f
[
5
][
5
];
//Initalize the mass of the resonance
double
mpi
=
0.13957
;
double
mK
=
0.493677
;
//using charged K value
double
meta
=
0.54775
;
//using PDG value
double
metap
=
0.95778
;
//using PDG value
//Initialize the matrix to value zero
EvtComplex
K
[
5
][
5
];
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
for
(
int
j
=
0
;
j
<
5
;
j
++
)
{
K
[
i
][
j
]
=
EvtComplex
(
0
,
0
);
f
[
i
][
j
]
=
0
;
}
}
//Input the _f[i][j] scattering data
double
s_scatt
=
0.0
;
if
(
solution
==
3
)
s_scatt
=
-
3.92637
;
else
if
(
solution
==
1
)
s_scatt
=
-
5.0
;
else
if
(
solution
==
2
)
s_scatt
=
-
5.0
;
double
sa
=
1.0
;
double
sa_0
=
-
0.15
;
if
(
solution
==
3
)
{
f
[
0
][
0
]
=
0.23399
;
// f^scatt
f
[
0
][
1
]
=
0.15044
;
f
[
0
][
2
]
=
-
0.20545
;
f
[
0
][
3
]
=
0.32825
;
f
[
0
][
4
]
=
0.35412
;
}
else
if
(
solution
==
1
)
{
f
[
0
][
0
]
=
0.04214
;
// f^scatt
f
[
0
][
1
]
=
0.19865
;
f
[
0
][
2
]
=
-
0.63764
;
f
[
0
][
3
]
=
0.44063
;
f
[
0
][
4
]
=
0.36717
;
}
else
if
(
solution
==
2
)
{
f
[
0
][
0
]
=
0.26447
;
// f^scatt
f
[
0
][
1
]
=
0.10400
;
f
[
0
][
2
]
=
-
0.35445
;
f
[
0
][
3
]
=
0.31596
;
f
[
0
][
4
]
=
0.42483
;
}
f
[
1
][
0
]
=
f
[
0
][
1
];
f
[
2
][
0
]
=
f
[
0
][
2
];
f
[
3
][
0
]
=
f
[
0
][
3
];
f
[
4
][
0
]
=
f
[
0
][
4
];
//Now construct the phase-space factor
//For eta-eta' there is no difference term
rho1sq
=
1.
-
pow
(
mpi
+
mpi
,
2
)
/
s
;
//pi+ pi- phase factor
if
(
rho1sq
>=
0
)
rho
[
0
]
=
EvtComplex
(
sqrt
(
rho1sq
),
0
);
else
rho
[
0
]
=
EvtComplex
(
0
,
sqrt
(
-
rho1sq
)
);
rho2sq
=
1.
-
pow
(
mK
+
mK
,
2
)
/
s
;
if
(
rho2sq
>=
0
)
rho
[
1
]
=
EvtComplex
(
sqrt
(
rho2sq
),
0
);
else
rho
[
1
]
=
EvtComplex
(
0
,
sqrt
(
-
rho2sq
)
);
//using the A&S 4pi phase space Factor:
//Shit, not continue
if
(
s
<=
1
)
{
double
real
=
1.2274
+
.00370909
/
(
s
*
s
)
-
.111203
/
s
-
6.39017
*
s
+
16.8358
*
s
*
s
-
21.8845
*
s
*
s
*
s
+
11.3153
*
s
*
s
*
s
*
s
;
double
cont32
=
sqrt
(
1.0
-
(
16.0
*
mpi
*
mpi
)
);
rho
[
2
]
=
EvtComplex
(
cont32
*
real
,
0
);
}
else
rho
[
2
]
=
EvtComplex
(
sqrt
(
1.
-
16.
*
mpi
*
mpi
/
s
),
0
);
rho4sq
=
1.
-
pow
(
meta
+
meta
,
2
)
/
s
;
if
(
rho4sq
>=
0
)
rho
[
3
]
=
EvtComplex
(
sqrt
(
rho4sq
),
0
);
else
rho
[
3
]
=
EvtComplex
(
0
,
sqrt
(
-
rho4sq
)
);
rho5sq
=
1.
-
pow
(
meta
+
metap
,
2
)
/
s
;
if
(
rho5sq
>=
0
)
rho
[
4
]
=
EvtComplex
(
sqrt
(
rho5sq
),
0
);
else
rho
[
4
]
=
EvtComplex
(
0
,
sqrt
(
-
rho5sq
)
);
double
smallTerm
=
1
;
// Factor to prevent divergences.
// Check if some pole may arise problems.
for
(
int
pole
=
0
;
pole
<
5
;
pole
++
)
if
(
fabs
(
pow
(
ma
[
pole
],
2
)
-
s
)
<
PRECISION
)
smallTerm
=
pow
(
ma
[
pole
],
2
)
-
s
;
//now sum all the pole
//equation (3) in the E791 K-matrix paper
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
for
(
int
j
=
0
;
j
<
5
;
j
++
)
{
for
(
int
pole_index
=
0
;
pole_index
<
5
;
pole_index
++
)
{
double
A
=
g
[
pole_index
][
i
]
*
g
[
pole_index
][
j
];
double
B
=
ma
[
pole_index
]
*
ma
[
pole_index
]
-
s
;
if
(
fabs
(
B
)
<
PRECISION
)
K
[
i
][
j
]
+=
EvtComplex
(
A
,
0
);
else
K
[
i
][
j
]
+=
EvtComplex
(
A
/
B
,
0
)
*
smallTerm
;
}
}
}
//now add the SVT part
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
for
(
int
j
=
0
;
j
<
5
;
j
++
)
{
double
C
=
f
[
i
][
j
]
*
(
1.0
-
s_scatt
);
double
D
=
(
s
-
s_scatt
);
K
[
i
][
j
]
+=
EvtComplex
(
C
/
D
,
0
)
*
smallTerm
;
}
}
//Fix the bug in the FOCUS paper
//Include the Alder zero term:
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
for
(
int
j
=
0
;
j
<
5
;
j
++
)
{
double
E
=
(
s
-
(
sa
*
mpi
*
mpi
*
0.5
)
)
*
(
1.0
-
sa_0
);
double
F
=
(
s
-
sa_0
);
K
[
i
][
j
]
*=
EvtComplex
(
E
/
F
,
0
);
}
}
//This is not correct!
//(1-ipK) != (1-iKp)
static
EvtMatrix
<
EvtComplex
>
mat
;
mat
.
setRange
(
5
);
// Try to do in only the first time. DEFINE ALLOCATION IN CONSTRUCTOR.
for
(
int
row
=
0
;
row
<
5
;
row
++
)
for
(
int
col
=
0
;
col
<
5
;
col
++
)
mat
(
row
,
col
)
=
(
row
==
col
)
*
smallTerm
-
EvtComplex
(
0.
,
1.
)
*
K
[
row
][
col
]
*
rho
[
col
];
EvtMatrix
<
EvtComplex
>*
matInverse
=
mat
.
inverse
();
//The 1st row of the inverse matrix. This matrix is {(I-iKp)^-1}_0j
vector
<
EvtComplex
>
U1j
;
for
(
int
j
=
0
;
j
<
5
;
j
++
)
U1j
.
push_back
(
(
*
matInverse
)[
0
][
j
]
);
delete
matInverse
;
//this calculates final F0 factor
EvtComplex
value
(
0
,
0
);
if
(
index
<=
5
)
{
//this calculates the beta_idx Factors
for
(
int
j
=
0
;
j
<
5
;
j
++
)
{
// sum for 5 channel
EvtComplex
top
=
U1j
[
j
]
*
g
[
index
-
1
][
j
];
double
bottom
=
ma
[
index
-
1
]
*
ma
[
index
-
1
]
-
s
;
if
(
fabs
(
bottom
)
<
PRECISION
)
value
+=
top
;
else
value
+=
top
/
bottom
*
smallTerm
;
}
}
else
{
//this calculates fprod Factors
value
+=
U1j
[
0
];
value
+=
U1j
[
1
]
*
_fr12prod
;
value
+=
U1j
[
2
]
*
_fr13prod
;
value
+=
U1j
[
3
]
*
_fr14prod
;
value
+=
U1j
[
4
]
*
_fr15prod
;
value
*=
(
1
-
_s0prod
)
/
(
s
-
_s0prod
)
*
smallTerm
;
}
return
value
;
}
//replace Breit-Wigner with LASS
EvtComplex
EvtDalitzReso
::
lass
(
double
s
)
{
EvtTwoBodyKine
vd
(
_massFirst
,
_massSecond
,
sqrt
(
s
)
);
double
q
=
vd
.
p
();
double
GammaM
=
_g0
*
_vd
.
widthFactor
(
vd
);
// running width;
//calculate the background phase motion
double
cot_deltaB
=
1.0
/
(
_a
*
q
)
+
0.5
*
_r
*
q
;
double
deltaB
=
atan
(
1.0
/
cot_deltaB
);
double
totalB
=
deltaB
+
_phiB
;
//calculate the resonant phase motion
double
deltaR
=
atan
(
(
_m0
*
GammaM
/
(
_m0
*
_m0
-
s
)
)
);
double
totalR
=
deltaR
+
_phiR
;
//sum them up
EvtComplex
bkgB
,
resT
;
bkgB
=
EvtComplex
(
_Blass
*
sin
(
totalB
),
0
)
*
EvtComplex
(
cos
(
totalB
),
sin
(
totalB
)
);
resT
=
EvtComplex
(
_R
*
sin
(
deltaR
),
0
)
*
EvtComplex
(
cos
(
totalR
),
sin
(
totalR
)
)
*
EvtComplex
(
cos
(
2
*
totalB
),
sin
(
2
*
totalB
)
);
EvtComplex
T
;
if
(
_cutoff
>
0
&&
sqrt
(
s
)
>
_cutoff
)
T
=
resT
;
else
T
=
bkgB
+
resT
;
if
(
_scaleByMOverQ
)
T
*=
(
sqrt
(
s
)
/
q
);
return
T
;
}
EvtComplex
EvtDalitzReso
::
flatte
(
const
double
&
m
)
{
EvtComplex
w
;
for
(
vector
<
EvtFlatteParam
>::
const_iterator
param
=
_flatteParams
.
begin
();
param
!=
_flatteParams
.
end
();
++
param
)
{
double
m1
=
(
*
param
).
m1
();
double
m2
=
(
*
param
).
m2
();
double
g
=
(
*
param
).
g
();
w
+=
(
g
*
g
*
sqrtCplx
(
(
1
-
(
(
m1
-
m2
)
*
(
m1
-
m2
)
)
/
(
m
*
m
)
)
*
(
1
-
(
(
m1
+
m2
)
*
(
m1
+
m2
)
)
/
(
m
*
m
)
)
)
);
}
EvtComplex
denom
=
_m0
*
_m0
-
m
*
m
-
EvtComplex
(
0
,
1
)
*
w
;
return
EvtComplex
(
1.0
,
0.0
)
/
denom
;
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Tue, Sep 30, 4:47 AM (5 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6550180
Default Alt Text
EvtDalitzReso.cpp (34 KB)
Attached To
Mode
rEVTGEN evtgen
Attached
Detach File
Event Timeline
Log In to Comment