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(),_poleSize,1,2));
58 _calcamp->CalcAmp(p,_amp2,_ballffmodel);
63 void EvtbTosllBall::initProbMax(){
65 EvtId parnum,mesnum,l1num,l2num;
67 parnum = getParentId();
72 //This routine sets the _poleSize.
73 double mymaxprob = _calcamp->CalcMaxProb(parnum,mesnum,
75 _ballffmodel,_poleSize);
77 setProbMax(mymaxprob);
82 void EvtbTosllBall::init(){
84 // First choose form factors from the .DEC file
85 // 1 = Ali-Ball '01 LCSR
86 // 2 = Ali-Ball '99 LCSR
87 // 3 = Colangelo 3pt QCD
88 // 4 = Melikhov Lattice/Quark dispersion
90 // 6 = Ball-Zwicky '05 LCSR (mb = 480)
91 // 7 = Ball-Zwicky '05 LCSR (mb = 460 - pseudoscalar modes only)
93 // The default is Ali '01
94 int theFormFactorModel = 1;
97 theFormFactorModel = (int)getArg(0);
101 //We expect the parent to be a scalar
102 //and the daughters to be X lepton+ lepton-
104 checkSpinParent(EvtSpinType::SCALAR);
106 EvtSpinType::spintype mesontype=EvtPDL::getSpinType(getDaug(0));
108 if ( !(mesontype == EvtSpinType::VECTOR||
109 mesontype == EvtSpinType::SCALAR)) {
110 report(ERROR,"EvtGen") << "EvtbTosllBall generator expected "
111 << " a SCALAR or VECTOR 1st daughter, found:"<<
112 EvtPDL::name(getDaug(0)).c_str()<<endl;
113 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
117 checkSpinDaughter(1,EvtSpinType::DIRAC);
118 checkSpinDaughter(2,EvtSpinType::DIRAC);
120 _ballffmodel = new EvtbTosllBallFF(theFormFactorModel);
121 if (mesontype == EvtSpinType::SCALAR){
122 _calcamp = new EvtbTosllScalarAmp(-0.313,4.344,-4.669);
123 } else if (mesontype == EvtSpinType::VECTOR){
124 _calcamp = new EvtbTosllVectorAmp(-0.313,4.344,-4.669);