--- /dev/null
+//--------------------------------------------------------------------------
+//
+// Environment:
+// This software is part of the EvtGen package developed jointly
+// for the BaBar and CLEO collaborations. If you use all or part
+// of it, please give an appropriate acknowledgement.
+//
+// Copyright Information: See EvtGen/COPYRIGHT
+// Copyright (C) 2000 Caltech, UCSB
+//
+// Module: EvtbTosllScalarAmp.cc
+//
+// Description: Routine to implement bTosll decays to pseudo-scalar
+// mesons.
+//
+// Modification history:
+//
+// Ryd January 5,2000 Module created
+//
+//------------------------------------------------------------------------
+//
+#include "EvtGenBase/EvtPatches.hh"
+#include "EvtGenBase/EvtConst.hh"
+#include "EvtGenBase/EvtPatches.hh"
+#include "EvtGenBase/EvtParticle.hh"
+#include "EvtGenBase/EvtGenKine.hh"
+#include "EvtGenBase/EvtPDL.hh"
+#include "EvtGenBase/EvtReport.hh"
+#include "EvtGenBase/EvtVector4C.hh"
+#include "EvtGenBase/EvtTensor4C.hh"
+#include "EvtGenBase/EvtDiracSpinor.hh"
+#include "EvtGenModels/EvtbTosllScalarAmp.hh"
+#include "EvtGenBase/EvtId.hh"
+#include "EvtGenBase/EvtIdSet.hh"
+#include "EvtGenBase/EvtAmp.hh"
+#include "EvtGenModels/EvtbTosllAmp.hh"
+#include "EvtGenModels/EvtbTosllFF.hh"
+
+void EvtbTosllScalarAmp::CalcAmp( EvtParticle *parent,
+ EvtAmp& amp,
+ EvtbTosllFF *formFactors ) {
+
+ //Add the lepton and neutrino 4 momenta to find q2
+
+ EvtVector4R q = parent->getDaug(1)->getP4()
+ + parent->getDaug(2)->getP4();
+ double q2 = (q.mass2());
+
+ double fp(0.),f0(0.),ft(0.);
+ double mesonmass = parent->getDaug(0)->mass();
+ double parentmass = parent->mass();
+
+ formFactors->getScalarFF(parent->getId(),
+ parent->getDaug(0)->getId(),
+ q2,
+ mesonmass,
+ fp,f0,ft);
+
+ EvtId daught = parent->getDaug(0)->getId();
+ bool btod = false;
+ bool nnlo = true;
+ if (daught == EvtPDL::getId(std::string("pi+")) ||
+ daught == EvtPDL::getId(std::string("pi-")) ||
+ daught == EvtPDL::getId(std::string("pi0")) ||
+ daught == EvtPDL::getId(std::string("eta")) ||
+ daught == EvtPDL::getId(std::string("eta'"))
+ ) btod = true;
+
+
+ EvtVector4R p4b;
+ p4b.set(parent->mass(),0.0,0.0,0.0);
+
+ EvtVector4C l11,l12;
+ EvtVector4C l21,l22;
+
+ EvtVector4C a11,a12;
+ EvtVector4C a21,a22;
+
+ EvtId l_num = parent->getDaug(1)->getId();
+
+ EvtVector4C T1,T2;
+
+ EvtVector4R phat=p4b/parentmass;
+ EvtVector4R qhat=q/parentmass;
+
+ EvtComplex c7eff = EvtbTosllAmp::GetC7Eff(q2,nnlo);
+ EvtComplex c9eff = EvtbTosllAmp::GetC9Eff(q2,nnlo,btod);
+ EvtComplex c10eff = EvtbTosllAmp::GetC10Eff(q2,nnlo);
+
+ //double mbhat=1;
+ double mbhat=4.4/(parentmass);
+ //double mkhat = 0.15;
+ double mkhat=mesonmass/(parentmass);
+ double shat=q2/(parentmass*parentmass);
+
+ double fm=(f0-fp)*(1-mkhat*mkhat)/shat;
+
+ EvtComplex aprime;
+ aprime = c9eff*fp+2.0*mbhat*c7eff*ft/(1+mkhat);
+ EvtComplex bprime;
+ bprime = c9eff*fm-2*mbhat*c7eff*ft*(1-mkhat)/shat;
+
+ EvtComplex cprime;
+ cprime = c10eff*fp;
+ EvtComplex dprime;
+ dprime = c10eff*fm;
+
+ static EvtIdSet leptons("e-","mu-","tau-");
+ static EvtIdSet antileptons("e+","mu+","tau+");
+
+ if (leptons.contains(l_num)){
+
+ T1=aprime*phat+bprime*qhat;
+ T2=cprime*phat+dprime*qhat;
+
+ l11=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
+ parent->getDaug(2)->spParent(0));
+ l21=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
+ parent->getDaug(2)->spParent(0));
+ l12=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
+ parent->getDaug(2)->spParent(1));
+ l22=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
+ parent->getDaug(2)->spParent(1));
+ a11=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
+ parent->getDaug(2)->spParent(0));
+ a21=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
+ parent->getDaug(2)->spParent(0));
+ a12=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
+ parent->getDaug(2)->spParent(1));
+ a22=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
+ parent->getDaug(2)->spParent(1));
+ }
+ else{
+ if (antileptons.contains(l_num)){
+
+ T1=aprime*phat+bprime*qhat;
+ T2=cprime*phat+dprime*qhat;
+
+ l11=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
+ parent->getDaug(2)->spParent(1));
+ l21=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
+ parent->getDaug(2)->spParent(1));
+ l12=EvtLeptonVCurrent(parent->getDaug(1)->spParent(1),
+ parent->getDaug(2)->spParent(0));
+ l22=EvtLeptonVCurrent(parent->getDaug(1)->spParent(0),
+ parent->getDaug(2)->spParent(0));
+
+ a11=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
+ parent->getDaug(2)->spParent(1));
+ a21=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
+ parent->getDaug(2)->spParent(1));
+ a12=EvtLeptonACurrent(parent->getDaug(1)->spParent(1),
+ parent->getDaug(2)->spParent(0));
+ a22=EvtLeptonACurrent(parent->getDaug(1)->spParent(0),
+ parent->getDaug(2)->spParent(0));
+
+ }
+ else{
+ report(ERROR,"EvtGen") << "Wrong lepton number\n";
+ }
+ }
+
+ amp.vertex(0,0,l11*T1+a11*T2);
+ amp.vertex(0,1,l12*T1+a12*T2);
+ amp.vertex(1,0,l21*T1+a21*T2);
+ amp.vertex(1,1,l22*T1+a22*T2);
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+