BOSS 8.0.0
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
38#include "EvtBtoXsgamma.hh"
42#include "EvtBtoXsgammaKagan.hh"
43#include <stdlib.h>
44#include <string>
45using std::endl;
46
48
49 delete _model;
50 _model = 0;
51}
52
53void EvtBtoXsgamma::getName( std::string& model_name ) { model_name = "BTOXSGAMMA"; }
54
56
58 // Arguments:
59 // 0: Ali-Greub model = 1, Kagan model = 2
60 // No more arguments for Ali-Greub model
61 // 1:
62 // 2:
63 // 3:
64
65 // check that at least one b->sg model has been selected
66 if ( getNArg() == 0 )
67 {
68
69 report( ERROR, "EvtGen" ) << "EvtBtoXsgamma generator expected "
70 << " at least 1 argument but found: " << getNArg() << endl;
71 report( ERROR, "EvtGen" ) << "Will terminate execution!" << endl;
72 ::abort();
73 }
74}
75
77
79
80 // initialize here. -- its too damn slow otherwise.
81
82 if ( _model == 0 )
83 {
84
85 if ( getArg( 0 ) == 1 ) _model = new EvtBtoXsgammaAliGreub();
86 else if ( getArg( 0 ) == 2 ) _model = new EvtBtoXsgammaKagan();
87 else if ( getArg( 0 ) == 3 ) _model = new EvtBtoXsgammaFixedMass();
88 else if ( getArg( 0 ) == 4 ) _model = new EvtBtoXsgammaFlatEnergy();
89 else
90 {
91 report( ERROR, "EvtGen" ) << "No valid EvtBtoXsgamma generator model selected "
92 << "Set arg(0) to 1 for Ali-Greub model or 2 for "
93 << " Kagan model or 3 for a fixed mass" << endl;
94 report( ERROR, "EvtGen" ) << "Will terminate execution!" << endl;
95 ::abort();
96 }
97 _model->init( getNArg(), getArgs() );
98 }
99
100 // if ( p->getNDaug() != 0 ) {
101 // Will end up here because maxrate multiplies by 1.2
102 // report(DEBUG,"EvtGen") << "In EvtBtoXsgamma: X_s daughters should not be here!"<<endl;
103 // return;
104 //}
105
106 double m_b;
107 int i;
109 EvtParticle* pdaug[MAX_DAUG];
110
111 for ( i = 0; i < getNDaug(); i++ ) { pdaug[i] = p->getDaug( i ); }
112
113 static EvtVector4R p4[MAX_DAUG];
114 static double mass[MAX_DAUG];
115
116 m_b = p->mass();
117
118 mass[1] = EvtPDL::getMass( getDaug( 1 ) );
119
120 int Xscode = EvtPDL::getStdHep( getDaug( 0 ) );
121
122 mass[0] = _model->GetMass( Xscode );
123
125
126 for ( i = 0; i < getNDaug(); i++ ) { pdaug[i]->init( getDaugs()[i], p4[i] ); }
127}
double mass
const int MAX_DAUG
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ 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
EvtDecayBase * clone()
void decay(EvtParticle *p)
void getName(std::string &name)
virtual ~EvtBtoXsgamma()
double getArg(int j)
double * getArgs()
EvtId * getDaugs()
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