27 namespace MD = MultiDimensional;
29 FFBtoD2starISGW2::FFBtoD2starISGW2() {
31 vector<IndexType> dims = {8};
32 string name{
"FFBtoD2starISGW2"};
34 setPrefix(
"BtoD**2*");
35 addProcessSignature(PID::BPLUS, {-PID::DSSD2STAR});
38 addProcessSignature(PID::BZERO, {PID::DSSD2STARMINUS});
41 setPrefix(
"BstoDs**2*");
42 addProcessSignature(PID::BS, {PID::DSSDS2STARMINUS});
48 void FFBtoD2starISGW2::defineSettings() {
50 setPath(getFFErrPrefixGroup().
get());
56 void FFBtoD2starISGW2::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=(5.0*2.46+3.0*2.42)/8.0;
105 mbx=(5.0*2.61+3.0*2.54)/8.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 mup=1.0/(1.0/msq+1.0/msb);
120 const double mum=1.0/(1.0/msq-1.0/msb);
121 const double bbx2=0.5*(bb2+bx2);
122 const double tm=(mb-mx)*(mb-mx);
123 if( t > tm ) { t = 0.99*tm; }
124 const double wt=1.0+(tm-t)/(2.0*mbb*mbx);
126 const double mqm = 0.1;
127 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));
129 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));
131 const double f5h = f5*pow(( mbb / mtb ),-1.5)*pow((mbx/mtx),-0.5);
132 const double f5k = f5*pow(( mbb / mtb ),-0.5)*pow((mbx/mtx),0.5);
133 const double f5bppbm = f5*pow(( mbb / mtb ),-2.5)*pow((mbx/mtx),0.5);
134 const double f5bpmbm = f5*pow(( mbb / mtb ),-1.5)*pow((mbx/mtx),-0.5);
136 const double hf = f5h*(msd/(sqrt(8.0*bb2)*mtb))*((1.0/msq)-(msd*bb2/(2.0*mum*mtx*bbx2)));
137 const double kf = f5k*(msd/(sqrt(2.0*bb2)))*(1.0+wt);
138 const double bppbm = ((msd*msd*f5bppbm*bx2)/(sqrt(32.0*bb2)*msq*msb*mtb*bbx2))*(1.0-(msd*bx2/(2.0*mtb*bbx2)));
139 const double bpmbm = -1.0*(msd*f5bpmbm/(sqrt(2.0*bb2)*msb*mtx))*(1.0- ((msd*msb*bx2)/(2.0*mup*mtb*bbx2))+
140 ((msd*bx2*(1.0-((msd*bx2)/(2.0*mtb*bbx2))))/(4.0*msq*bbx2)));
143 const double sqmbmx = sqrt(mb*mx);
144 const double Ka1 = kf*mb/sqmbmx;
145 const double Ka2 = mb*mb*mb*bppbm/sqmbmx;
146 const double Ka3 = bpmbm*mb*sqmbmx;
147 const double Kv = 2*hf*mb*sqmbmx;
157 std::unique_ptr<FormFactorBase> FFBtoD2starISGW2::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.