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