]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenBase/EvtNonresonantAmp.cpp
dda2ca6351edd064ede34e0d658d621545608f95
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtNonresonantAmp.cpp
1 #include "EvtGenBase/EvtPatches.hh"
2 /*******************************************************************************
3  * Project: BaBar detector at the SLAC PEP-II B-factory 
4  * Package: EvtGenBase 
5  *  Author: Denis Dujmic, ddujmic@slac.stanford.edu               
6  *  
7  * Copyright (C) 2005 SLAC   
8  *******************************************************************************/
9
10 #include <assert.h>
11 #include <math.h>
12 #include <iostream>
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"
18 using std::endl;
19 using EvtCyclic3::Index;
20 using EvtCyclic3::Pair;
21
22
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>(),
29   _type(type),
30   _pair1(pair1),
31   _pair2(pair2),
32   _par1(par1),
33   _par2(par2),
34   _spin(spin)
35 {
36   _dalitzSpace = dp;
37 }
38
39
40
41 EvtNonresonantAmp::EvtNonresonantAmp(const EvtNonresonantAmp& other) :
42   EvtAmplitude<EvtDalitzPoint>(other),
43   _type(other._type), 
44   _pair1(other._pair1),
45   _pair2(other._pair2),
46   _par1(other._par1),
47   _par2(other._par2),
48   _spin(other._spin)
49 {
50   _dalitzSpace = other._dalitzSpace;
51 }
52
53
54 EvtNonresonantAmp::~EvtNonresonantAmp() {}
55
56
57
58 EvtComplex 
59 EvtNonresonantAmp::amplitude(const EvtDalitzPoint &dalitzPoint) const {
60   
61   // flat model
62   if (_type==EvtPto3PAmp::NONRES) { return 1; } 
63
64   // "linear model" (prop. to m^2)
65   else if (_type==EvtPto3PAmp::NONRES_LIN) { 
66     return dalitzPoint.q(_pair1);  
67   }
68
69   // Chen-Chua-Soni 
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));  
74   } 
75
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) );
79   } 
80   
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) );
84   } 
85
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));
90     double dm = m-mmin;
91     assert(dm>0);
92     double cosTh = 1;
93     int ispin = EvtSpinType::getSpin2(_spin);
94     if (ispin>0) {
95       cosTh = dalitzPoint.cosTh( EvtCyclic3::next(_pair1), _pair1);
96       if (ispin>2) cosTh *= cosTh;
97     }
98     return   pow(dm,_par1) * exp( dm*_par2 ) * cosTh;  
99   } 
100
101   return 0;
102 }