]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenBase/EvtPropGounarisSakurai.cxx
New plots for trending injector efficiencies (Melinda)
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtPropGounarisSakurai.cxx
1 #include "EvtGenBase/EvtPatches.hh"
2 /*******************************************************************************
3  * Project: BaBar detector at the SLAC PEP-II B-factory
4  * Package: EvtGenBase
5  *    File: $Id: EvtPropGounarisSakurai.cc,v 1.2 2008/06/27 23:34:54 tlatham Exp $
6  *  Author: Matt Graham 
7  *  modified from EvtPropBreitWignerRel...this should be used for rho's
8  *******************************************************************************/
9
10 #include <math.h>
11 #include "EvtGenBase/EvtPropGounarisSakurai.hh"
12
13
14 EvtPropGounarisSakurai::EvtPropGounarisSakurai(EvtDalitzPlot *dp, 
15               EvtCyclic3::Pair pair, double m0, double g0) 
16   : EvtPropagator(m0,g0),_pair(pair),_gbase(g0)
17 {
18   _dalitzSpace = dp;
19   _m1= dp->m(EvtCyclic3::first(_pair));
20   _m2= dp->m(EvtCyclic3::second(_pair));
21 }
22
23
24 EvtPropGounarisSakurai::EvtPropGounarisSakurai(const EvtPropGounarisSakurai& other) 
25   : EvtPropagator(other), _pair(other._pair), _gbase(other._gbase), 
26     _m1(other._m1), _m2(other._m2)
27 {
28 _dalitzSpace = other._dalitzSpace;
29 }
30
31
32 EvtPropGounarisSakurai::~EvtPropGounarisSakurai() 
33 {}
34   
35
36 EvtAmplitude<EvtPoint1D>* EvtPropGounarisSakurai::clone() const
37
38   return new EvtPropGounarisSakurai(*this); 
39 }
40
41
42 EvtComplex EvtPropGounarisSakurai::amplitude(const EvtPoint1D& x) const
43 {
44   double m = x.value();
45   double s = m*m;
46   double m2=_m0*_m0;
47   double _width=_gbase;
48   double _mass=_m0;
49
50   double A = ( 1 + dFun( m2 )*_width/_mass );
51   double B = s - m2 - fsFun( s );
52   //  double C = sqrt(s)*_g0;//wrong!
53   double C = sqrt(m2)*_g0;//correct!
54   double D = B*B + C*C;
55
56   EvtComplex rpt( A*B/D, - A*C/D );
57   return rpt;
58
59
60 }
61
62 //  adapted from RhoPiTools
63 double EvtPropGounarisSakurai::fsFun( double s ) const
64 {
65   double m2=_m0*_m0;
66
67   EvtTwoBodyKine vd(_m1,_m2,sqrt(s));
68   EvtTwoBodyKine vR(_m1,_m2,_m0);
69   double k_s   = vd.p();
70   double k_Am2 = vR.p();
71   //  
72   double f     = _gbase * m2 / pow( k_Am2, 3 )
73                    * ( 
74                        pow( k_s, 2 ) * (hFun( s ) - hFun( m2 ))
75                        + (m2 - s) * pow( k_Am2, 2 ) * dh_dsFun( m2 )
76                      );
77
78   return f;
79 }
80
81
82 double EvtPropGounarisSakurai::hFun( double s ) const
83 {
84   double sm    = _m1 + _m2;
85   double SQRTs = sqrt(s);
86   EvtTwoBodyKine vd(_m1,_m2,sqrt(s));
87   double k_s   = vd.p();
88
89   return 2/EvtConst::pi * (k_s/SQRTs) * log( (SQRTs + 2*k_s)/(sm) );
90 }
91
92 double EvtPropGounarisSakurai::dh_dsFun( double s ) const
93 {  
94   EvtTwoBodyKine vd(_m1,_m2,sqrt(s));
95   double k_s   = vd.p();
96  
97   return hFun(s) * ( 1/(8*pow( k_s, 2)) - 1/(2*s) ) + 1/(2*EvtConst::pi*s);
98 }
99
100 double EvtPropGounarisSakurai::dFun( double s ) const
101 {
102   double sm   = _m1 + _m2;
103   double sm24 = sm*sm/4;
104   double m    = sqrt(s);
105   EvtTwoBodyKine vd(_m1,_m2,sqrt(s));
106   double k_m2   = vd.p();
107   double _pi=EvtConst::pi;
108
109   return 3.0/_pi * sm24/pow( k_m2, 2 ) * log( (m + 2*k_m2)/sm ) 
110          + m/(2*_pi*k_m2) - sm24*m/(_pi * pow( k_m2, 3 ));
111 }
112