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: EvtBtoXsEtap.cc
12 : //
13 : // Description: Routine to perform two-body non-resonant B->Xs,gluon decays.
14 : // It generates an X_s mass spectrum based on a parameterisation of the
15 : // b->s,gluon spectrum of Atwood-Soni. The resultant X_s particles may
16 : // be decayed by JETSET.
17 : //
18 : // Modification history:
19 : //
20 : // Adlene Hicheur January 10, 2001 Module created
21 : //------------------------------------------------------------------------
22 : //
23 : #include "EvtGenBase/EvtPatches.hh"
24 :
25 : #include <stdlib.h>
26 : #include "EvtGenBase/EvtRandom.hh"
27 : #include "EvtGenBase/EvtParticle.hh"
28 : #include "EvtGenBase/EvtGenKine.hh"
29 : #include "EvtGenBase/EvtPDL.hh"
30 : #include "EvtGenBase/EvtReport.hh"
31 : #include "EvtGenModels/EvtBtoXsEtap.hh"
32 : #include <string>
33 : #include "EvtGenBase/EvtConst.hh"
34 : using std::endl;
35 :
36 0 : EvtBtoXsEtap::~EvtBtoXsEtap() {}
37 :
38 : std::string EvtBtoXsEtap::getName(){
39 :
40 0 : return "BTOXSETAP";
41 :
42 : }
43 :
44 : EvtDecayBase* EvtBtoXsEtap::clone(){
45 :
46 0 : return new EvtBtoXsEtap;
47 :
48 0 : }
49 :
50 :
51 : void EvtBtoXsEtap::init(){
52 :
53 : // check that there are no arguments
54 :
55 0 : checkNArg(0);
56 0 : }
57 :
58 : void EvtBtoXsEtap::initProbMax(){
59 :
60 0 : noProbMax();
61 :
62 0 : }
63 :
64 : void EvtBtoXsEtap::decay( EvtParticle *p ){
65 :
66 : // useless
67 : // if ( p->getNDaug() != 0 ) {
68 : // //Will end up here because maxrate multiplies by 1.2
69 : // report(Severity::Debug,"EvtGen") << "In EvtBtoXsEtap: X_s daughters should not be here!"<<endl;
70 : // return;
71 : //}
72 :
73 : double m_b;
74 : int i;
75 0 : p->makeDaughters(getNDaug(),getDaugs());
76 0 : EvtParticle *pdaug[MAX_DAUG];
77 :
78 0 : for(i=0;i<getNDaug();i++){
79 0 : pdaug[i]=p->getDaug(i);
80 : }
81 :
82 0 : static EvtVector4R p4[MAX_DAUG];
83 : static double mass[MAX_DAUG];
84 :
85 0 : m_b = p->mass();
86 :
87 : // Prepare for phase space routine.
88 :
89 0 : mass[1] = EvtPDL::getMass(getDaug(1));
90 :
91 : double xbox, ybox, min, max,hichfit;
92 : min=0.493;
93 : max=4.3;
94 0 : const double TwoPi = EvtConst::twoPi;
95 0 : int Xscode = EvtPDL::getStdHep(getDaug(0));
96 :
97 : // A five parameters fit, the shape is taken from Atwood & Soni
98 :
99 : // double par[18];
100 : double par[6];
101 0 : if ((Xscode == 30343) || (Xscode == -30343) ||
102 0 : (Xscode == 30353) || (Xscode == -30353)) { // Xsu or Xsd
103 : min=0.6373; // Just above K pi threshold for Xsd/u
104 : //min=0.6333; // K pi threshold for neutral Xsd
105 : // par[0]=-2057.2380371094;
106 : par[0]=2.36816;
107 : // par[1]=2502.2556152344;
108 : par[1]=0.62325725;
109 : // par[2]=1151.5632324219;
110 : par[2]=2.2;
111 : // par[3]=0.82431584596634;
112 : par[3]=-0.2109375;
113 : // par[4]=-4110.5234375000;
114 : par[4]=2.7;
115 : // par[5]=8445.6757812500;
116 : par[5]=0.54;
117 : // par[6]=-3034.1894531250;
118 : // par[7]=1.1557708978653;
119 : // par[8]=1765.9311523438;
120 : // par[9]=1.3730158805847;
121 : // par[10]=0.51371538639069;
122 : // par[11]=2.0056934356689;
123 : // par[12]=37144.097656250;
124 : // par[13]=-50296.781250000;
125 : // par[14]=27319.095703125;
126 : // par[15]=-7408.0678710938;
127 : // par[16]=1000.8093261719;
128 : // par[17]=-53.834449768066;
129 : } else {
130 0 : report(Severity::Debug,"EvtGen") << "In EvtBtoXsEtap: Particle with id " << Xscode << " is not a Xsd/u particle"<<endl;
131 0 : return;
132 : }
133 :
134 : double boxheight=par[5];
135 : double boxwidth=max-min;
136 :
137 0 : mass[0]=0.0;
138 0 : while ((mass[0] > max) || (mass[0] < min)){
139 0 : xbox = EvtRandom::Flat(boxwidth)+min;
140 0 : ybox=EvtRandom::Flat(boxheight);
141 0 : if (xbox<par[2]) {
142 :
143 0 : hichfit=(1/sqrt(TwoPi*par[1]))*exp(-0.5*pow((xbox-par[0])/par[1],2));
144 : // alifit=par[0]+par[1]*xbox+par[2]*pow(xbox,2);
145 : // } else if (xbox<par[7]) {
146 : // alifit=par[4]+par[5]*xbox+par[6]*pow(xbox,2);
147 : // } else if (xbox<par[11]) {
148 : // alifit=par[8]*exp(-0.5*pow((xbox-par[9])/par[10],2));
149 0 : } else {
150 0 : hichfit=par[3]*pow((xbox-par[4]),2)+par[5];
151 : // 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);
152 : }
153 0 : if (ybox>hichfit) {
154 0 : mass[0]=0.0;
155 0 : } else {
156 0 : mass[0]=xbox;
157 : }
158 : }
159 :
160 : // debug stuff: report(Severity::Info,"EvtGen") << "Xscode " << Xscode << " daughter 1 mass " << mass[0] << " daughter 2 mass " << mass[1] << endl;
161 :
162 0 : EvtGenKine::PhaseSpace( getNDaug(), mass, p4, m_b );
163 :
164 0 : for(i=0;i<getNDaug();i++){
165 0 : pdaug[i]->init( getDaugs()[i], p4[i] );
166 : }
167 :
168 : return ;
169 0 : }
170 :
171 :
|