BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDTopi0pi0enu.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2// Environment:
3// This software is part of models developed at BES collaboration
4// based on the EvtGen framework. If you use all or part
5// of it, please give an appropriate acknowledgement.
6//
7// Copyright Information: See EvtGen/BesCopyright
8// Copyright (A) 2006 Ping Rong-Gang @IHEP
9//
10// Module: EvtDTopi0pi0enu.cc
11// the necessary file: EvtDTopi0pi0enu.hh
12//
13// Description: D -> f0(500) (->pi0 pi0) e+ nu,
14//
15// Modification history:
16//
17// Liaoyuan Dong Fri Feb 17 00:56:58 2023 Module created
18//
19//------------------------------------------------------------------------
20#include "EvtDTopi0pi0enu.hh"
28#include <stdlib.h>
29
31
32void EvtDTopi0pi0enu::getName( std::string& model_name ) { model_name = "DTopi0pi0enu"; }
33
35
37 checkNArg( 0 );
38 checkNDaug( 4 );
42
43 // cout << "Initializing EvtDTopi0pi0enu: ProbMax = 2.48532"<< endl;
44
45 mA = 2.42;
46 m0_S = 0.953;
47 Dp_mD = 1.86962;
48 Pi = atan2( 0.0, -1.0 );
49 mPi = 0.1349766;
50 mKa = 0.493677;
51 mEt = 0.547853;
52}
53
55
57 /*
58 double maxprob = 0.0;
59 for(int ir=0;ir<=60000000;ir++){
60 p->initializePhaseSpace(getNDaug(),getDaugs());
61 EvtVector4R _pi1 = p->getDaug(0)->getP4();
62 EvtVector4R _pi2 = p->getDaug(1)->getP4();
63 EvtVector4R _e = p->getDaug(2)->getP4();
64 EvtVector4R _nu = p->getDaug(3)->getP4();
65
66 int pid = EvtPDL::getStdHep(p->getDaug(0)->getId());
67 int charm;
68 if(pid == -211) charm = 1;
69 else charm = -1;
70 double m2, q2, cosV, cosL, chi;
71 KinVGen(_pi1, _pi2, _e, _nu, charm, m2, q2, cosV, cosL, chi);
72 double _prob = calPDF(m2, q2, cosV, cosL, chi);
73 if(_prob>maxprob) {
74 maxprob=_prob;
75 std::cout << "Max PDF = " << ir << " charm= " << charm << " prob= " << _prob <<
76 std::endl;
77 }
78 }
79 std::cout << "Max!!!!!!!!!!! " << maxprob<< std::endl;
80 */
82 EvtVector4R pi1 = p->getDaug( 0 )->getP4();
83 EvtVector4R pi2 = p->getDaug( 1 )->getP4();
84 EvtVector4R e = p->getDaug( 2 )->getP4();
85 EvtVector4R nu = p->getDaug( 3 )->getP4();
86
87 int pid = EvtPDL::getStdHep( p->getDaug( 0 )->getId() );
88 int charm;
89 if ( pid == -211 ) charm = 1;
90 else charm = -1;
91 double m2, q2, cosV, cosL, chi;
92 KinVGen( pi1, pi2, e, nu, charm, m2, q2, cosV, cosL, chi );
93 double prob = calPDF( m2, q2, cosV, cosL, chi );
94 setProb( prob );
95 return;
96}
97
98void EvtDTopi0pi0enu::KinVGen( EvtVector4R vp4_K, EvtVector4R vp4_Pi, EvtVector4R vp4_Lep,
99 EvtVector4R vp4_Nu, int charm, double& m2, double& q2,
100 double& cosV, double& cosL, double& chi ) {
101 EvtVector4R vp4_KPi = vp4_K + vp4_Pi;
102 EvtVector4R vp4_W = vp4_Lep + vp4_Nu;
103 m2 = vp4_KPi.mass2();
104 q2 = vp4_W.mass2();
105
106 EvtVector4R boost;
107 boost.set( vp4_KPi.get( 0 ), -vp4_KPi.get( 1 ), -vp4_KPi.get( 2 ), -vp4_KPi.get( 3 ) );
108 EvtVector4R vp4_Kp = boostTo( vp4_K, boost );
109 cosV = vp4_Kp.dot( vp4_KPi ) / ( vp4_Kp.d3mag() * vp4_KPi.d3mag() );
110
111 boost.set( vp4_W.get( 0 ), -vp4_W.get( 1 ), -vp4_W.get( 2 ), -vp4_W.get( 3 ) );
112 EvtVector4R vp4_Lepp = boostTo( vp4_Lep, boost );
113 cosL = vp4_Lepp.dot( vp4_W ) / ( vp4_Lepp.d3mag() * vp4_W.d3mag() );
114
115 EvtVector4R V = vp4_KPi / vp4_KPi.d3mag();
116 EvtVector4R C = vp4_Kp.cross( V );
117 C /= C.d3mag();
118 EvtVector4R D = vp4_Lepp.cross( V );
119 D /= D.d3mag();
120 double sinx = C.cross( V ).dot( D );
121 double cosx = C.dot( D );
122 chi = sinx > 0 ? acos( cosx ) : -acos( cosx );
123 if ( charm == -1 ) chi = -chi;
124}
125
126double EvtDTopi0pi0enu::calPDF( double m2, double q2, double cosV, double cosL, double chi ) {
127 double m = sqrt( m2 );
128 double q = sqrt( q2 );
129 EvtComplex F10( 0.0, 0.0 );
130 EvtComplex f10( 0.0, 0.0 );
131 ResonanceSBugg( m, q, f10 );
132 F10 = f10;
133 double I1 = 0.25 * abs2( F10 );
134 double sinL = sqrt( 1. - cosL * cosL );
135 double sinL2 = sinL * sinL;
136 double cos2L = 1.0 - 2.0 * sinL2;
137 double I = I1 - I1 * cos2L;
138 return I;
139}
140
141void EvtDTopi0pi0enu::ResonanceSBugg( double m, double q, EvtComplex& F10 ) {
142 double pKPi = getPStar( Dp_mD, m, q );
143 double m2 = m * m;
144 double q2 = q * q;
145 double mA2 = mA * mA;
146
147 double sA = 0.41 * mPi * mPi;
148 double mr = m0_S; // 0.953;
149 double mr2 = m0_S * m0_S; // 0.908209;// 0.953*0.953;
150 double alpha = 1.3;
151 double g4pi = 0.011;
152
153 EvtComplex ciR( 1.0, 0.0 );
154 EvtComplex ciM( 0.0, 1.0 );
155 EvtComplex Gamma1( 0.0, 0.0 );
156 EvtComplex Gamma2( 0.0, 0.0 );
157 EvtComplex Gamma3( 0.0, 0.0 );
158 EvtComplex Gamma4( 0.0, 0.0 );
159
160 Gamma1 = getrho( m2, mPi ) * getG1( m2, mr ) * ( m2 - sA ) / ( mr2 - sA );
161 Gamma2 = getrho( m2, mKa ) * 0.6 * getG1( m2, mr ) * ( m2 / mr2 ) *
162 exp( -alpha * fabs( m2 - 4.0 * mKa * mKa ) );
163 Gamma3 = getrho( m2, mEt ) * 0.2 * getG1( m2, mr ) * ( m2 / mr2 ) *
164 exp( -alpha * fabs( m2 - 4.0 * mEt * mEt ) );
165 if ( m > 4 * mPi )
166 Gamma4 = ciR * mr * g4pi * ( 1.0 + exp( 7.082 - 2.845 * mr2 ) ) /
167 ( 1.0 + exp( 7.082 - 2.845 * m2 ) );
168
169 double AA = mr2 - m2 - getG1( m2, mr ) * ( m2 - sA ) * getZ( m2, mr2 ) / ( mr2 - sA );
170 EvtComplex amp = ciR / ( ciR * AA - ciM * ( Gamma1 + Gamma2 + Gamma3 + Gamma4 ) );
171 F10 = amp * pKPi * Dp_mD / ( 1.0 - q2 / mA2 );
172}
173
174double EvtDTopi0pi0enu::getPStar( double m, double m1, double m2 ) {
175 double s = m * m;
176 double s1 = m1 * m1;
177 double s2 = m2 * m2;
178 double x = s + s1 - s2;
179 double t = 0.25 * x * x / s - s1;
180 double p;
181 if ( t > 0.0 ) { p = sqrt( t ); }
182 else
183 {
184 // std::cout << " Hello, pstar is less than 0.0" << std::endl;
185 p = 0.04;
186 }
187 return p;
188}
189
190inline double EvtDTopi0pi0enu::getRho( double m2, double mX ) {
191 double rho = 0.0;
192 if ( ( 1.0 - 4.0 * mX * mX / m2 ) > 0 ) rho = sqrt( 1.0 - 4.0 * mX * mX / m2 );
193 else rho = 0.0;
194 return rho;
195}
196
197inline EvtComplex EvtDTopi0pi0enu::getrho( double m2, double mX ) {
198 EvtComplex rho( 0.0, 0.0 );
199 EvtComplex ciR( 1.0, 0.0 );
200 EvtComplex ciM( 0.0, 1.0 );
201 if ( ( 1.0 - 4.0 * mX * mX / m2 ) > 0 ) rho = ciR * sqrt( 1.0 - 4.0 * mX * mX / m2 );
202 else rho = ciM * sqrt( 4.0 * mX * mX / m2 - 1.0 );
203 return rho;
204}
205
206inline double EvtDTopi0pi0enu::getG1( double m2, double Mr ) {
207 double b1 = 1.302;
208 double b2 = 0.340;
209 double A = 2.426;
210 double Mr2 = Mr * Mr; // 0.953*0.953;
211 double gg1 = Mr * ( b1 + b2 * m2 ) * exp( -( m2 - Mr2 ) / A );
212 return gg1;
213}
214
215inline double EvtDTopi0pi0enu::getZ( double m2, double Mr2 ) {
216 double zz =
217 ( getRho( m2, mPi ) * log( ( 1.0 - getRho( m2, mPi ) ) / ( 1.0 + getRho( m2, mPi ) ) ) -
218 getRho( Mr2, mPi ) *
219 log( ( 1.0 - getRho( Mr2, mPi ) ) / ( 1.0 + getRho( Mr2, mPi ) ) ) ) /
220 Pi;
221
222 return zz;
223}
Double_t x[10]
character *LEPTONflag integer iresonances real pi2
double abs2(const EvtComplex &c)
EvtComplex exp(const EvtComplex &c)
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
double alpha
XmlRpcServer s
const DifComplex I
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
Definition KKsem.h:33
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
Definition RRes.h:29
void decay(EvtParticle *p)
EvtDecayBase * clone()
void getName(std::string &name)
virtual ~EvtDTopi0pi0enu()
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void setProb(double prob)
static int getStdHep(EvtId id)
Definition EvtPDL.hh:61
EvtId getId() const
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double dot(const EvtVector4R &v2) const
double get(int i) const
EvtVector4R cross(const EvtVector4R &v2)
double d3mag() const
double mass2() const
void set(int i, double d)
double double * m2
Definition qcdloop1.h:83
double * m1
Definition qcdloop1.h:83
int t()
Definition t.c:1