Line data Source code
1 : //--------------------------------------------------------------------------
2 : //
3 : //
4 : // Copyright Information: See EvtGen/COPYRIGHT
5 : //
6 : // Environment:
7 : // This software is part of the EvtGen package developed jointly
8 : // for the BaBar and CLEO collaborations. If you use all or part
9 : // of it, please give an appropriate acknowledgement.
10 : //
11 : // Module: EvtBtoXsgammaAliGreub.cc
12 : //
13 : // Description: Routine to perform two-body non-resonant B->Xs,gamma decays.
14 : // It generates an X_s mass spectrum based on a parameterisation of the
15 : // b->s,gamma photon spectrum of Ali-Greub. The resultant X_s particles may
16 : // be decayed by JETSET.
17 : //
18 : // Modification history:
19 : //
20 : // Mark Ian Williams July 20, 2000 Module created
21 : // Mark Ian Williams July 21, 2000 Module works
22 : // Mark Ian Williams July 25, 2000 Works for all Xs modes
23 : // Mark Ian Williams Aug 09, 2000 New values for mass minima
24 : // Mark Ian Williams Sept 06, 2000 14 parameter M_Xs function
25 : // Mark Ian Williams Sept 07, 2000 18 parameter M_Xs function
26 : // Mark Ian Williams Sept 07, 2000 Tidied up the code
27 : // Mark Ian Williams Sept 10, 2000 Updated parameters
28 : // Mark Ian Williams Sept 11, 2000 Finalised code
29 : // Jane Tinslay March 21, 2000 Separated from EvtBtoXsgamma
30 : // class to allow choice of input models.
31 : //------------------------------------------------------------------------
32 : //
33 : #include "EvtGenBase/EvtPatches.hh"
34 :
35 : #include <stdlib.h>
36 : #include "EvtGenBase/EvtRandom.hh"
37 : #include "EvtGenModels/EvtBtoXsgammaAliGreub.hh"
38 : #include <string>
39 : #include "EvtGenBase/EvtConst.hh"
40 : #include "EvtGenBase/EvtParticle.hh"
41 : #include "EvtGenBase/EvtGenKine.hh"
42 : #include "EvtGenBase/EvtPDL.hh"
43 : #include "EvtGenBase/EvtReport.hh"
44 : using std::endl;
45 :
46 :
47 0 : EvtBtoXsgammaAliGreub::~EvtBtoXsgammaAliGreub(){}
48 :
49 : void EvtBtoXsgammaAliGreub::init(int nArg, double* /*args*/){
50 :
51 0 : if ((nArg - 1) != 0) {
52 :
53 0 : report(Severity::Error,"EvtGen") << "EvtBtoXsgamma generator model "
54 0 : << "EvtBtoXsgammaAliGreub expected "
55 0 : << "zero arguments but found: "<<nArg-1<<endl;
56 0 : report(Severity::Error,"EvtGen") << "Will terminate execution!"<<endl;
57 0 : ::abort();
58 :
59 : }
60 :
61 0 : }
62 :
63 : double EvtBtoXsgammaAliGreub::GetMass(int Xscode) {
64 :
65 : // The special lineshape for strange hadrons X_s in b -> s gamma:
66 : // An 18 parameter function fitted to the theoretical mass spectrum
67 : // of Ali & Greub for a B meson mass of 5.279 GeV; top quark mass of
68 : // 174.3 GeV; strange quark mass of 0.48 GeV (tuned to give minimum
69 : // M_Xs of 0.64 GeV) and Fermi momentum of 265 MeV for spectator quark
70 : // mass of 150 MeV (from CLEO fit). Truncated at max on high side
71 : // and min (just above K pi or KK thresold) on low side.
72 : double min=0.64;
73 : double max=4.5;
74 : double xbox, ybox, alifit;
75 : double mass=0.0;
76 :
77 : double par[18];
78 0 : if ((Xscode == 30343) || (Xscode == -30343) ||
79 0 : (Xscode == 30353) || (Xscode == -30353)) { // Xsu or Xsd
80 : min=0.6373; // Just above K pi threshold for Xsd/u
81 : //min=0.6333; // K pi threshold for neutral Xsd
82 : par[0]=-2057.2380371094;
83 : par[1]=2502.2556152344;
84 : par[2]=1151.5632324219;
85 : par[3]=0.82431584596634;
86 : par[4]=-4110.5234375000;
87 : par[5]=8445.6757812500;
88 : par[6]=-3034.1894531250;
89 : par[7]=1.1557708978653;
90 : par[8]=1765.9311523438;
91 : par[9]=1.3730158805847;
92 : par[10]=0.51371538639069;
93 : par[11]=2.0056934356689;
94 : par[12]=37144.097656250;
95 : par[13]=-50296.781250000;
96 : par[14]=27319.095703125;
97 : par[15]=-7408.0678710938;
98 : par[16]=1000.8093261719;
99 : par[17]=-53.834449768066;
100 0 : } else if ((Xscode == 30363) || (Xscode == -30363)) {
101 : min = 0.9964; // Just above KK threshold for Xss
102 : par[0]=-32263.908203125;
103 : par[1]=57186.589843750;
104 : par[2]=-24230.728515625;
105 : par[3]=1.1155973672867;
106 : par[4]=-12161.131835938;
107 : par[5]=20162.146484375;
108 : par[6]=-7198.8564453125;
109 : par[7]=1.3783323764801;
110 : par[8]=1995.1691894531;
111 : par[9]=1.4655895233154;
112 : par[10]=0.48869228363037;
113 : par[11]=2.1038570404053;
114 : par[12]=55100.058593750;
115 : par[13]=-75201.703125000;
116 : par[14]=41096.066406250;
117 : par[15]=-11205.986328125;
118 : par[16]=1522.4024658203;
119 : par[17]=-82.379623413086;
120 : } else {
121 0 : report(Severity::Debug,"EvtGen") << "In EvtBtoXsgammaAliGreub: Particle with id " << Xscode << " is not a Xss particle"<<endl;
122 0 : return 0;
123 : }
124 :
125 : double boxheight=par[8];
126 0 : double boxwidth=max-min;
127 :
128 0 : while ((mass > max) || (mass < min)){
129 0 : xbox = EvtRandom::Flat(boxwidth)+min;
130 0 : ybox=EvtRandom::Flat(boxheight);
131 0 : if (xbox<par[3]) {
132 0 : alifit=par[0]+par[1]*xbox+par[2]*pow(xbox,2);
133 0 : } else if (xbox<par[7]) {
134 0 : alifit=par[4]+par[5]*xbox+par[6]*pow(xbox,2);
135 0 : } else if (xbox<par[11]) {
136 0 : alifit=par[8]*exp(-0.5*pow((xbox-par[9])/par[10],2));
137 0 : } else {
138 0 : alifit=par[12]+par[13]*xbox+par[14]*pow(xbox,2)+par[15]*pow(xbox,3)+par[16]*pow(xbox,4)+par[17]*pow(xbox,5);
139 : }
140 0 : if (ybox>alifit) {
141 : mass=0.0;
142 0 : } else {
143 : mass=xbox;
144 : }
145 : }
146 : return mass;
147 0 : }
|