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 : // Copyright Information: See EvtGen/COPYRIGHT
9 : // Copyright (C) 2000 Caltech, UCSB
10 : //
11 : // Module: EvtbTosllBall.cc
12 : //
13 : // Description: Routine to implement b->sll decays according to Ball et al.
14 : //
15 : // Modification history:
16 : //
17 : // Ryd January 5, 2000 Module created
18 : //
19 : // jjhollar October 7, 2005 Option to select form factors at runtime
20 : //------------------------------------------------------------------------
21 : //
22 : #include "EvtGenBase/EvtPatches.hh"
23 : #include <stdlib.h>
24 : #include "EvtGenBase/EvtParticle.hh"
25 : #include "EvtGenBase/EvtGenKine.hh"
26 : #include "EvtGenBase/EvtPDL.hh"
27 : #include "EvtGenBase/EvtReport.hh"
28 : #include "EvtGenModels/EvtbTosllBall.hh"
29 : #include "EvtGenModels/EvtbTosllBallFF.hh"
30 : #include "EvtGenModels/EvtbTosllAmp.hh"
31 : #include "EvtGenModels/EvtbTosllScalarAmp.hh"
32 : #include "EvtGenModels/EvtbTosllVectorAmp.hh"
33 :
34 : #include <string>
35 : using std::endl;
36 :
37 0 : EvtbTosllBall::~EvtbTosllBall() {
38 0 : delete _calcamp;
39 0 : delete _ballffmodel;
40 0 : }
41 :
42 : std::string EvtbTosllBall::getName(){
43 :
44 0 : return "BTOSLLBALL";
45 : }
46 :
47 :
48 : EvtDecayBase* EvtbTosllBall::clone(){
49 :
50 0 : return new EvtbTosllBall;
51 :
52 0 : }
53 :
54 : void EvtbTosllBall::decay( EvtParticle *p ){
55 :
56 0 : setWeight(p->initializePhaseSpace(getNDaug(),getDaugs(),false,
57 0 : _poleSize,1,2));
58 :
59 0 : _calcamp->CalcAmp(p,_amp2,_ballffmodel);
60 :
61 0 : }
62 :
63 :
64 : void EvtbTosllBall::initProbMax(){
65 :
66 0 : EvtId parnum,mesnum,l1num,l2num;
67 :
68 0 : parnum = getParentId();
69 0 : mesnum = getDaug(0);
70 0 : l1num = getDaug(1);
71 0 : l2num = getDaug(2);
72 :
73 : //This routine sets the _poleSize.
74 0 : double mymaxprob = _calcamp->CalcMaxProb(parnum,mesnum,
75 0 : l1num,l2num,
76 0 : _ballffmodel,_poleSize);
77 :
78 0 : setProbMax(mymaxprob);
79 :
80 0 : }
81 :
82 :
83 : void EvtbTosllBall::init(){
84 :
85 : // First choose form factors from the .DEC file
86 : // 1 = Ali-Ball '01 LCSR
87 : // 2 = Ali-Ball '99 LCSR
88 : // 3 = Colangelo 3pt QCD
89 : // 4 = Melikhov Lattice/Quark dispersion
90 : // 5 = ???
91 : // 6 = Ball-Zwicky '05 LCSR (mb = 480)
92 : // 7 = Ball-Zwicky '05 LCSR (mb = 460 - pseudoscalar modes only)
93 :
94 : // The default is Ali '01
95 : int theFormFactorModel = 1;
96 :
97 0 : if(getNArg() == 1)
98 0 : theFormFactorModel = (int)getArg(0);
99 :
100 0 : checkNDaug(3);
101 :
102 : //We expect the parent to be a scalar
103 : //and the daughters to be X lepton+ lepton-
104 :
105 0 : checkSpinParent(EvtSpinType::SCALAR);
106 :
107 0 : EvtSpinType::spintype mesontype=EvtPDL::getSpinType(getDaug(0));
108 :
109 0 : if ( !(mesontype == EvtSpinType::VECTOR||
110 0 : mesontype == EvtSpinType::SCALAR)) {
111 0 : report(Severity::Error,"EvtGen") << "EvtbTosllBall generator expected "
112 0 : << " a SCALAR or VECTOR 1st daughter, found:"<<
113 0 : EvtPDL::name(getDaug(0)).c_str()<<endl;
114 0 : report(Severity::Error,"EvtGen") << "Will terminate execution!"<<endl;
115 0 : ::abort();
116 : }
117 :
118 0 : checkSpinDaughter(1,EvtSpinType::DIRAC);
119 0 : checkSpinDaughter(2,EvtSpinType::DIRAC);
120 :
121 0 : _ballffmodel = new EvtbTosllBallFF(theFormFactorModel);
122 0 : if (mesontype == EvtSpinType::SCALAR){
123 0 : _calcamp = new EvtbTosllScalarAmp(-0.313,4.344,-4.669);
124 0 : } else if (mesontype == EvtSpinType::VECTOR){
125 0 : _calcamp = new EvtbTosllVectorAmp(-0.313,4.344,-4.669);
126 0 : }
127 :
128 0 : }
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 :
144 :
|