BOSS 7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDsTophienu.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: EvtDsTophienu.cc
11// the necessary file: EvtDsTophienu.hh
12//
13// Description: Ds+ -> phi e+ nu, phi -> pi+ pi- pi0
14//
15// Modification history:
16// Liaoyuan Dong May 29 00:41:03 2023 Module created
17//------------------------------------------------------------------------
21#include "EvtGenBase/EvtPDL.hh"
27#include <stdlib.h>
28
30
31void EvtDsTophienu::getName(std::string& model_name){
32 model_name="DsTophienu";
33}
34
38
40 checkNArg(0);
41 checkNDaug(5); // Ds+ -> pi+ pi- pi0 e+ nu
42 // 0 -> 1 2 3 4 5
47
48 std::cout << "Initializing EvtDsTophienu" << std::endl;
49 mV = 1.81;
50 mA = 2.61;
51 V_0 = 1.411;
52 A1_0 = 1;
53 A2_0 = 0.788;
54 mV2 = mV*mV;
55 mA2 = mA*mA;
56
57 m_phi = 1.019461; // phi
58 w_phi = 0.004249;
59 m_rho = 0.77526; // rho
60 w_rho = 0.14910;
61 rBW = 3.0;
62 rBW2 = rBW*rBW;
63 mw_phi = m_phi*w_phi;
64 m2_phi = m_phi*m_phi;
65 m2_rho = m_rho*m_rho;
66
67 mDs = 1.9683;
68 m2Ds = mDs*mDs;
69 mpi = 0.13957;
70 m2pi = mpi*mpi;
71 mpi0 = 0.1349766;
72 m2pi0 = mpi0*mpi0;
73
74 Pi = atan2(0.0,-1.0);
75 root2 = sqrt(2.);
76 root2d3 = sqrt(2./3);
77 root1d2 = sqrt(0.5);
78 root3d2 = sqrt(1.5);
79}
80
82 setProbMax(240000.0);
83}
84
86/*
87 double maxprob = 0.0;
88 for(int ir=0;ir<=60000000;ir++){
89 p->initializePhaseSpace(getNDaug(),getDaugs());
90 EvtVector4R _pip = p->getDaug(0)->getP4(); // pi+
91 EvtVector4R _pim = p->getDaug(1)->getP4(); // pi-
92 EvtVector4R _pi0 = p->getDaug(2)->getP4(); // pi0
93 EvtVector4R _e = p->getDaug(3)->getP4(); // e+
94 EvtVector4R _nu = p->getDaug(4)->getP4(); // nu
95 int pid = EvtPDL::getStdHep(p->getDaug(3)->getId());
96 int charm;
97 if(pid == -11) charm = 1;
98 else charm = -1;
99 double m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V;
100
101 KinVGen(_pip, _pim, _pi0, _e, _nu, charm, m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V);
102 double _prob = calPDF(m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V);
103 if(_prob>=maxprob) {
104 maxprob=_prob;
105 std::cout << ir << " prob= " << _prob << std::endl;
106 cout << "EvtVector4R pip" << _pip << ";"<< endl;
107 cout << "EvtVector4R pim" << _pim << ";"<< endl;
108 cout << "EvtVector4R pi0" << _pi0 << ";"<< endl;
109 cout << "EvtVector4R e" << _e << ";"<< endl;
110 cout << "EvtVector4R nu" << _nu << ";"<< endl;
111 }
112 }
113 std::cout << "Max!!!!!!!!!!! " << maxprob<< std::endl;
114*/
116 EvtVector4R pip = p->getDaug(0)->getP4();
117 EvtVector4R pim = p->getDaug(1)->getP4();
118 EvtVector4R pi0 = p->getDaug(2)->getP4();
119 EvtVector4R e = p->getDaug(3)->getP4();
120 EvtVector4R nu = p->getDaug(4)->getP4();
121
122 int pid = EvtPDL::getStdHep(p->getDaug(3)->getId());
123 int charm;
124 if(pid == -11) charm = 1;
125 else charm = -1;
126 double m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V;
127 KinVGen(pip, pim, pi0, e, nu, charm, m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V);
128 double prob = calPDF(m2, q2, cosV, cosL, chi, s12, s13, s23, spin_V);
129 setProb(prob);
130 return;
131}
132
133void EvtDsTophienu::KinVGen(EvtVector4R vp4_pip, EvtVector4R vp4_pim, EvtVector4R vp4_pi0, EvtVector4R vp4_Lep, EvtVector4R vp4_Nu, int charm, double& m2, double& q2, double& cosV, double& cosL, double& chi, double& s12, double& s13, double& s23, double& spin_V)
134{
135 EvtVector4R vp4_3pi = vp4_pip + vp4_pim + vp4_pi0;
136 EvtVector4R vp4_rho0 = vp4_pip + vp4_pim;
137 EvtVector4R vp4_rhop = vp4_pip + vp4_pi0;
138 EvtVector4R vp4_rhom = vp4_pim + vp4_pi0;
139 EvtVector4R vp4_W = vp4_Lep + vp4_Nu;
140
141 m2 = vp4_3pi.mass2();
142 q2 = vp4_W.mass2();
143 s12 = vp4_rho0.mass2();
144 s13 = vp4_rhop.mass2();
145 s23 = vp4_rhom.mass2();
146
147 EvtVector4R boost;
148 boost.set(vp4_3pi.get(0), -vp4_3pi.get(1), -vp4_3pi.get(2), -vp4_3pi.get(3));
149 EvtVector4R vp4_rhob = boostTo(vp4_rho0, boost);
150 cosV = vp4_rhob.dot(vp4_3pi)/(vp4_rhob.d3mag()*vp4_3pi.d3mag());
151
152 EvtVector4R vp4_pipb = boostTo(vp4_pip, boost);
153 EvtVector4R vp4_pimb = boostTo(vp4_pim, boost);
154 EvtVector4R R = vp4_pipb.cross(vp4_pimb);
155 spin_V = R.d3mag(); // sart(|pi+ times pi-|^2)
156
157 boost.set(vp4_W.get(0), -vp4_W.get(1), -vp4_W.get(2), -vp4_W.get(3));
158 EvtVector4R vp4_Lepp = boostTo(vp4_Lep, boost);
159 cosL = vp4_Lepp.dot(vp4_W)/(vp4_Lepp.d3mag()*vp4_W.d3mag());
160
161 EvtVector4R V = vp4_3pi/vp4_3pi.d3mag();
162 EvtVector4R C = vp4_rhob.cross(V);
163 C/=C.d3mag();
164 EvtVector4R D = vp4_Lepp.cross(V);
165 D/=D.d3mag();
166 double sinx = C.cross(V).dot(D);
167 double cosx = C.dot(D);
168 chi = sinx>0? acos(cosx): -acos(cosx);
169 if(charm==-1) chi=-chi;
170}
171
172double EvtDsTophienu::calPDF(double m2, double q2, double cosV, double cosL, double chi, double s12, double s13, double s23, double spin_V) {
173 double m = sqrt(m2);
174 double q = sqrt(q2);
175 double m12 = sqrt(s12); // m(pi+pi-)
176 double m13 = sqrt(s13); // m(pi+pi0)
177 double m23 = sqrt(s23); // m(pi-pi0)
178 //cout << "m12 = " << m12 << " m13 = " << m13 << " m23 = " << m23 << " m = " << m << " q = " << q << endl;
179
180 EvtComplex A_rhopi(0.0,0.0);
181 ResonanceV(s12, m12, s13, m13, s23, m23, A_rhopi);
182 double A2_phi = spin_V*spin_V*abs2(A_rhopi); // Eq.(1)
183 //cout << "spin_V = " << spin_V << "2 = " << spin_V*spin_V << " A_rho = " << abs2(A_rhopi) << endl;
184
185 EvtComplex f11(0.0,0.0);
186 EvtComplex f21(0.0,0.0);
187 EvtComplex f31(0.0,0.0);
188 ResonanceP(m2, m, q2, q, s12, m12, s13, m13, s23, m23, f11, f21, f31);
189
190 double cosV2 = cosV*cosV;
191 double sinV = sqrt(1.0-cosV2);
192 double sinV2 = sinV*sinV;
193
194 EvtComplex F1 = f11*cosV;
195 EvtComplex F2 = f21*root1d2;
196 EvtComplex F3 = f31*root1d2;
197 //cout << "F1= " << F1 << abs2(F1) << endl;
198 //cout << "F2= " << F2 << abs2(F2) << endl;
199 //cout << "F3= " << F3 << abs2(F3) << endl;
200
201 double I1 = 0.25*( abs2(F1) + 1.5*sinV2*(abs2(F2) + abs2(F3) ) );
202 double I2 = -0.25*( abs2(F1) - 0.5*sinV2*(abs2(F2) + abs2(F3) ) );
203 double I3 = -0.25*( abs2(F2) - abs2(F3) )*sinV2;
204 double I4 = real( conj(F1)*F2 )*sinV*0.5;
205 double I5 = real( conj(F1)*F3 )*sinV;
206 double I6 = real( conj(F2)*F3 )*sinV2;
207 //cout << "Ix = " << I1 << ", " << I2 << ", " << I3 << ", " << I4 << ", " << I5 << ", " << I6 << endl;
208
209 double coschi = cos(chi);
210 double sinchi = sin(chi);
211 double sin2chi = 2.0*sinchi*coschi;
212 double cos2chi = 1.0 - 2.0*sinchi*sinchi;
213
214 double sinL = sqrt(1. - cosL*cosL);
215 double sinL2 = sinL*sinL;
216 double sin2L = 2.0*sinL*cosL;
217 double cos2L = 1.0 - 2.0*sinL2;
218
219 double I = A2_phi*(I1 + I2*cos2L + I3*sinL2*cos2chi + I4*sin2L*coschi + I5*sinL*coschi + I6*cosL);
220 return I;
221}
222
223void EvtDsTophienu::ResonanceV(double s12, double m12, double s13, double m13, double s23, double m23, EvtComplex& A_rhopi)
224{
225 double G_rho0 = w_rho/m12*pow((s12-4.0*m2pi0)/(m2_rho-4.0*m2pi0), 1.5); // Gamma(rho0) Eq.(10)
226 double G_rhop = w_rho/m13*pow((s13-4.0*m2pi)/( m2_rho-4.0*m2pi), 1.5); // Gamma(rho+) Eq.(10)
227 double G_rhom = w_rho/m23*pow((s23-4.0*m2pi)/( m2_rho-4.0*m2pi), 1.5); // Gamma(rho-) Eq.(10)
228
229 double AA0 = s12/m2_rho - 1.0;
230 EvtComplex amp0 = EvtComplex(1.0, 0.0)/EvtComplex(AA0,G_rho0);
231 double AAp = s13/m2_rho - 1.0;
232 EvtComplex ampp = EvtComplex(1.0, 0.0)/EvtComplex(AAp,G_rhop);
233 double AAm = s23/m2_rho - 1.0;
234 EvtComplex ampm = EvtComplex(1.0, 0.0)/EvtComplex(AAm,G_rhom);
235
236 A_rhopi = amp0 + ampp + ampm; // Eq.(10)
237}
238
239void EvtDsTophienu::ResonanceP(double m2, double m, double q2, double q, double s12, double m12, double s13, double m13, double s23, double m23, EvtComplex& F11, EvtComplex& F21, EvtComplex& F31)
240{
241 double p_phi = getPStar(m2Ds, m2, q2);
242 double summDsm = mDs+m;
243 double V = V_0 /(1.0 - q2/(mV2));
244 double A1 = A1_0/(1.0 - q2/(mA2));
245 double A2 = A2_0/(1.0 - q2/(mA2));
246 double A = summDsm*A1;
247 double B = 2.0*mDs*p_phi/summDsm*V;
248
249 //construct the helicity form factor
250 double H0 = 0.5/(m*q)*((m2Ds-m2-q2)*summDsm*A1-4.0*(m2Ds*p_phi*p_phi)/summDsm*A2);
251 double Hp = A-B;
252 double Hm = A+B;
253
254 //calculate alpha
255 double pStar0 = getPStar(m2_phi, s12, m2pi0);
256 //double pStar0 = getPStar(m2_phi, m2_rho, m2pi0);
257 double alpha = sqrt(3.*Pi*0.154/(pStar0*w_phi));
258
259 double AA = m2_phi-m2;
260
261 //construct BW for phi -> rho0 pi0
262 double F0 = getF1(m2, m, s12, m2pi0);
263 //double F0 = getF1(m2, m, m2_rho, m2pi0);
264 double width0 = getWidth1(m2, m, s12, m2pi0, w_phi);
265 //double width0 = getWidth1(m2, m, m2_rho, m2pi0, w_phi);
266
267 EvtComplex C0(mw_phi*F0,0.0);
268 double BB0 = -m_phi*width0;
269 EvtComplex amp0 = C0/EvtComplex(AA,BB0);
270
271 //construct BW for phi -> rho+ pi-
272 double Fp = getF1(m2, m, s13, m2pi);
273 //double Fp = getF1(m2, m, m2_rho, m2pi);
274 double widthp = getWidth1(m2, m, s13, m2pi, w_phi);
275 //double widthp = getWidth1(m2, m, m2_rho, m2pi, w_phi);
276
277 EvtComplex Cp(mw_phi*Fp,0.0);
278 double BBp = -m_phi*widthp;
279 EvtComplex ampp = Cp/EvtComplex(AA,BBp);
280
281 //construct BW for phi -> rho- pi+
282 double Fm = getF1(m2, m, s23, m2pi);
283 //double Fm = getF1(m2, m, m2_rho, m2pi);
284 double widthm = getWidth1(m2, m, s23, m2pi, w_phi);
285 //double widthm = getWidth1(m2, m, m2_rho, m2pi, w_phi);
286
287 EvtComplex Cm(mw_phi*Fm,0.0);
288 double BBm = -m_phi*widthm;
289 EvtComplex ampm = Cm/EvtComplex(AA,BBm);
290
291 EvtComplex amp = amp0 + ampp + ampm; // Eq. (15)
292
293 double alpham2 = alpha*2.0;
294 F11 = amp*alpham2*q*H0*root2;
295 F21 = amp*alpham2*q*(Hp+Hm);
296 F31 = amp*alpham2*q*(Hp-Hm);
297}
298
299double EvtDsTophienu::getF1(double sa, double ma, double sb, double sc) // a -> b + c
300{
301 double pStar = getPStar(sa, sb, sc);
302 double pStar0 = getPStar(m2_phi, sb, sc);
303 double B = 1./sqrt(1.+rBW2*pStar*pStar);
304 double B0 = 1./sqrt(1.+rBW2*pStar0*pStar0);
305 double F = pStar/pStar0*B/B0;
306 return F;
307}
308
309double EvtDsTophienu::getWidth1(double sa, double ma, double sb, double sc, double width0)
310{
311 double pStar = getPStar(sa, sb, sc);
312 double pStar0 = getPStar(m2_phi, sb, sc);
313 double F = getF1(sa, ma, sb, sc);
314 double width = width0*pStar/pStar0*m_phi/ma*F*F;
315 return width;
316}
317
318double EvtDsTophienu::getPStar(double s, double s1, double s2)
319{
320 double x = s + s1 - s2;
321 double t = 0.25*x*x/s - s1;
322 double p;
323 if (t>0.0) {
324 p = sqrt(t);
325 } else {
326 //std::cout << " Hello, pstar is less than 0.0" << std::endl;
327 p = sqrt(-t);
328 //p = 0.02;
329 }
330 return p;
331}
double sin(const BesAngle a)
Definition BesAngle.h:210
double cos(const BesAngle a)
Definition BesAngle.h:213
Double_t x[10]
const DifComplex I
Evt3Rank3C conj(const Evt3Rank3C &t2)
double abs2(const EvtComplex &c)
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
const double alpha
XmlRpcServer s
****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
TTree * t
Definition binning.cxx:23
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)
EvtDecayBase * clone()
void decay(EvtParticle *p)
void getName(std::string &name)
virtual ~EvtDsTophienu()
static int getStdHep(EvtId id)
Definition EvtPDL.hh:56
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 double double * s12
Definition qcdloop1.h:77
double double double double double * s23
Definition qcdloop1.h:77
double double * m2
Definition qcdloop1.h:75