#include <EvtBtoXsgammaAliGreub.hh>
Inheritance diagram for EvtBtoXsgammaAliGreub:
Public Member Functions | |
EvtBtoXsgammaAliGreub () | |
virtual | ~EvtBtoXsgammaAliGreub () |
void | init (int, double *) |
double | GetMass (int code) |
Definition at line 28 of file EvtBtoXsgammaAliGreub.hh.
EvtBtoXsgammaAliGreub::EvtBtoXsgammaAliGreub | ( | ) | [inline] |
EvtBtoXsgammaAliGreub::~EvtBtoXsgammaAliGreub | ( | ) | [virtual] |
double EvtBtoXsgammaAliGreub::GetMass | ( | int | code | ) | [virtual] |
Implements EvtBtoXsgammaAbsModel.
Definition at line 63 of file EvtBtoXsgammaAliGreub.cc.
References Bes_Common::DEBUG, exp(), EvtRandom::Flat(), mass, max, min, and report().
00063 { 00064 00065 // The special lineshape for strange hadrons X_s in b -> s gamma: 00066 // An 18 parameter function fitted to the theoretical mass spectrum 00067 // of Ali & Greub for a B meson mass of 5.279 GeV; top quark mass of 00068 // 174.3 GeV; strange quark mass of 0.48 GeV (tuned to give minimum 00069 // M_Xs of 0.64 GeV) and Fermi momentum of 265 MeV for spectator quark 00070 // mass of 150 MeV (from CLEO fit). Truncated at max on high side 00071 // and min (just above K pi or KK thresold) on low side. 00072 double min=0.64; 00073 double max=4.5; 00074 double xbox, ybox, alifit; 00075 double mass=0.0; 00076 00077 double par[18]; 00078 if ((Xscode == 30343) || (Xscode == -30343) || 00079 (Xscode == 30353) || (Xscode == -30353)) { // Xsu or Xsd 00080 min=0.6373; // Just above K pi threshold for Xsd/u 00081 //min=0.6333; // K pi threshold for neutral Xsd 00082 par[0]=-2057.2380371094; 00083 par[1]=2502.2556152344; 00084 par[2]=1151.5632324219; 00085 par[3]=0.82431584596634; 00086 par[4]=-4110.5234375000; 00087 par[5]=8445.6757812500; 00088 par[6]=-3034.1894531250; 00089 par[7]=1.1557708978653; 00090 par[8]=1765.9311523438; 00091 par[9]=1.3730158805847; 00092 par[10]=0.51371538639069; 00093 par[11]=2.0056934356689; 00094 par[12]=37144.097656250; 00095 par[13]=-50296.781250000; 00096 par[14]=27319.095703125; 00097 par[15]=-7408.0678710938; 00098 par[16]=1000.8093261719; 00099 par[17]=-53.834449768066; 00100 } else if ((Xscode == 30363) || (Xscode == -30363)) { 00101 min = 0.9964; // Just above KK threshold for Xss 00102 par[0]=-32263.908203125; 00103 par[1]=57186.589843750; 00104 par[2]=-24230.728515625; 00105 par[3]=1.1155973672867; 00106 par[4]=-12161.131835938; 00107 par[5]=20162.146484375; 00108 par[6]=-7198.8564453125; 00109 par[7]=1.3783323764801; 00110 par[8]=1995.1691894531; 00111 par[9]=1.4655895233154; 00112 par[10]=0.48869228363037; 00113 par[11]=2.1038570404053; 00114 par[12]=55100.058593750; 00115 par[13]=-75201.703125000; 00116 par[14]=41096.066406250; 00117 par[15]=-11205.986328125; 00118 par[16]=1522.4024658203; 00119 par[17]=-82.379623413086; 00120 } else { 00121 report(DEBUG,"EvtGen") << "In EvtBtoXsgammaAliGreub: Particle with id " << Xscode << " is not a Xss particle"<<endl; 00122 return 0; 00123 } 00124 00125 double boxheight=par[8]; 00126 double boxwidth=max-min; 00127 00128 while ((mass > max) || (mass < min)){ 00129 xbox = EvtRandom::Flat(boxwidth)+min; 00130 ybox=EvtRandom::Flat(boxheight); 00131 if (xbox<par[3]) { 00132 alifit=par[0]+par[1]*xbox+par[2]*pow(xbox,2); 00133 } else if (xbox<par[7]) { 00134 alifit=par[4]+par[5]*xbox+par[6]*pow(xbox,2); 00135 } else if (xbox<par[11]) { 00136 alifit=par[8]*exp(-0.5*pow((xbox-par[9])/par[10],2)); 00137 } else { 00138 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); 00139 } 00140 if (ybox>alifit) { 00141 mass=0.0; 00142 } else { 00143 mass=xbox; 00144 } 00145 } 00146 return mass; 00147 }
void EvtBtoXsgammaAliGreub::init | ( | int | , | |
double * | ||||
) | [virtual] |
Reimplemented from EvtBtoXsgammaAbsModel.
Definition at line 49 of file EvtBtoXsgammaAliGreub.cc.
References calibUtil::ERROR, and report().
00049 { 00050 00051 if ((nArg - 1) != 0) { 00052 00053 report(ERROR,"EvtGen") << "EvtBtoXsgamma generator model " 00054 << "EvtBtoXsgammaAliGreub expected " 00055 << "zero arguments but found: "<<nArg-1<<endl; 00056 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl; 00057 ::abort(); 00058 00059 } 00060 00061 }