33 if(Ecms < x[0] ){theLocation =0;}
else
34 if(Ecms >=x[nsize-1]) {theLocation = nsize-1;}
else{
35 for (
int i=0;i<nsize-1;i++){
36 if( x[i] <= Ecms && x[i+1] > Ecms) {theLocation=i;}
46 if(theLocation==nsize-1){xs = vy[nsize-1];}
else{
47 xs = (vy[theLocation +1 ]- vy[theLocation]) / (x[theLocation+1]-x[theLocation])*(Ecms - x[theLocation])+vy[theLocation];
56 int Nchannels=myxs.size();
60 std::vector <double> thexs;
63 for(
int j=0;j<Nchannels;j++){
65 thexs.push_back(sumxs);
69 if(sumxs == 0) {std::cout<<
"EvtPsi3Sdecay::theProb, denominator is 0"<<std::endl;::abort();}
70 return thexs[ich] / sumxs ;
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;
226 double xm = par->
mass();
228 std::vector< EvtId > theid =
getVId(themode);
229 int ndaugjs = theid.size();
231 for(
int i=0;i<ndaugjs;i++){myId[i]=theid[i];}
248 v_p4.clear();Vid.clear();
249 double xm = par->
mass();
254 std::vector< EvtId > theid =
getVId(themode);
255 int ndaugjs = theid.size();
257 for(
int i=0;i<ndaugjs;i++){myId[i]=theid[i];}
260 for(
int i=0;i<mypar->
getNDaug();i++){
269 bool pp = (themode == 0||themode == 1 ||themode ==6);
270 bool vp = (themode >=2 && themode <=5 || themode >=7 && themode <=9 );
277 if(
alpha != 0 && !flag1 )
goto loop;
280 for(
int i=0;i<mypar->
getNDaug();i++){
282 v_p4.push_back( di->
getP4() );
283 Vid.push_back(myId[i]);
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;}
402 std::vector<EvtId> theVid;
404 for(
int i=0;i<VmodeSon[mode].size();i++){
406 theVid.push_back(theId);
417 double costheta=
cos(theta);
421 double ags = (1+
alpha*costheta*costheta)/max_alpha;
423 if(rand <=ags) {
return true;}
double cos(const BesAngle a)
static std::string name(EvtId i)
static double getMinMass(EvtId i)
static EvtId getId(const std::string &name)
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)
int getDecay(double ecms)
double theProb(std::vector< double > myxs, int ich)
void PHSPDecay(EvtParticle *par)
bool AngSam(EvtVector4R parent_p4cm, EvtVector4R son_p4cm, double alpha)
std::vector< EvtId > getVId(int mode)
double polint(std::vector< double > points)