1 #include "EvtGenBase/EvtPatches.hh"
2 /*******************************************************************************
3 * Project: BaBar detector at the SLAC PEP-II B-factory
5 * Author: Denis Dujmic, ddujmic@slac.stanford.edu
7 * Copyright (C) 2005 SLAC
8 *******************************************************************************/
13 #include "EvtGenBase/EvtComplex.hh"
14 #include "EvtGenBase/EvtNonresonantAmp.hh"
15 #include "EvtGenBase/EvtDalitzCoord.hh"
16 #include "EvtGenBase/EvtdFunction.hh"
17 #include "EvtGenBase/EvtCyclic3.hh"
19 using EvtCyclic3::Index;
20 using EvtCyclic3::Pair;
23 EvtNonresonantAmp::EvtNonresonantAmp(EvtDalitzPlot *dp,
24 EvtPto3PAmp::NumType type,
25 EvtCyclic3::Pair pair1, double par1,
26 EvtCyclic3::Pair pair2, double par2,
27 EvtSpinType::spintype spin) :
28 EvtAmplitude<EvtDalitzPoint>(),
41 EvtNonresonantAmp::EvtNonresonantAmp(const EvtNonresonantAmp& other) :
42 EvtAmplitude<EvtDalitzPoint>(other),
50 _dalitzSpace = other._dalitzSpace;
54 EvtNonresonantAmp::~EvtNonresonantAmp() {}
59 EvtNonresonantAmp::amplitude(const EvtDalitzPoint &dalitzPoint) const {
62 if (_type==EvtPto3PAmp::NONRES) { return 1; }
64 // "linear model" (prop. to m^2)
65 else if (_type==EvtPto3PAmp::NONRES_LIN) {
66 return dalitzPoint.q(_pair1);
70 else if (_type==EvtPto3PAmp::NONRES_CCS) {
71 double s = dalitzPoint.q(_pair1);
72 double smin = _dalitzSpace->qAbsMin(_pair1);
73 return sqrt(s-smin)/(s*log(s*_par1));
76 // exp{par*m^2) (Belle model, Garmash et al, PRD71)
77 else if (_type==EvtPto3PAmp::NONRES_EXP) {
78 return exp( _par1*dalitzPoint.q(_pair1) );
81 // exp(par1*m12^2 + par2*m13^2) (Belle model, Garmash et al, PRD71)
82 else if (_type==EvtPto3PAmp::NONRES_EXP_ADD) {
83 return exp( _par1*dalitzPoint.q(_pair1) + _par2*dalitzPoint.q(_pair2) );
86 // Laura model (P.Harrison et al, BAD806)
87 else if (_type==EvtPto3PAmp::NONRES_LAURA) {
88 double m = sqrt( dalitzPoint.q(_pair1));
89 double mmin = sqrt(_dalitzSpace->qAbsMin(_pair1));
93 int ispin = EvtSpinType::getSpin2(_spin);
95 cosTh = dalitzPoint.cosTh( EvtCyclic3::next(_pair1), _pair1);
96 if (ispin>2) cosTh *= cosTh;
98 return pow(dm,_par1) * exp( dm*_par2 ) * cosTh;