BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDsTof0enu.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: EvtDsTof0enu.cc
11// the necessary file: EvtDsTof0enu.hh
12//
13// Description: Ds -> f0(980) e+ nu,
14//
15// Modification history:
16// Liaoyuan Dong Thu Sep 29 00:12:20 CST 2022 Module created
17//------------------------------------------------------------------------
18#include "EvtDsTof0enu.hh"
26#include <stdlib.h>
27
29
30void EvtDsTof0enu::getName( std::string& model_name ) { model_name = "DsTof0enu"; }
31
33
35 static EvtId DsP = EvtPDL::getId( "D_s+" );
36 static EvtId DsM = EvtPDL::getId( "D_s-" );
37 static EvtId PIM = EvtPDL::getId( "pi-" );
38 static EvtId PIP = EvtPDL::getId( "pi+" );
39 static EvtId PI0 = EvtPDL::getId( "pi0" );
40 static EvtId KM = EvtPDL::getId( "K-" );
41 static EvtId KP = EvtPDL::getId( "K+" );
42 static EvtId KL = EvtPDL::getId( "K_L0" );
43 static EvtId KS = EvtPDL::getId( "K_S0" );
44 static EvtId EP = EvtPDL::getId( "e+" );
45 static EvtId EM = EvtPDL::getId( "e-" );
46 static EvtId MUP = EvtPDL::getId( "mu+" );
47 static EvtId MUM = EvtPDL::getId( "mu-" );
48
49 checkNArg( 0 );
50 checkNDaug( 4 );
54
55 // std::cout << "EvtDsTof0enu ==> Initialization !" << std::endl;
56
57 EvtId parnum = getParentId();
58 EvtId d1 = getDaug( 0 );
59 EvtId d2 = getDaug( 1 );
60 EvtId d3 = getDaug( 2 );
61 if ( d3 == EP || d3 == EM )
62 {
63 if ( parnum == DsP || parnum == DsM )
64 {
65 if ( d1 == PI0 )
66 {
67 ProbMax = 33.0;
68 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (pi0pi0) e+ nu : ProMax = " << ProbMax <<
69 // std::endl;
70 }
71 else if ( d1 == PIP || d2 == PIP )
72 {
73 ProbMax = 33.0;
74 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (pi-pi+) e+ nu : ProMax = " << ProbMax <<
75 // std::endl;
76 }
77 else if ( d1 == KP || d2 == KP )
78 {
79 ProbMax = 29.0;
80 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (K-K+) e+ nu : ProMax = " << ProbMax <<
81 // std::endl;
82 }
83 else if ( d1 == KS )
84 {
85 ProbMax = 18.0;
86 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (KS0KS0) e+ nu : ProMax = " << ProbMax <<
87 // std::endl;
88 }
89 else if ( d1 == KL )
90 {
91 ProbMax = 18.0;
92 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (KL0KL0) e+ nu : ProMax = " << ProbMax <<
93 // std::endl;
94 }
95 }
96 }
97 if ( d3 == MUP || d3 == MUM )
98 {
99 if ( parnum == DsP || parnum == DsM )
100 {
101 if ( d1 == PI0 )
102 {
103 ProbMax = 33.0;
104 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (pi0pi0) mu+ nu : ProMax = " << ProbMax <<
105 // std::endl;
106 }
107 else if ( d1 == PIP || d2 == PIP )
108 {
109 ProbMax = 33.0;
110 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (pi-pi+) mu+ nu : ProMax = " << ProbMax <<
111 // std::endl;
112 }
113 else if ( d1 == KP || d2 == KP )
114 {
115 ProbMax = 29.0;
116 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (K-K+) mu+ nu : ProMax = " << ProbMax <<
117 // std::endl;
118 }
119 else if ( d1 == KS )
120 {
121 ProbMax = 18.0;
122 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (KS0KS0) mu+ nu : ProMax = " << ProbMax <<
123 // std::endl;
124 }
125 else if ( d1 == KL )
126 {
127 ProbMax = 18.0;
128 // std::cout << "EvtDsTof0enu ==> Ds -> f0 (KL0KL0) mu+ nu : ProMax = " << ProbMax <<
129 // std::endl;
130 }
131 }
132 }
133
134 ciR = EvtComplex( 1.0, 0.0 );
135 ciM = EvtComplex( 0.0, 1.0 );
136
137 mPi = 0.13957;
138 mPi0 = 0.1349766;
139 mK0 = 0.497611;
140 mKa = 0.493677;
141 mEt = 0.547853;
142
143 ///////////// for Ds to f0 e nu
144 double mADs = 2.5;
145 m2ADs = mADs * mADs;
146 mf0 = 0.9399;
147 m2f0 = mf0 * mf0;
148 flatte_g1 = 0.199 * mf0;
149 flatte_g2 = 3.01 * 0.199 * mf0;
150 mDs = 1.96834;
151 m2Ds = mDs * mDs;
152}
153
155 // cout << "EvtDsTof0enu: setProbMax = " << ProbMax << endl;
156 setProbMax( ProbMax );
157}
158
160 /*
161 double maxprob = 0.0;
162 for(int ir=0;ir<=60000000;ir++){
163 p->initializePhaseSpace(getNDaug(),getDaugs());
164 EvtVector4R _pi1 = p->getDaug(0)->getP4();
165 EvtVector4R _pi2 = p->getDaug(1)->getP4();
166 EvtVector4R _e = p->getDaug(2)->getP4();
167 EvtVector4R _nu = p->getDaug(3)->getP4();
168
169 int pid = EvtPDL::getStdHep(p->getDaug(2)->getId());
170 int charm;
171 if(pid == 11) charm = -1;
172 else charm = 1;
173 double m2, q2, cosV, cosL, chi;
174 KinVGen(_pi1, _pi2, _e, _nu, charm, m2, q2, cosV, cosL, chi);
175 double _prob = calPDF(m2, q2, cosV, cosL, chi);
176 if(_prob>maxprob) {
177 maxprob=_prob;
178 cout << "1 = " << _pi1 << endl;
179 cout << "2 = " << _pi2 << endl;
180 cout << "3 = " << _e << endl;
181 cout << "4 = " << _nu << endl;
182 std::cout << "Max PDF = " << ir << " charm= " << charm << " prob= " << _prob <<
183 std::endl;
184 }
185 }
186 std::cout << "Max!!!!!!!!!!! " << maxprob<< std::endl;
187 */
189 EvtVector4R pi1 = p->getDaug( 0 )->getP4();
190 EvtVector4R pi2 = p->getDaug( 1 )->getP4();
191 EvtVector4R e = p->getDaug( 2 )->getP4();
192 EvtVector4R nu = p->getDaug( 3 )->getP4();
193
194 int pid = EvtPDL::getStdHep( p->getDaug( 2 )->getId() );
195 int charm;
196 if ( pid == 11 || pid == 13 ) charm = -1;
197 else charm = 1;
198 double m2, q2, cosV, cosL, chi;
199 KinVGen( pi1, pi2, e, nu, charm, m2, q2, cosV, cosL, chi );
200 double prob = calPDF( m2, q2, cosV, cosL, chi );
201 setProb( prob );
202 return;
203}
204
205void EvtDsTof0enu::KinVGen( EvtVector4R vp4_K, EvtVector4R vp4_Pi, EvtVector4R vp4_Lep,
206 EvtVector4R vp4_Nu, int charm, double& m2, double& q2,
207 double& cosV, double& cosL, double& chi ) {
208 EvtVector4R vp4_KPi = vp4_K + vp4_Pi;
209 EvtVector4R vp4_W = vp4_Lep + vp4_Nu;
210 m2 = vp4_KPi.mass2();
211 q2 = vp4_W.mass2();
212
213 EvtVector4R boost;
214 boost.set( vp4_KPi.get( 0 ), -vp4_KPi.get( 1 ), -vp4_KPi.get( 2 ), -vp4_KPi.get( 3 ) );
215 EvtVector4R vp4_Kp = boostTo( vp4_K, boost );
216 cosV = vp4_Kp.dot( vp4_KPi ) / ( vp4_Kp.d3mag() * vp4_KPi.d3mag() );
217
218 boost.set( vp4_W.get( 0 ), -vp4_W.get( 1 ), -vp4_W.get( 2 ), -vp4_W.get( 3 ) );
219 EvtVector4R vp4_Lepp = boostTo( vp4_Lep, boost );
220 cosL = vp4_Lepp.dot( vp4_W ) / ( vp4_Lepp.d3mag() * vp4_W.d3mag() );
221
222 EvtVector4R V = vp4_KPi / vp4_KPi.d3mag();
223 EvtVector4R C = vp4_Kp.cross( V );
224 C /= C.d3mag();
225 EvtVector4R D = vp4_Lepp.cross( V );
226 D /= D.d3mag();
227 double sinx = C.cross( V ).dot( D );
228 double cosx = C.dot( D );
229 chi = sinx > 0 ? acos( cosx ) : -acos( cosx );
230 if ( charm == -1 ) chi = -chi;
231}
232
233double EvtDsTof0enu::calPDF( double m2, double q2, double cosV, double cosL, double chi ) {
234 EvtComplex F10 = Resonancef0Flatte( m2, q2 );
235 double I1 = 0.25 * abs2( F10 );
236 double sinL = sqrt( 1. - cosL * cosL );
237 double sinL2 = sinL * sinL;
238 double cos2L = 1.0 - 2.0 * sinL2;
239 double I = I1 - I1 * cos2L;
240 return I;
241}
242
243EvtComplex EvtDsTof0enu::Resonancef0Flatte( double m2, double q2 ) {
244 double pPiPi = getPStar( m2Ds, m2, q2 );
245 EvtComplex rhopiPpiM = getrho( m2, mPi ); // rho_pi+pi-
246 EvtComplex rhopi0pi0 = getrho( m2, mPi0 ); // rho_pi0pi0
247 EvtComplex rhoKPKM = getrho( m2, mKa ); // rho_K+K-
248 EvtComplex rhoK0K0 = getrho( m2, mK0 ); // rho_K0K0
249 EvtComplex rhopipi = ( 2.0 / 3.0 ) * rhopiPpiM + ( 1.0 / 3.0 ) * rhopi0pi0;
250 EvtComplex rhoKK = 0.5 * rhoKPKM + 0.5 * rhoK0K0;
251 EvtComplex amp =
252 ciR / ( ciR * ( m2f0 - m2 ) - ciM * ( flatte_g1 * rhopipi + flatte_g2 * rhoKK ) );
253 EvtComplex F10 = amp * pPiPi * mDs / ( 1.0 - q2 / m2ADs );
254 return F10;
255}
256
257double EvtDsTof0enu::getPStar( double sa, double sb, double sc ) {
258 double x = sa + sb - sc;
259 double q = 0.25 * x * x / sa - sb;
260 double p;
261 if ( q > 0.0 ) { p = sqrt( q ); }
262 else
263 {
264 // std::cout << "EvtDToa0enu: pstar is less than 0.0" << std::endl;
265 p = 0.01;
266 }
267 return p;
268}
269
270EvtComplex EvtDsTof0enu::getrho( double m2, double mX ) {
271 EvtComplex rho( 0.0, 0.0 );
272 if ( ( 1.0 - 4.0 * mX * mX / m2 ) > 0 ) rho = ciR * sqrt( 1.0 - 4.0 * mX * mX / m2 );
273 else rho = ciM * sqrt( 4.0 * mX * mX / m2 - 1.0 );
274 return rho;
275}
Double_t x[10]
character *LEPTONflag integer iresonances real pi2
double abs2(const EvtComplex &c)
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
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 checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
EvtId getParentId()
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
EvtId getDaug(int i)
void setProb(double prob)
void getName(std::string &name)
virtual ~EvtDsTof0enu()
void decay(EvtParticle *p)
EvtDecayBase * clone()
Definition EvtId.hh:27
static int getStdHep(EvtId id)
Definition EvtPDL.hh:61
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
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