]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenModels/EvtISGWFF.cpp
ATO-78 - Technical changes to compare different calibrations
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtISGWFF.cpp
1 //--------------------------------------------------------------------------
2 //
3 // Environment:
4 //      This software is part of the EvtGen package developed jointly
5 //      for the BaBar and CLEO collaborations.  If you use all or part
6 //      of it, please give an appropriate acknowledgement.
7 //
8 // Copyright Information: See EvtGen/COPYRIGHT
9 //      Copyright (C) 1998      Caltech, UCSB
10 //
11 // Module: EvtISGWFF.cc
12 //
13 // Description: Routine to implement semileptonic form factors
14 //              according to the model ISGW
15 //
16 // Modification history:
17 //
18 //    DJL     April 17, 1998        Module created
19 //
20 //------------------------------------------------------------------------
21 // 
22 #include "EvtGenBase/EvtPatches.hh"
23 #include "EvtGenBase/EvtPatches.hh"
24 #include "EvtGenBase/EvtReport.hh"
25 #include "EvtGenModels/EvtISGWFF.hh"
26 #include "EvtGenBase/EvtPDL.hh"
27 #include "EvtGenBase/EvtId.hh"
28 #include <string>
29 #include <math.h>
30 #include <stdlib.h>
31 using std::endl;
32
33 void EvtISGWFF::getscalarff(EvtId parent,EvtId daught,
34                        double t, double mass, double *fpf,
35                             double *f0f ) {
36
37   //added by Lange Jan4,2000
38   static EvtId D0=EvtPDL::getId("D0");
39   static EvtId D0B=EvtPDL::getId("anti-D0");
40   static EvtId DP=EvtPDL::getId("D+");
41   static EvtId DM=EvtPDL::getId("D-");
42
43   static EvtId D3P0P=EvtPDL::getId("D_0*+");
44   static EvtId D3P0N=EvtPDL::getId("D_0*-");
45   static EvtId D3P00=EvtPDL::getId("D_0*0");
46   static EvtId D3P0B=EvtPDL::getId("anti-D_0*0");
47
48   static EvtId D21S0P=EvtPDL::getId("hi");
49   static EvtId D21S0N=EvtPDL::getId("hi");
50   static EvtId D21S00=EvtPDL::getId("hi");
51   static EvtId D21S0B=EvtPDL::getId("hi");
52
53   static EvtId ETA2S=EvtPDL::getId("eta(2S)");
54
55   static EvtId PI2S0=EvtPDL::getId("pi(2S)0");
56   static EvtId PI2SP=EvtPDL::getId("pi(2S)+");
57   static EvtId PI2SM=EvtPDL::getId("pi(2S)-");
58
59   static EvtId PIP=EvtPDL::getId("pi+");
60   static EvtId PIM=EvtPDL::getId("pi-");
61   static EvtId PI0=EvtPDL::getId("pi0");
62
63   static EvtId A0P=EvtPDL::getId("a_0+");
64   static EvtId A0M=EvtPDL::getId("a_0-");
65   static EvtId A00=EvtPDL::getId("a_00"); 
66
67   static EvtId F0=EvtPDL::getId("f_0");
68   static EvtId F0PR=EvtPDL::getId("f'_0");
69
70   static EvtId ETA=EvtPDL::getId("eta");
71   static EvtId ETAPR=EvtPDL::getId("eta'");
72
73   static EvtId KP=EvtPDL::getId("K+");
74   static EvtId KM=EvtPDL::getId("K-");
75   static EvtId K0=EvtPDL::getId("K0");
76   static EvtId KB=EvtPDL::getId("anti-K0");
77   static EvtId K0S=EvtPDL::getId("K_S0");
78   static EvtId K0L=EvtPDL::getId("K_L0");
79
80   static EvtId K0STP=EvtPDL::getId("K_0*+");
81   static EvtId K0STM=EvtPDL::getId("K_0*-");
82   static EvtId K0ST0=EvtPDL::getId("K_0*0");
83   static EvtId K0STB=EvtPDL::getId("anti-K_0*0");
84
85   static EvtId DSP=EvtPDL::getId("D_s+");
86   static EvtId DSM=EvtPDL::getId("D_s-");
87
88   static EvtId D3P0SP=EvtPDL::getId("D_s0*+");
89   static EvtId D3P0SN=EvtPDL::getId("D_s0*-");
90
91   double fmf;
92   double mb=EvtPDL::getMeanMass(parent);
93
94   if (daught==PI0||daught==PIP||daught==PIM||daught==ETA||
95       daught==ETAPR||daught==D0||daught==D0B||daught==DP||
96       daught==DM||daught==KP||daught==KM||daught==K0||daught==K0L||
97       daught==KB||daught==DSP||daught==DSM||daught==K0S) {
98
99       EvtISGW1FF1S0(parent,daught,t,mass,fpf,&fmf);
100   }
101       
102   if (daught==PI2S0||daught==PI2SP||daught==PI2SM||daught==ETA2S||
103       daught==D21S0P||daught==D21S0B||daught==D21S0N||daught==D21S00){
104       EvtISGW1FF21S0(parent,daught,t,mass,fpf,&fmf);
105   }
106   
107   if (daught==A00||daught==A0P||daught==A0M||daught==F0||
108       daught==F0PR||daught==D3P0P||daught==D3P00||daught==D3P0B||
109       daught==D3P0N||daught==K0STM||daught==K0STB||daught==K0STP||
110       daught==D3P0SP||daught==D3P0SN||
111       daught==K0ST0) {
112     EvtISGW1FF3P0(parent,daught,t,mass,fpf,&fmf);
113   }
114
115   *f0f = (fmf/((mb*mb-mass*mass)/t))+(*fpf);
116
117   return ;
118 }
119
120  void EvtISGWFF::gettensorff(EvtId parent,EvtId daught,
121                        double t, double mass, double *hf,
122                              double *kf, double *bpf, double *bmf ){
123
124   //added by Lange Jan4,2000
125    EvtISGW1FF3P2(parent,daught,t,mass,hf,kf,bpf,bmf);
126    
127    return;
128
129  }
130
131
132  void EvtISGWFF::getvectorff(EvtId parent,EvtId daught,
133                        double t, double mass, double *a1f,
134                              double *a2f, double *vf, double *a0f ){
135  
136   //added by Lange Jan4,2000
137   static EvtId DST0=EvtPDL::getId("D*0");
138   static EvtId DSTB=EvtPDL::getId("anti-D*0");
139   static EvtId DSTP=EvtPDL::getId("D*+");
140   static EvtId DSTM=EvtPDL::getId("D*-");
141
142   static EvtId D1P1P=EvtPDL::getId("D_1+");
143   static EvtId D1P1N=EvtPDL::getId("D_1-");
144   static EvtId D1P10=EvtPDL::getId("D_10");
145   static EvtId D1P1B=EvtPDL::getId("anti-D_10");
146
147   static EvtId D3P1P=EvtPDL::getId("D'_1+");
148   static EvtId D3P1N=EvtPDL::getId("D'_1-");
149   static EvtId D3P10=EvtPDL::getId("D'_10");
150   static EvtId D3P1B=EvtPDL::getId("anti-D'_10");
151
152   static EvtId D23S1P=EvtPDL::getId("hi");
153   static EvtId D23S1N=EvtPDL::getId("hi");
154   static EvtId D23S10=EvtPDL::getId("hi");
155   static EvtId D23S1B=EvtPDL::getId("hi");
156
157   static EvtId RHO2S0=EvtPDL::getId("rho(2S)0");
158   static EvtId RHO2SP=EvtPDL::getId("rho(2S)+");
159   static EvtId RHO2SM=EvtPDL::getId("rho(2S)-");
160   static EvtId OMEG2S=EvtPDL::getId("omega(2S)");
161
162   static EvtId RHOP=EvtPDL::getId("rho+");
163   static EvtId RHOM=EvtPDL::getId("rho-");
164   static EvtId RHO0=EvtPDL::getId("rho0");
165
166   static EvtId A1P=EvtPDL::getId("a_1+");
167   static EvtId A1M=EvtPDL::getId("a_1-");
168   static EvtId A10=EvtPDL::getId("a_10");
169
170   static EvtId B1P=EvtPDL::getId("b_1+");
171   static EvtId B1M=EvtPDL::getId("b_1-");
172   static EvtId B10=EvtPDL::getId("b_10");
173
174   static EvtId H1=EvtPDL::getId("h_1");
175   static EvtId H1PR=EvtPDL::getId("h'_1");
176
177   static EvtId F1=EvtPDL::getId("f_1");
178   static EvtId F1PR=EvtPDL::getId("f'_1");
179
180   static EvtId OMEG=EvtPDL::getId("omega");
181
182   static EvtId KSTP=EvtPDL::getId("K*+");
183   static EvtId KSTM=EvtPDL::getId("K*-");
184   static EvtId KST0=EvtPDL::getId("K*0");
185   static EvtId KSTB=EvtPDL::getId("anti-K*0");
186
187   static EvtId K1P=EvtPDL::getId("K_1+");
188   static EvtId K1M=EvtPDL::getId("K_1-");
189   static EvtId K10=EvtPDL::getId("K_10");
190   static EvtId K1B=EvtPDL::getId("anti-K_10");
191
192   static EvtId K1STP=EvtPDL::getId("K'_1+");
193   static EvtId K1STM=EvtPDL::getId("K'_1-");
194   static EvtId K1ST0=EvtPDL::getId("K'_10");
195   static EvtId K1STB=EvtPDL::getId("anti-K'_10");
196
197   static EvtId PHI=EvtPDL::getId("phi");
198
199   static EvtId D1P1SP=EvtPDL::getId("D_s1+");
200   static EvtId D1P1SN=EvtPDL::getId("D_s1-");
201
202   static EvtId D3P1SP=EvtPDL::getId("D'_s1*+");
203   static EvtId D3P1SN=EvtPDL::getId("D'_s1*-");
204
205   static EvtId DSSTP=EvtPDL::getId("D_s*+");
206   static EvtId DSSTM=EvtPDL::getId("D_s*-");
207
208    double ff,gf,apf,amf;
209
210    if (daught==DST0||daught==DSTP||daught==DSTM||daught==DSTB||
211        daught==OMEG||daught==RHO0||daught==RHOM||daught==RHOP||
212        daught==KSTP||daught==KSTM||daught==KST0||daught==KSTB||
213        daught==PHI||daught==DSSTP||daught==DSSTM) {
214      EvtISGW1FF3S1(parent,daught,t,mass,&ff,&gf,&apf,&amf);
215    }
216    if (daught==B10||daught==B1P||daught==B1M||daught==H1||
217        daught==H1PR||daught==D1P1P||daught==D1P10||daught==D1P1B||
218        daught==D1P1SP||daught==D1P1SN||
219        daught==D1P1N||daught==K10||daught==K1B||daught==K1P||
220        daught==K1M) {
221      EvtISGW1FF1P1(parent,daught,t,mass,&ff,&gf,&apf,&amf);
222    }
223    if (daught==RHO2S0||daught==RHO2SP||daught==RHO2SM||daught==OMEG2S||
224        daught==D23S1P||daught==D23S1B||daught==D23S1N||daught==D23S10){
225      EvtISGW1FF23S1(parent,daught,t,mass,&ff,&gf,&apf,&amf);
226    }
227    if (daught==A10||daught==A1P||daught==A1M||daught==F1||
228                   daught==F1PR||daught==D3P1P||daught==D3P10||daught==D3P1B||
229        daught==D3P1N||daught==K1STM||daught==K1STB||daught==K1STP||
230        daught==D3P1SP||daught==D3P1SN||
231        daught==K1ST0) {
232      EvtISGW1FF3P1(parent,daught,t,mass,&ff,&gf,&apf,&amf);
233    }
234
235    // Need to stuff in some factors to make these the ffs that
236    // is used elsewhere...
237
238    double mb=EvtPDL::getMeanMass(parent);
239   
240
241    *vf = (gf)*(mb+mass);
242    *a1f = (ff)/(mb+mass);
243    *a2f = -1.0*(apf)*(mb+mass);
244    double a3f = ((mb+mass)/(2.0*mass))*(*a1f) -
245         ((mb-mass)/(2.0*mass))*(*a2f);
246    
247    *a0f = a3f - ( (t*amf)/(2.0*mass));
248
249    return;
250  }
251
252 void EvtISGWFF::EvtISGW1FF3P2 (EvtId parent,EvtId daugt,
253        double t, double mass,
254        double *hf, double *kf, double *bpf, double *bmf ) {
255
256   //added by Lange Jan4,2000
257   static EvtId BP=EvtPDL::getId("B+");
258   static EvtId BM=EvtPDL::getId("B-");
259   static EvtId B0=EvtPDL::getId("B0");
260   static EvtId B0B=EvtPDL::getId("anti-B0");
261
262   static EvtId D3P2P=EvtPDL::getId("D_2*+");
263   static EvtId D3P2N=EvtPDL::getId("D_2*-");
264   static EvtId D3P20=EvtPDL::getId("D_2*0");
265   static EvtId D3P2B=EvtPDL::getId("anti-D_2*0");
266
267   static EvtId A2P=EvtPDL::getId("a_2+");
268   static EvtId A2M=EvtPDL::getId("a_2-");
269   static EvtId A20=EvtPDL::getId("a_20");
270
271   static EvtId F2=EvtPDL::getId("f_2");
272   static EvtId F2PR=EvtPDL::getId("f'_2");
273
274   double mtb;
275   double msd(0.0), mx(0.0), mb(0.0); 
276   double msq(0.0), bx2(0.0),mtx,f5;
277   double mum,mup,tm,bb2(0.0),bbx2;
278   double msb(0.0), kap;
279
280   if (parent==BM||parent==BP||parent==B0||parent==B0B) { 
281     msb=5.2;
282     msd=0.33;
283     bb2=0.41*0.41;
284     if (daugt==A20||daugt==A2P||daugt==A2M||daugt==F2||daugt==F2PR) {
285       msq=0.33;
286       bx2=0.27*0.27;
287     }
288     else{
289       if (daugt==D3P2P||daugt==D3P2N||daugt==D3P2B||daugt==D3P20) {
290         msq=1.82;
291         bx2=0.34*0.34;
292       }
293       else{
294         report(ERROR,"EvtGen") << "Not implemented daugt in get_isgw_ff_3P1.\n";
295       }
296     }
297   }
298   else{
299     report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_3P1.\n";
300   }
301   
302   mtb = msb + msd;
303   mtx = msq + msd;
304
305   mb = EvtPDL::getMeanMass( parent );
306   mx = mass;
307
308   mup=1.0/(1.0/msq+1.0/msb);
309   mum=1.0/(1.0/msq-1.0/msb);
310   bbx2=0.5*(bb2+bx2);
311
312   tm=(mb-mx)*(mb-mx);
313   if (t>tm) t = 0.99*tm;
314   kap = 0.7*0.7;
315
316   f5 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,5.0/2.0)*
317        exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
318
319   *hf = f5*(msd/(sqrt(8.0*bb2)*mtb))*((1.0/msq)-(msd*bb2/(2.0*mum*
320         mtx*bbx2)));
321   
322   *kf = f5*msd*sqrt(2.0/bb2);
323
324   *bpf = (-1.0*f5*msd/(sqrt(8.0*bb2)*msb*mtx))*(1.0-(msd*msb*bx2/(
325          2.0*mup*mtb*bbx2))+(msd*msb*bx2*(1.0-(msd*bx2/(2.0*mtb*bbx2)))/
326          (4.0*mtb*mum*bbx2)));
327   *bmf = 0.0;
328   return;
329 } //get_ff_isgw_1p1
330
331 void EvtISGWFF::EvtISGW1FF1S0 ( EvtId parent, EvtId daugt,
332        double t, double mass, double *fpf, double *fmf ) {
333   
334   //added by Lange Jan4,2000
335   static EvtId BP=EvtPDL::getId("B+");
336   static EvtId BM=EvtPDL::getId("B-");
337   static EvtId B0=EvtPDL::getId("B0");
338   static EvtId B0B=EvtPDL::getId("anti-B0");
339
340   static EvtId D0=EvtPDL::getId("D0");
341   static EvtId D0B=EvtPDL::getId("anti-D0");
342   static EvtId DP=EvtPDL::getId("D+");
343   static EvtId DM=EvtPDL::getId("D-");
344
345   static EvtId PIP=EvtPDL::getId("pi+");
346   static EvtId PIM=EvtPDL::getId("pi-");
347   static EvtId PI0=EvtPDL::getId("pi0");
348
349   static EvtId ETA=EvtPDL::getId("eta");
350   static EvtId ETAPR=EvtPDL::getId("eta'");
351
352   double mtb;
353   double msd(0.0), mx(0.0), mb(0.0); 
354   double msq(0.0), bx2(0.0),mtx;
355   double f3,kap; 
356   double msb(0.0),bb2(0.0),mup,mum,bbx2,tm;
357
358   if (parent==BM||parent==BP||parent==B0||parent==B0B) {
359     msb=5.2;
360     msd=0.33;
361     bb2=0.41*0.41;
362     if (daugt==PIP||daugt==PIM||daugt==PI0||daugt==ETA||daugt==ETAPR) {
363       msq=0.33;
364       bx2=0.31*0.31;
365     }
366     else{
367       if (daugt==D0||daugt==DP||daugt==DM||daugt==D0B) {      
368         msq=1.82;
369         bx2=0.39*0.39;
370       }      
371       else{
372         report(ERROR,"EvtGen") << "Not implemented daugt in get_isgw_ff_1S0.\n";
373       }
374     }
375   }
376   else{
377     report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_1S0.\n";
378     report(ERROR,"EvtGen") << "Parent:"<<parent.getId()<<endl;
379   }
380   
381   mtb = msb + msd;
382   mtx = msq + msd;
383   mb = EvtPDL::getMeanMass( parent );
384   mx = mass;
385   mup=1.0/(1.0/msq+1.0/msb);
386   mum=1.0/(1.0/msq-1.0/msb);
387   bbx2=0.5*(bb2+bx2);
388   tm=(mb-mx)*(mb-mx);
389   if ( t>tm ) t=0.99*tm;
390   
391   kap = 0.7*0.7;
392   f3 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,3.0/2.0)*
393     exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
394
395   *fpf = f3*(1+(msb/(2.0*mum))-(msb*msq*msd*bb2/(4.0*mup*mum*mtx*bbx2)));
396   *fmf = f3*(1.0-(mtb+mtx)*(0.5/msq-(msd*bb2/(4.0*mup*mtx*bbx2))));
397
398   return;
399 } //get_ff_isgw_1s0
400
401
402
403 void  EvtISGWFF::EvtISGW1FF3S1(EvtId parent,EvtId daugt,double t,
404       double mass, double *f,double *g,double *ap,double *am){
405  
406   //added by Lange Jan4,2000
407   static EvtId BP=EvtPDL::getId("B+");
408   static EvtId BM=EvtPDL::getId("B-");
409   static EvtId B0=EvtPDL::getId("B0");
410   static EvtId B0B=EvtPDL::getId("anti-B0");
411
412   static EvtId DST0=EvtPDL::getId("D*0");
413   static EvtId DSTB=EvtPDL::getId("anti-D*0");
414   static EvtId DSTP=EvtPDL::getId("D*+");
415   static EvtId DSTM=EvtPDL::getId("D*-");
416
417   static EvtId RHOP=EvtPDL::getId("rho+");
418   static EvtId RHOM=EvtPDL::getId("rho-");
419   static EvtId RHO0=EvtPDL::getId("rho0");
420
421   static EvtId OMEG=EvtPDL::getId("omega");
422  
423   double msd(0.0),msq(0.0),bb2(0.0),mum,mtx,bbx2;
424   double bx2(0.0),msb(0.0),tm;
425   double mb,mx,f3, kap;
426
427   if (parent==BM||parent==BP||parent==B0||parent==B0B) { 
428     msb=5.2;
429     msd=0.33;
430     bb2=0.41*0.41;
431     if (daugt==DSTP||daugt==DSTM||daugt==DSTB||daugt==DST0) {
432       msq=1.82;
433       bx2=0.39*0.39;
434     }
435     else{
436       if (daugt==RHOP||daugt==RHOM||daugt==RHO0||daugt==OMEG) {
437         msq=0.33;
438         bx2=0.31*0.31;
439       }
440       else{
441         report(ERROR,"EvtGen") << "Not implemented daugt in get_isgw_ff_3S1.\n";
442       }
443     }
444   }
445   else{
446     report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_3S1.\n";
447   }
448   
449   double mtb;
450
451   mtb=msb+msd;
452   mtx=msq+msd;
453   
454   mum=1.0/(1.0/msq-1.0/msb);
455   bbx2=0.5*(bb2+bx2);
456   mb=EvtPDL::getMeanMass(parent);
457   mx=mass;
458   tm=(mb-mx)*(mb-mx);
459   if ( t > tm ) t = 0.99*tm;
460
461   kap = 0.7*0.7;
462   f3 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,3.0/2.0)*
463        exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
464   
465   *f=2.0*mtb*f3;
466   *g=0.5*f3*((1/msq)-(msd*bb2/(2.0*mum*mtx*bbx2)));
467   *ap=(-1.0*f3/(2.0*mtx))*(1.0+(msd*(bb2-bx2)/(msb
468       *(bb2+bx2)))-(msd*msd*bx2*bx2/(4.0*mum*mtb*bbx2*bbx2)));
469   *am=0.0;
470
471 }
472
473 void EvtISGWFF::EvtISGW1FF23S1 (EvtId parent,EvtId daugt,
474        double t, double mass, double *fpf, double *gpf, 
475        double *appf, double *apmf ) {
476   //added by Lange Jan4,2000
477   static EvtId BP=EvtPDL::getId("B+");
478   static EvtId BM=EvtPDL::getId("B-");
479   static EvtId B0=EvtPDL::getId("B0");
480   static EvtId B0B=EvtPDL::getId("anti-B0");
481
482   static EvtId D23S1P=EvtPDL::getId("hi");
483   static EvtId D23S1N=EvtPDL::getId("hi");
484   static EvtId D23S10=EvtPDL::getId("hi");
485   static EvtId D23S1B=EvtPDL::getId("hi");
486
487   static EvtId RHO2S0=EvtPDL::getId("rho(2S)0");
488   static EvtId RHO2SP=EvtPDL::getId("rho(2S)+");
489   static EvtId RHO2SM=EvtPDL::getId("rho(2S)-");
490   static EvtId OMEG2S=EvtPDL::getId("omega(2S)");
491
492   double mtb;
493   double msd(0.0), mx(0.0), mb(0.0); 
494   double msq(0.0), bx2(0.0),mtx;
495   double f3,f5,tt;
496   double mum,bb2(0.0),bbx2,tm,msb(0.0);
497     
498   if (parent==BM||parent==BP||parent==B0||parent==B0B) {
499     msb=5.2;
500     msd=0.33;
501     bb2=0.41*0.41;
502     if (daugt==RHO2SP||daugt==RHO2SM||daugt==RHO2S0||daugt==OMEG2S) {
503       msq=0.33;
504       bx2=0.31*0.31;
505     }
506     else{
507       if (daugt==D23S1N||daugt==D23S10||daugt==D23S1P||daugt==D23S1B) {
508       msq=1.82;
509       bx2=0.39*0.39;
510       }
511       else{
512         report(ERROR,"EvtGen") << "Not implemented daugt in get_isgw_ff_23P1.\n";
513       }
514     }
515   }
516   else{
517     report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_23P1.\n";
518   }
519   
520   mtb = msb + msd;
521   mtx = msq + msd;
522   mb = EvtPDL::getMeanMass( parent );
523   mx = mass;
524   mum=1.0/(1.0/msq-1.0/msb);
525   bbx2=0.5*(bb2+bx2);
526   tm=(mb-mx)*(mb-mx);
527   if (t>tm) t = 0.99*tm;
528   
529   double kap = 0.7*0.7;
530   f3 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,3.0/2.0)*
531     exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
532   
533   f5 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,5.0/2.0)*
534     exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
535   
536   *fpf = sqrt(6.0)*f3*mtb*( ((bb2-bx2)/(bb2+bx2)) + ((msd*msd*bx2*
537          (tm-t))/(6.0*mtx*mtb*bbx2*kap*bbx2)));
538        
539   *gpf = sqrt(3.0/8.0)*f3*( ((((bb2-bx2)/(bb2+bx2)) + ((msd*msd*bx2*
540          (tm-t))/(6.0*mtx*mtb*bbx2*kap*bbx2)))*
541          ((1.0/msq)-((msd*bb2)/(2.0*mum*mtx*bbx2)))) +
542          ((msd*bb2*bx2)/(3.0*mum*mtx*bbx2*bbx2)));
543
544   tt = (msd*msd*bx2*(tm-t))/(mtx*mtb*bb2*kap*bbx2);
545
546   *appf = (f5/(sqrt(6.0)*mtx))* ( ((3.0*mtb*bbx2/(2.0*msb*sqrt(bb2*bx2)))*
547           (1.0 - ( (msd*msd*msb*bx2*bx2)/(4.0*mtb*mtb*mum*bbx2*bbx2)))) -
548           ( (3.0*msd*sqrt(bx2/bb2))/(2.0*msb)) + 
549           ( (5.0*msd*sqrt(bx2*bb2)*(1.0 + 0.1*tt))/(2.0*msb*bbx2)) -
550           ( (3.0*mtb*sqrt(bb2/bx2)*(1.0 + (tt/6.0)))/(2.0*msb)) +
551           ( (7.0*msd*msd*sqrt(bb2/bx2)*bx2*bx2*(1.0 + (tt/14.0))) /
552             (8.0*mtb*mum*bbx2*bbx2))); 
553
554   *apmf = 0.0;
555   return;
556 } //get_ff_isgw_23s1
557
558
559 void EvtISGWFF::EvtISGW1FF3P1 (EvtId parent,EvtId daugt,
560        double t, double mass,
561        double *lf, double *qf, double *cpf, double *cmf ) {
562   //added by Lange Jan4,2000
563   static EvtId BP=EvtPDL::getId("B+");
564   static EvtId BM=EvtPDL::getId("B-");
565   static EvtId B0=EvtPDL::getId("B0");
566   static EvtId B0B=EvtPDL::getId("anti-B0");
567
568   static EvtId D3P1P=EvtPDL::getId("D'_1+");
569   static EvtId D3P1N=EvtPDL::getId("D'_1-");
570   static EvtId D3P10=EvtPDL::getId("D'_10");
571   static EvtId D3P1B=EvtPDL::getId("anti-D'_10");
572
573   static EvtId A1P=EvtPDL::getId("a_1+");
574   static EvtId A1M=EvtPDL::getId("a_1-");
575   static EvtId A10=EvtPDL::getId("a_10");
576
577   static EvtId F1=EvtPDL::getId("f_1");
578   static EvtId F1PR=EvtPDL::getId("f'_1");
579
580   double mtb;
581   double msd(0.0), mx(0.0), mb(0.0); 
582   double msq(0.0), bx2(0.0),mtx,f5;
583   double msb(0.0),bb2(0.0),mum,bbx2,tm;
584   double kap;
585
586   if (parent==BM||parent==BP||parent==B0||parent==B0B) {  
587     msb=5.2;
588     msd=0.33;
589     bb2=0.41*0.41;
590     if (daugt==A10||daugt==A1P||daugt==A1M||daugt==F1||daugt==F1PR) {
591       msq=0.33;
592       bx2=0.27*0.27;
593     }
594     else{
595       if (daugt==D3P1P||daugt==D3P1N||daugt==D3P1B||daugt==D3P10) {
596       msq=1.82;
597       bx2=0.34*0.34;
598       }
599       else{
600         report(ERROR,"EvtGen") << "Not implemented daugt in get_isgw_ff_3P1.\n";
601       }
602     }
603   }
604   else{
605     report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_3P1.\n";
606   }
607   
608   mtb = msb + msd;
609   mtx = msq + msd;
610   
611   mb = EvtPDL::getMeanMass( parent );
612   mx = mass;
613   
614   mum=1.0/(1.0/msq-1.0/msb);
615   bbx2=0.5*(bb2+bx2);
616   tm=(mb-mx)*(mb-mx);
617   if (t>tm) t = 0.99*tm;
618   
619   kap = 0.7*0.7;
620   f5 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,5.0/2.0)*
621        exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
622
623   *qf = (f5*msd)/(2.0*mtx*sqrt(bb2));
624   
625   *lf = -1.0*mtb*sqrt(bb2)*f5*(1/mum+(msd*(tm-t)/(2.0*mtb*
626         kap*bb2))*((1.0/msq)-(1.0*msd*bb2/(2.0*mum*mtx*bbx2)))); 
627
628   *cpf = (f5*msd*msb/(4.0*mtb*sqrt(bb2)*mum))*(1.0-(msd*msq*bb2/(
629          2.0*mtx*mum*bbx2)));
630   *cmf = 0.0;
631   return;
632 } //get_ff_isgw_3p1
633
634
635
636 void EvtISGWFF::EvtISGW1FF3P0 (EvtId parent,EvtId daugt,
637        double t, double mass, double *upf, double *umf ) {
638   //added by Lange Jan4,2000
639   static EvtId BP=EvtPDL::getId("B+");
640   static EvtId BM=EvtPDL::getId("B-");
641   static EvtId B0=EvtPDL::getId("B0");
642   static EvtId B0B=EvtPDL::getId("anti-B0");
643
644   static EvtId D3P0P=EvtPDL::getId("D_0*+");
645   static EvtId D3P0N=EvtPDL::getId("D_0*-");
646   static EvtId D3P00=EvtPDL::getId("D_0*0");
647   static EvtId D3P0B=EvtPDL::getId("anti-D_0*0");
648
649   static EvtId A0P=EvtPDL::getId("a_0+");
650   static EvtId A0M=EvtPDL::getId("a_0-");
651   static EvtId A00=EvtPDL::getId("a_00");
652
653   static EvtId F0=EvtPDL::getId("f_0");
654   static EvtId F0PR=EvtPDL::getId("f'_0");
655
656   double mtb;
657   double msd(0.0), mx(0.0), mb(0.0); 
658   double msq(0.0), bx2(0.0),mtx;
659   double f5;
660   double mum,bb2(0.0),bbx2,msb(0.0),tm;
661
662   if (parent==BM||parent==BP||parent==B0||parent==B0B) {    
663     msb=5.2;
664     msd=0.33;
665     bb2=0.41*0.41;
666     if (daugt==A00||daugt==A0P||daugt==A0M||daugt==F0||daugt==F0PR) {
667       msq=0.33;
668       bx2=0.27*0.27;
669     }
670     else{
671       if (daugt==D3P0P||daugt==D3P0N||daugt==D3P0B||daugt==D3P00) {
672         msq=1.82;
673         bx2=0.34*0.34;
674       }
675       else{
676         report(ERROR,"EvtGen") << "Not implemented daugt in get_isgw_ff_3P0.\n";
677       }
678     }
679   }
680   else{
681     report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_3P0.\n";
682   }
683   
684   mtb = msb + msd;
685   mtx = msq + msd;
686   
687   mb = EvtPDL::getMeanMass( parent );
688   mx = mass;
689   
690   mum=1.0/(1.0/msq-1.0/msb);
691   bbx2=0.5*(bb2+bx2);
692   tm=(mb-mx)*(mb-mx);
693   if (t>tm) t = 0.99*tm;
694   
695   double kap = 0.7*0.7;
696   f5 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,5.0/2.0)*
697        exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
698
699   *upf = f5*msd*msq*msb/(sqrt(6.0*bb2)*mtx*mum);
700   *umf = 0.0;
701   return;
702 } //get_ff_isgw_3p0
703
704
705
706 void EvtISGWFF::EvtISGW1FF1P1 (EvtId parent,EvtId daugt,
707        double t, double mass,
708        double *vf, double *rf, double *spf, double *smf ) {
709     //added by Lange Jan4,2000
710   static EvtId BP=EvtPDL::getId("B+");
711   static EvtId BM=EvtPDL::getId("B-");
712   static EvtId B0=EvtPDL::getId("B0");
713   static EvtId B0B=EvtPDL::getId("anti-B0");
714
715   static EvtId D1P1P=EvtPDL::getId("D_1+");
716   static EvtId D1P1N=EvtPDL::getId("D_1-");
717   static EvtId D1P10=EvtPDL::getId("D_10");
718   static EvtId D1P1B=EvtPDL::getId("anti-D_10");
719
720   static EvtId B1P=EvtPDL::getId("b_1+");
721   static EvtId B1M=EvtPDL::getId("b_1-");
722   static EvtId B10=EvtPDL::getId("b_10");
723
724   static EvtId H1=EvtPDL::getId("h_1");
725   static EvtId H1PR=EvtPDL::getId("h'_1");
726
727   double mtb;
728   double msd(0.0), mx(0.0), mb(0.0); 
729   double msq(0.0), bx2(0.0),mtx,f5;
730   double mup,mum,kap;
731   double msb(0.0),bb2(0.0),bbx2,tm;
732
733   if (parent==BM||parent==BP||parent==B0||parent==B0B) {
734
735     msb=5.2;
736     msd=0.33;
737     bb2=0.41*0.41;
738     if (daugt==H1||daugt==H1PR||daugt==B10||daugt==B1P||daugt==B1M) {
739       msq=0.33;
740       bx2=0.27*0.27;
741     }
742     else{
743       if (daugt==D1P1P||daugt==D1P1N||daugt==D1P10||daugt==D1P1B) {
744         msq=1.82;
745         bx2=0.34*0.34;
746       }
747       else{
748         report(ERROR,"EvtGen") << "Not implemented daugt in get_isgw_ff_3P1.\n";
749       }
750     }
751   }
752   else{
753     report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_3P1.\n";
754   }
755   
756   mtb = msb + msd;
757   mtx = msq + msd;
758
759   mb = EvtPDL::getMeanMass( parent );
760   mx = mass;
761
762   mup=1.0/(1.0/msq+1.0/msb);
763   mum=1.0/(1.0/msq-1.0/msb);
764   bbx2=0.5*(bb2+bx2);
765   tm=(mb-mx)*(mb-mx);
766   if (t>tm) t = 0.99*tm;
767
768   kap = 0.7*0.7;
769   f5 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,5.0/2.0)*
770        exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
771
772   *vf = f5*(((mtb*sqrt(bb2))/(4.0*sqrt(2.0)*msb*msq*mtx))); 
773   *rf = f5*mtb*sqrt(bb2/2)*((1.0/mup));
774
775   *spf = (f5*msd/(sqrt(2.0*bb2)*mtb))*(1.0+(msb/(2.0*mum))-
776          (msb*msq*msd*bb2/(4.0*mup*mum*mtx*bbx2)));
777   *smf = 0.0;
778
779   return;
780 //get_ff_isgw_1p1
781
782 }
783
784 void EvtISGWFF::EvtISGW1FF21S0 (EvtId parent,EvtId daugt,
785        double t, double mass, double *fppf, double *fpmf ) {
786   //added by Lange Jan4,2000
787   static EvtId BP=EvtPDL::getId("B+");
788   static EvtId BM=EvtPDL::getId("B-");
789   static EvtId B0=EvtPDL::getId("B0");
790   static EvtId B0B=EvtPDL::getId("anti-B0");
791
792   static EvtId D21S0P=EvtPDL::getId("hi");
793   static EvtId D21S0N=EvtPDL::getId("hi");
794   static EvtId D21S00=EvtPDL::getId("hi");
795   static EvtId D21S0B=EvtPDL::getId("hi");
796
797   static EvtId ETA2S=EvtPDL::getId("eta(2S)");
798
799   static EvtId PI2S0=EvtPDL::getId("pi(2S)0");
800   static EvtId PI2SP=EvtPDL::getId("pi(2S)+");
801   static EvtId PI2SM=EvtPDL::getId("pi(2S)-");
802
803   double mtb;
804   double msd(0.0), mx(0.0), mb(0.0); 
805   double msq(0.0), bx2(0.0),mtx;
806   double f3;
807   double msb(0.0);
808   double mum,mup,tm,bb2(0.0),bbx2;
809   
810   if (parent==BM||parent==BP||parent==B0||parent==B0B) {
811     msb=5.2;
812     msd=0.33;
813     bb2=0.41*0.41;
814     if (daugt==PI2S0||daugt==PI2SP||daugt==PI2SM||daugt==ETA2S){
815       msq=0.33;
816       bx2=0.31*0.31;
817     }
818     else{
819       if (daugt==D21S00||daugt==D21S0P||daugt==D21S0N||daugt==D21S0B) {
820         msq=1.82;
821         bx2=0.39*0.39;
822       }
823       else{  
824         report(ERROR,"EvtGen") << "Not implemented daugt in get_isgw1_ff_21S0.\n";
825       }
826     }
827   }
828   else{
829     report(ERROR,"EvtGen") << "Not implemented parent in get_isgw1_ff_21S0.\n";
830   }
831
832   mtb = msb + msd;
833   mtx = msq + msd;
834   
835   mb = EvtPDL::getMeanMass( parent );
836   mx = mass;
837   
838   mup=1.0/(1.0/msq+1.0/msb);
839   mum=1.0/(1.0/msq-1.0/msb);
840   bbx2=0.5*(bb2+bx2);
841   tm=(mb-mx)*(mb-mx);
842   if (t>tm) t = 0.99*tm;
843
844   double kap = 0.7*0.7;
845   f3 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,3.0/2.0)*
846        exp(-1.0*((msd*msd*(tm-t)/(4.0*mtb*mtx*kap*bbx2))));
847   
848   *fppf = f3*sqrt(3.0/8.0)*(msb/mup)*( ((bb2-bx2)/(bb2+bx2)) +
849           (((msq*msd*bb2)/(3.0*mum*mtx*bbx2))*((7.0*bx2-3.0*bb2)/
850           (4.0*bbx2))) + 
851           (((msd*msd*bx2*(tm-t))/(6.0*mtx*mtb*bbx2*kap*bbx2))*
852           (1.0 - ((msq*msd*bb2)/(2.0*mum*mtx*bbx2)))));
853
854   *fpmf = 0.0;
855   return;
856 } //get_ff_isgw_21s0
857
858
859 void EvtISGWFF::getbaryonff(EvtId, EvtId, double, double, double*, 
860                                double*, double*, double*){
861   
862   report(ERROR,"EvtGen") << "Not implemented :getbaryonff in EvtISGWFF.\n";  
863   ::abort();
864
865 }
866
867 void EvtISGWFF::getdiracff(EvtId, EvtId, double, double, double*, double*,
868                            double*, double*, double*, double*) {
869   
870   report(ERROR,"EvtGen") << "Not implemented :getdiracff in EvtISGWFF.\n";
871   ::abort();
872
873 }
874
875 void EvtISGWFF::getraritaff(EvtId, EvtId, double, double, double*, double*, 
876                             double*, double*, double*, double*, double*, double*) {
877   
878   report(ERROR,"EvtGen") << "Not implemented :getraritaff in EvtISGWFF.\n";
879   ::abort();
880
881 }