1 //--------------------------------------------------------------------------
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.
8 // Copyright Information: See EvtGen/COPYRIGHT
9 // Copyright (C) 2000 Caltech, UCSB
11 // Module: EvtbTosllBall.cc
13 // Description: Routine to implement b->sll decays according to Ball et al.
15 // Modification history:
17 // Ryd January 5, 2000 Module created
19 // jjhollar October 7, 2005 Option to select form factors at runtime
20 //------------------------------------------------------------------------
22 #include "EvtGenBase/EvtPatches.hh"
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"
37 EvtbTosllBall::~EvtbTosllBall() {
42 std::string EvtbTosllBall::getName(){
48 EvtDecayBase* EvtbTosllBall::clone(){
50 return new EvtbTosllBall;
54 void EvtbTosllBall::decay( EvtParticle *p ){
56 setWeight(p->initializePhaseSpace(getNDaug(),getDaugs(),false,
59 _calcamp->CalcAmp(p,_amp2,_ballffmodel);
64 void EvtbTosllBall::initProbMax(){
66 EvtId parnum,mesnum,l1num,l2num;
68 parnum = getParentId();
73 //This routine sets the _poleSize.
74 double mymaxprob = _calcamp->CalcMaxProb(parnum,mesnum,
76 _ballffmodel,_poleSize);
78 setProbMax(mymaxprob);
83 void EvtbTosllBall::init(){
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
91 // 6 = Ball-Zwicky '05 LCSR (mb = 480)
92 // 7 = Ball-Zwicky '05 LCSR (mb = 460 - pseudoscalar modes only)
94 // The default is Ali '01
95 int theFormFactorModel = 1;
98 theFormFactorModel = (int)getArg(0);
102 //We expect the parent to be a scalar
103 //and the daughters to be X lepton+ lepton-
105 checkSpinParent(EvtSpinType::SCALAR);
107 EvtSpinType::spintype mesontype=EvtPDL::getSpinType(getDaug(0));
109 if ( !(mesontype == EvtSpinType::VECTOR||
110 mesontype == EvtSpinType::SCALAR)) {
111 report(ERROR,"EvtGen") << "EvtbTosllBall generator expected "
112 << " a SCALAR or VECTOR 1st daughter, found:"<<
113 EvtPDL::name(getDaug(0)).c_str()<<endl;
114 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
118 checkSpinDaughter(1,EvtSpinType::DIRAC);
119 checkSpinDaughter(2,EvtSpinType::DIRAC);
121 _ballffmodel = new EvtbTosllBallFF(theFormFactorModel);
122 if (mesontype == EvtSpinType::SCALAR){
123 _calcamp = new EvtbTosllScalarAmp(-0.313,4.344,-4.669);
124 } else if (mesontype == EvtSpinType::VECTOR){
125 _calcamp = new EvtbTosllVectorAmp(-0.313,4.344,-4.669);