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
EvtNonresonantAmp.cpp
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
22
27
28#include <assert.h>
29#include <iostream>
30#include <math.h>
33using std::endl;
34
37 EvtCyclic3::Pair pair1, double par1,
38 EvtCyclic3::Pair pair2, double par2,
41 m_dalitzSpace{ dp },
42 m_type( type ),
43 m_pair1( pair1 ),
44 m_pair2( pair2 ),
45 m_par1( par1 ),
46 m_par2( par2 ),
47 m_spin( spin )
48{
49}
50
52{
53 // flat model
54 if ( m_type == EvtPto3PAmp::NONRES ) {
55 return 1;
56 }
57
58 // "linear model" (prop. to m^2)
59 else if ( m_type == EvtPto3PAmp::NONRES_LIN ) {
60 return dalitzPoint.q( m_pair1 );
61 }
62
63 // Chen-Chua-Soni
64 else if ( m_type == EvtPto3PAmp::NONRES_CCS ) {
65 double s = dalitzPoint.q( m_pair1 );
66 double smin = m_dalitzSpace->qAbsMin( m_pair1 );
67 return sqrt( s - smin ) / ( s * log( s * m_par1 ) );
68 }
69
70 // exp{par*m^2) (Belle model, Garmash et al, PRD71)
71 else if ( m_type == EvtPto3PAmp::NONRES_EXP ) {
72 return exp( m_par1 * dalitzPoint.q( m_pair1 ) );
73 }
74
75 // exp(par1*m12^2 + par2*m13^2) (Belle model, Garmash et al, PRD71)
76 else if ( m_type == EvtPto3PAmp::NONRES_EXP_ADD ) {
77 return exp( m_par1 * dalitzPoint.q( m_pair1 ) +
78 m_par2 * dalitzPoint.q( m_pair2 ) );
79 }
80
81 // Laura model (P.Harrison et al, BAD806)
82 else if ( m_type == EvtPto3PAmp::NONRES_LAURA ) {
83 double m = sqrt( dalitzPoint.q( m_pair1 ) );
84 double mmin = sqrt( m_dalitzSpace->qAbsMin( m_pair1 ) );
85 double dm = m - mmin;
86 assert( dm > 0 );
87 double cosTh = 1;
88 int ispin = EvtSpinType::getSpin2( m_spin );
89 if ( ispin > 0 ) {
90 cosTh = dalitzPoint.cosTh( EvtCyclic3::next( m_pair1 ), m_pair1 );
91 if ( ispin > 2 )
92 cosTh *= cosTh;
93 }
94 return pow( dm, m_par1 ) * exp( dm * m_par2 ) * cosTh;
95 }
96
97 return 0;
98}
EvtComplex exp(const EvtComplex &c)
double q(EvtCyclic3::Pair) const
double cosTh(EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes) const
EvtCyclic3::Pair m_pair2
EvtDalitzPlot * m_dalitzSpace
EvtComplex amplitude(const EvtDalitzPoint &p) const override
EvtNonresonantAmp(EvtDalitzPlot *dp, EvtPto3PAmp::NumType type, EvtCyclic3::Pair pair1, double par1=0, EvtCyclic3::Pair pair2=EvtCyclic3::AB, double par2=0, EvtSpinType::spintype spin=EvtSpinType::SCALAR)
EvtSpinType::spintype m_spin
EvtCyclic3::Pair m_pair1
EvtPto3PAmp::NumType m_type
static int getSpin2(spintype stype)
Index next(Index i)