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