27 namespace MD = MultiDimensional;
29 FFBtoD0starISGW2::FFBtoD0starISGW2() {
31 vector<IndexType> dims = {4};
32 string name{
"FFBtoD0starISGW2"};
34 setPrefix(
"BtoD**0*");
35 addProcessSignature(PID::BPLUS, {-PID::DSSD0STAR});
38 addProcessSignature(PID::BZERO, {PID::DSSD0STARMINUS});
41 setPrefix(
"BstoDs**0*");
42 addProcessSignature(PID::BS, {PID::DSSDS0STARMINUS});
48 void FFBtoD0starISGW2::defineSettings() {
50 setPath(getFFErrPrefixGroup().
get());
56 void FFBtoD0starISGW2::evalAtPSPoint(
const vector<double>& point,
const vector<double>& masses) {
57 Tensor& result = getTensor();
61 MSG_WARNING(
"Warning, Setting have not been defined!");
67 if(masses.size() >= 2) {
73 Mb = this->masses()[0];
74 Mc = this->masses()[1];
79 double Sqq = point[0];
80 double t=Sqq/(unitres*unitres);
82 #pragma clang diagnostic push
83 #pragma clang diagnostic ignored "-Wswitch-enum"
85 switch(result.
labels()[0]){
94 mbx = (3.0*2.49+2.40)/4.0;
105 mbx=(3.0*2.54+2.46)/4.0;
109 MSG_ERROR(
"Unknown assignments for parametrization " + getFFErrPrefixGroup().
get() +
".");
111 #pragma clang diagnostic pop
113 const double mtb = msb + msd;
114 const double mtx = msq + msd;
116 const double mb = Mb/unitres;
117 const double mx = Mc/unitres;
119 const double bbx2 = 0.5*(bb2+bx2);
120 const double tm = (mb-mx)*(mb-mx);
121 if( t > tm ) { t = 0.99*tm; }
123 const double mqm = 0.1;
124 const double r2=3.0/(4.0*msb*msq)+3*msd*msd/(2*mbb*mbx*bbx2) + (16.0/(mbb*mbx*(33.0-2.0*nfp)))*log(Getas(mqm)/Getas(msq));
126 const double f5 = sqrt(mtx/mtb)*pow(sqrt(bx2*bb2)/bbx2,5.0/2.0)/(pow((1.0+r2*(tm-t)/18.0),3.0));
128 const double f5uppum = f5*pow(( mbb / mtb ),-0.5)*pow((mbx/mtx),0.5);
129 const double f5upmum = f5*pow(( mbb / mtb ),0.5)*pow((mbx/mtx),-0.5);
131 const double uppum = -1.0*f5uppum*sqrt(2.0/(3.0*bb2))*msd;
132 const double upmum = 1.0*f5upmum*sqrt(2.0/(3.0*bb2))*msd*mtb/mtx;
135 const double gppgm = mb/sqrt(mb*mx)*uppum;
136 const double gpmgm = mx/sqrt(mb*mx)*upmum;
138 const double gp = (gppgm + gpmgm)/2.0;
139 const double gm = (gppgm - gpmgm)/2.0;
147 std::unique_ptr<FormFactorBase> FFBtoD0starISGW2::clone(
const std::string& label) {
TensorData makeEmptySparse(const IndexList &dimensions, const LabelsList &labels)
std::complex< double > & element(const IndexList &indices={})
access an element given its indices
LabelsList labels() const
get the labels of all the indices at once
Tensor indices label definitions.
Sparse tensor data container.
Multidimensional tensor class with complex numbers as elements.
void clearData()
sets all the elements to 0
Various numerical constants.
Hammer particle data class.