BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBtoXsEtap.cc
Go to the documentation of this file.
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//
24
31#include "EvtBtoXsEtap.hh"
32#include <stdlib.h>
33#include <string>
34using std::endl;
35
37
38void EvtBtoXsEtap::getName( std::string& model_name ) { model_name = "BTOXSETAP"; }
39
41
43
44 // check that there are no arguments
45
46 checkNArg( 0 );
47}
48
50
52
53 // useless
54 // if ( p->getNDaug() != 0 ) {
55 // //Will end up here because maxrate multiplies by 1.2
56 // report(DEBUG,"EvtGen") << "In EvtBtoXsEtap: X_s daughters should not be here!"<<endl;
57 // return;
58 //}
59
60 double m_b;
61 int i;
63 EvtParticle* pdaug[MAX_DAUG];
64
65 for ( i = 0; i < getNDaug(); i++ ) { pdaug[i] = p->getDaug( i ); }
66
67 static EvtVector4R p4[MAX_DAUG];
68 static double mass[MAX_DAUG];
69
70 m_b = p->mass();
71
72 // Prepare for phase space routine.
73
74 mass[1] = EvtPDL::getMass( getDaug( 1 ) );
75
76 double xbox, ybox, min, max, hichfit;
77 min = 0.493;
78 max = 4.3;
79 const double TwoPi = EvtConst::twoPi;
80 int Xscode = EvtPDL::getStdHep( getDaug( 0 ) );
81
82 // A five parameters fit, the shape is taken from Atwood & Soni
83
84 // double par[18];
85 double par[6];
86 if ( ( Xscode == 30343 ) || ( Xscode == -30343 ) || ( Xscode == 30353 ) ||
87 ( Xscode == -30353 ) )
88 { // Xsu or Xsd
89 min = 0.6373; // Just above K pi threshold for Xsd/u
90 // min=0.6333; // K pi threshold for neutral Xsd
91 // par[0]=-2057.2380371094;
92 par[0] = 2.36816;
93 // par[1]=2502.2556152344;
94 par[1] = 0.62325725;
95 // par[2]=1151.5632324219;
96 par[2] = 2.2;
97 // par[3]=0.82431584596634;
98 par[3] = -0.2109375;
99 // par[4]=-4110.5234375000;
100 par[4] = 2.7;
101 // par[5]=8445.6757812500;
102 par[5] = 0.54;
103 // par[6]=-3034.1894531250;
104 // par[7]=1.1557708978653;
105 // par[8]=1765.9311523438;
106 // par[9]=1.3730158805847;
107 // par[10]=0.51371538639069;
108 // par[11]=2.0056934356689;
109 // par[12]=37144.097656250;
110 // par[13]=-50296.781250000;
111 // par[14]=27319.095703125;
112 // par[15]=-7408.0678710938;
113 // par[16]=1000.8093261719;
114 // par[17]=-53.834449768066;
115 }
116 else
117 {
118 report( DEBUG, "EvtGen" ) << "In EvtBtoXsEtap: Particle with id " << Xscode
119 << " is not a Xsd/u particle" << endl;
120 return;
121 }
122
123 double boxheight = par[5];
124 double boxwidth = max - min;
125
126 mass[0] = 0.0;
127 while ( ( mass[0] > max ) || ( mass[0] < min ) )
128 {
129 xbox = EvtRandom::Flat( boxwidth ) + min;
130 ybox = EvtRandom::Flat( boxheight );
131 if ( xbox < par[2] )
132 {
133
134 hichfit =
135 ( 1 / sqrt( TwoPi * par[1] ) ) * exp( -0.5 * pow( ( xbox - par[0] ) / par[1], 2 ) );
136 // alifit=par[0]+par[1]*xbox+par[2]*pow(xbox,2);
137 // } else if (xbox<par[7]) {
138 // alifit=par[4]+par[5]*xbox+par[6]*pow(xbox,2);
139 // } else if (xbox<par[11]) {
140 // alifit=par[8]*exp(-0.5*pow((xbox-par[9])/par[10],2));
141 }
142 else
143 {
144 hichfit = par[3] * pow( ( xbox - par[4] ), 2 ) + par[5];
145 // 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);
146 }
147 if ( ybox > hichfit ) { mass[0] = 0.0; }
148 else { mass[0] = xbox; }
149 }
150
151 // debug stuff: report(INFO,"EvtGen") << "Xscode " << Xscode << " daughter 1 mass " <<
152 // mass[0] << " daughter 2 mass " << mass[1] << endl;
153
155
156 for ( i = 0; i < getNDaug(); i++ ) { pdaug[i]->init( getDaugs()[i], p4[i] ); }
157
158 return;
159}
double mass
#define min(a, b)
#define max(a, b)
EvtComplex exp(const EvtComplex &c)
const int MAX_DAUG
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ DEBUG
Definition EvtReport.hh:53
*********DOUBLE PRECISION m_pi INTEGER m_lenwt !max no of aux weights INTEGER m_phmax !maximum photon multiplicity ISR FSR *DOUBLE COMPLEX m_Pauli4 DOUBLE COMPLEX m_AmpBorn DOUBLE COMPLEX m_AmpBoxy DOUBLE COMPLEX m_AmpBorn1 DOUBLE COMPLEX m_AmpBorn2 DOUBLE COMPLEX m_AmpExpo2p DOUBLE COMPLEX m_Rmat DOUBLE COMPLEX m_BoxGZut !DOUBLE COMPLEX m_F1finPair2 !DOUBLE PRECISION m_Vcut DOUBLE PRECISION m_Alfinv DOUBLE PRECISION m_Lorin1 DOUBLE PRECISION m_Lorin2 DOUBLE PRECISION m_b
Definition GPS.h:30
void initProbMax()
EvtDecayBase * clone()
void decay(EvtParticle *p)
void getName(std::string &name)
virtual ~EvtBtoXsEtap()
static const double twoPi
Definition EvtConst.hh:28
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
EvtId getDaug(int i)
static double PhaseSpace(int ndaug, double mass[30], EvtVector4R p4[30], double mp)
Definition EvtGenKine.cc:47
static int getStdHep(EvtId id)
Definition EvtPDL.hh:61
static double getMass(EvtId i)
Definition EvtPDL.hh:44
void makeDaughters(int ndaug, EvtId *id)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtParticle * getDaug(int i)
double mass() const
static double Flat()
Definition EvtRandom.cc:69