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