BOSS 7.0.1
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBtoXsgamma.cc
Go to the documentation of this file.
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// Module: EvtBtoXsgamma.cc
9//
10// Description: Routine to perform two-body non-resonant B->Xs,gamma decays.
11// Set the first input parameter to 1 to use the Ali-Greub model,
12// or 2 to use the Kagan-Neubert model.
14
15//
16// Modification history:
17//
18// Mark Ian Williams July 20, 2000 Module created
19// Mark Ian Williams July 21, 2000 Module works
20// Mark Ian Williams July 25, 2000 Works for all Xs modes
21// Mark Ian Williams Aug 09, 2000 New values for mass minima
22// Mark Ian Williams Sept 06, 2000 14 parameter M_Xs function
23// Mark Ian Williams Sept 07, 2000 18 parameter M_Xs function
24// Mark Ian Williams Sept 07, 2000 Tidied up the code
25// Mark Ian Williams Sept 10, 2000 Updated parameters
26// Mark Ian Williams Sept 11, 2000 Finalised code
27// Jane Tinslay March 21, 2001 Re-worked so that you can choose
28// between the Ali-Greub and Kagan-Neubert
29// Modules.
30//------------------------------------------------------------------------
31//
32
33#include <stdlib.h>
36#include "EvtGenBase/EvtPDL.hh"
39#include <string>
45using std::endl;
46
48
49 delete _model; _model=0;
50
51}
52
53void EvtBtoXsgamma::getName(std::string& model_name){
54
55 model_name="BTOXSGAMMA";
56
57}
58
60
61 return new EvtBtoXsgamma;
62
63}
64
66 //Arguments:
67 // 0: Ali-Greub model = 1, Kagan model = 2
68 //No more arguments for Ali-Greub model
69 // 1:
70 // 2:
71 // 3:
72
73 // check that at least one b->sg model has been selected
74 if (getNArg() == 0) {
75
76 report(ERROR,"EvtGen") << "EvtBtoXsgamma generator expected "
77 << " at least 1 argument but found: "<<getNArg()<<endl;
78 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
79 ::abort();
80 }
81}
82
84
85 noProbMax();
86
87}
88
90
91 //initialize here. -- its too damn slow otherwise.
92
93 if ( _model == 0 ) {
94
95 if (getArg(0) == 1) _model = new EvtBtoXsgammaAliGreub();
96 else if (getArg(0) == 2) _model = new EvtBtoXsgammaKagan();
97 else if (getArg(0) == 3) _model = new EvtBtoXsgammaFixedMass();
98 else if (getArg(0) == 4) _model = new EvtBtoXsgammaFlatEnergy();
99 else{
100 report(ERROR,"EvtGen") << "No valid EvtBtoXsgamma generator model selected "
101 << "Set arg(0) to 1 for Ali-Greub model or 2 for "
102 <<" Kagan model or 3 for a fixed mass"<<endl;
103 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
104 ::abort();
105
106 }
107 _model->init(getNArg(),getArgs());
108 }
109
110
111 // if ( p->getNDaug() != 0 ) {
112 //Will end up here because maxrate multiplies by 1.2
113 // report(DEBUG,"EvtGen") << "In EvtBtoXsgamma: X_s daughters should not be here!"<<endl;
114 // return;
115 //}
116
117 double m_b;
118 int i;
120 EvtParticle *pdaug[MAX_DAUG];
121
122 for(i=0;i<getNDaug();i++){
123 pdaug[i]=p->getDaug(i);
124 }
125
126 static EvtVector4R p4[MAX_DAUG];
127 static double mass[MAX_DAUG];
128
129 m_b = p->mass();
130
132
133 int Xscode = EvtPDL::getStdHep(getDaug(0));
134
135 mass[0] = _model->GetMass(Xscode);
136
138
139 for(i=0;i<getNDaug();i++){
140 pdaug[i]->init( getDaugs()[i], p4[i] );
141 }
142
143}
144
double mass
const int MAX_DAUG
Definition: EvtParticle.hh:38
ostream & report(Severity severity, const char *facility)
Definition: EvtReport.cc:36
@ ERROR
Definition: EvtReport.hh:49
*********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
virtual void init(int, double *)
virtual double GetMass(int code)=0
EvtDecayBase * clone()
void decay(EvtParticle *p)
void initProbMax()
void getName(std::string &name)
virtual ~EvtBtoXsgamma()
double getArg(int j)
void noProbMax()
double * getArgs()
EvtId * getDaugs()
Definition: EvtDecayBase.hh:65
EvtId getDaug(int i)
Definition: EvtDecayBase.hh:66
static double PhaseSpace(int ndaug, double mass[30], EvtVector4R p4[30], double mp)
Definition: EvtGenKine.cc:50
static int getStdHep(EvtId id)
Definition: EvtPDL.hh:56
static double getMass(EvtId i)
Definition: EvtPDL.hh:46
void makeDaughters(int ndaug, EvtId *id)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:85
double mass() const
Definition: EvtParticle.cc:127