77 std::string son0,son1,son2;
80 for(
int i=0;i<Ndaugs;i++){
82 if(nson!=
"gammaFSR" && nson!=
"gamma"){ Vson.push_back(nson);Vid.push_back(theParent->
getDaug(i)->
getId());}
89 son0 = Vson[0];son1 = Vson[1];
90 if(son0 ==
"D0" && son1 ==
"anti-D0" || son1 ==
"D0" && son0 ==
"anti-D0") {
return 0;}
else
91 if(son0 ==
"D+" && son1 ==
"D-" || son1 ==
"D+" && son0 ==
"D-" ) {
return 1;}
else
92 if(son0 ==
"D0" && son1 ==
"anti-D*0" || son1 ==
"D0" && son0 ==
"anti-D*0") {
return 2;}
else
93 if(son0 ==
"anti-D0" && son1 ==
"D*0" || son1 ==
"anti-D0" && son0 ==
"D*0") {
return 3;}
else
94 if(son0 ==
"D*0" && son1 ==
"anti-D*0" || son1 ==
"D*0" && son0 ==
"anti-D*0") {
return 4;}
else
95 if(son0 ==
"D*+" && son1 ==
"D-" || son1 ==
"D*+" && son0 ==
"D-") {
return 5;}
else
96 if(son0 ==
"D*-" && son1 ==
"D+" || son1 ==
"D*-" && son0 ==
"D+") {
return 6;}
else
97 if(son0 ==
"D*+" && son1 ==
"D*-" || son1 ==
"D*+" && son0 ==
"D*-") {
return 7;}
else
98 if(son0 ==
"D_s+" && son1 ==
"D_s-" || son1 ==
"D_s+" && son0 ==
"D_s-") {
return 8;}
else
99 if(son0 ==
"D_s*+" && son1 ==
"D_s-" || son1 ==
"D_s*+" && son0 ==
"D_s-") {
return 9;}
else
100 if(son0 ==
"D_s*-" && son1 ==
"D_s+" || son1 ==
"D_s*-" && son0 ==
"D_s+") {
return 10;}
else
101 if(son0 ==
"D_s*+" && son1 ==
"D_s*-" || son1 ==
"D_s*+" && son0 ==
"D_s*-") {
return 11;}
103 son0 = Vson[0];son1 = Vson[1];son2 = Vson[2];
104 if(son0 ==
"D*+" && son1 ==
"D-" && son2 ==
"pi0" ) {
return 12;}
else
105 if(son0 ==
"D*-" && son1 ==
"D+" && son2 ==
"pi0" ) {
return 13;}
else
106 if(son0 ==
"D*+" && son1 ==
"anti-D0" && son2 ==
"pi-" ) {
return 14;}
else
107 if(son0 ==
"D*-" && son1 ==
"D0" && son2 ==
"pi+" ) {
return 15;}
else
108 if(son0 ==
"D+" && son1 ==
"anti-D*0" && son2 ==
"pi-" ) {
return 16;}
else
109 if(son0 ==
"D-" && son1 ==
"D*0" && son2 ==
"pi+" ) {
return 17;}
else
110 if(son0 ==
"D*+" && son1 ==
"D*-" && son2 ==
"pi0" ) {
return 18;}
else
111 if(son0 ==
"anti-D*0" &&son1 ==
"D*+" && son2 ==
"pi-" ) {
return 19;}
else
112 if(son0 ==
"D*0" && son1 ==
"D*-" && son2 ==
"pi+" ) {
return 20;}
else
113 if(son0 ==
"D*0" && son1 ==
"anti-D*0" && son2 ==
"pi0" ) {
return 21;}
else
114 if(son0 ==
"D0" && son1 ==
"anti-D*0" && son2 ==
"pi0" ) {
return 22;}
else
115 if(son0 ==
"anti-D0" && son1 ==
"D*0" && son2 ==
"pi0" ) {
return 23;}
117 std::cout<<
"Not open charm decay"<<std::endl;
118 for(
int j=0;j<nh;j++){
119 std::cout<<
"final states, J= "<<j<<
" "<<Vson[j]<<std::endl;
130 double d0d0bar_xs=
polint(d0d0bar);
131 double dpdm_xs =
polint(dpdm);
132 double d0dst0bar_xs =
polint(d0dst0bar);
133 double d0bardst0_xs =
polint(d0bardst0);
135 double dst0dst0bar_xs =
polint(dst0dst0bar);
136 double dstpdm_xs =
polint(dstpdm);
138 double dstmdp_xs =
polint(dstmdp);
139 double dstpdstm_xs =
polint(dstpdstm);
141 double dspdsm_xs =
polint(dspdsm);
143 double dsspdsm_xs =
polint(dsspdsm);
144 double dssmdsp_xs =
polint(dssmdsp);
146 double dsspdssm_xs =
polint(dsspdssm);
148 double _xs12 =
polint(xs12);
149 double _xs13 =
polint(xs13);
150 double _xs14 =
polint(xs14);
151 double _xs15 =
polint(xs15);
152 double _xs16 =
polint(xs16);
153 double _xs17 =
polint(xs17);
154 double _xs18 =
polint(xs18);
155 double _xs19 =
polint(xs19);
156 double _xs20 =
polint(xs20);
157 double _xs21 =
polint(xs21);
158 double _xs22 =
polint(xs22);
159 double _xs23 =
polint(xs23);
165 for(
int i=0;i<Vid.size();i++){
168 double mparent= theParent->
getP4().
mass();
170 if (mparent<xmtotal){
return false;}
173 std::vector<double> myxs; myxs.clear();
174 myxs.push_back(d0d0bar_xs);
175 myxs.push_back(dpdm_xs);
176 myxs.push_back(d0dst0bar_xs);
177 myxs.push_back(d0bardst0_xs);
178 myxs.push_back(dst0dst0bar_xs);
179 myxs.push_back(dstpdm_xs);
180 myxs.push_back(dstmdp_xs);
181 myxs.push_back(dstpdstm_xs);
182 myxs.push_back(dspdsm_xs);
183 myxs.push_back(dsspdsm_xs);
184 myxs.push_back(dssmdsp_xs);
185 myxs.push_back(dsspdssm_xs);
187 myxs.push_back(_xs12);
188 myxs.push_back(_xs13);
189 myxs.push_back(_xs14);
190 myxs.push_back(_xs15);
191 myxs.push_back(_xs16);
192 myxs.push_back(_xs17);
193 myxs.push_back(_xs18);
194 myxs.push_back(_xs19);
195 myxs.push_back(_xs20);
196 myxs.push_back(_xs21);
197 myxs.push_back(_xs22);
198 myxs.push_back(_xs23);
201 if(ich==0){ Prop0=0;}
else
209 if( Prop0 < pm && pm<= Prop1 ) flag =
true;
308 if(
ecms<3.97 || ecms >4.66){std::cout<<
"EvtPsi3Sdecay::getDecay: You need to set the CMS energy between 3.97~4.66 GeV, but you have ecms= "<<
ecms<<
" GeV.The lower end can be set at KKMC"<<std::endl; }
309 if(_excflag ==1)
return _themode;
312 double d0d0bar_xs=
polint(d0d0bar);
313 double dpdm_xs =
polint(dpdm);
314 double d0dst0bar_xs =
polint(d0dst0bar);
315 double d0bardst0_xs =
polint(d0bardst0);
317 double dst0dst0bar_xs =
polint(dst0dst0bar);
318 double dstpdm_xs =
polint(dstpdm);
320 double dstmdp_xs =
polint(dstmdp);
321 double dstpdstm_xs =
polint(dstpdstm);
323 double dspdsm_xs =
polint(dspdsm);
325 double dsspdsm_xs =
polint(dsspdsm);
326 double dssmdsp_xs =
polint(dssmdsp);
328 double dsspdssm_xs =
polint(dsspdssm);
330 double _xs12 =
polint(xs12);
331 double _xs13 =
polint(xs13);
332 double _xs14 =
polint(xs14);
333 double _xs15 =
polint(xs15);
334 double _xs16 =
polint(xs16);
335 double _xs17 =
polint(xs17);
336 double _xs18 =
polint(xs18);
337 double _xs19 =
polint(xs19);
338 double _xs20 =
polint(xs20);
339 double _xs21 =
polint(xs21);
340 double _xs22 =
polint(xs22);
341 double _xs23 =
polint(xs23);
344 std::vector<double> myxs; myxs.clear();
345 myxs.push_back(d0d0bar_xs);
346 myxs.push_back(dpdm_xs);
347 myxs.push_back(d0dst0bar_xs);
348 myxs.push_back(d0bardst0_xs);
349 myxs.push_back(dst0dst0bar_xs);
350 myxs.push_back(dstpdm_xs);
351 myxs.push_back(dstmdp_xs);
352 myxs.push_back(dstpdstm_xs);
353 myxs.push_back(dspdsm_xs);
354 myxs.push_back(dsspdsm_xs);
355 myxs.push_back(dssmdsp_xs);
356 myxs.push_back(dsspdssm_xs);
357 myxs.push_back(_xs12);
358 myxs.push_back(_xs13);
359 myxs.push_back(_xs14);
360 myxs.push_back(_xs15);
361 myxs.push_back(_xs16);
362 myxs.push_back(_xs17);
363 myxs.push_back(_xs18);
364 myxs.push_back(_xs19);
365 myxs.push_back(_xs20);
366 myxs.push_back(_xs21);
367 myxs.push_back(_xs22);
368 myxs.push_back(_xs23);
375 if(niter>1000) {std::cout<<
"EvtPsi3Sdecay:getDecay() do loops over 1000 times at Ecm= "<<
ecms<<std::endl;abort();}
378 std::vector<EvtId> theVid;
381 for(
int i=0;i<theVid.size();i++){
384 if(Ecms < xmtotal ) {
goto loop;}
387 if(ich==0){ Prop0=0;}
else
395 if( Prop0 < pm && pm<= Prop1 ) {
return ich;}
static EvtParticle * particleFactory(EvtSpinType::spintype spinType)
void makeDaughters(int ndaug, EvtId *id)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)