27 namespace MD = MultiDimensional;
29 FFBtoD1starISGW2::FFBtoD1starISGW2() {
31 vector<IndexType> dims = {8};
32 string name{
"FFBtoD1starISGW2"};
34 setPrefix(
"BtoD**1*");
35 addProcessSignature(PID::BPLUS, {-PID::DSSD1STAR});
38 addProcessSignature(PID::BZERO, {PID::DSSD1STARMINUS});
41 setPrefix(
"BstoDs**1*");
42 addProcessSignature(PID::BS, {PID::DSSDS1STARMINUS});
48 void FFBtoD1starISGW2::defineSettings() {
50 setPath(getFFErrPrefixGroup().
get());
56 void FFBtoD1starISGW2::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 mum=1.0/(1.0/msq-1.0/msb);
120 const double bbx2=0.5*(bb2+bx2);
121 const double tm=(mb-mx)*(mb-mx);
122 if( t > tm ) { t = 0.99*tm; }
123 const double wt=1.0+(tm-t)/(2.0*mbb*mbx);
125 const double mqm = 0.1;
126 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));
128 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));
130 const double f5q = f5*pow(( mbb / mtb ),-0.5)*pow((mbx/mtx),-0.5);
131 const double f5l = f5*pow(( mbb / mtb ),0.5)*pow((mbx/mtx),0.5);
132 const double f5cppcm = f5*pow(( mbb / mtb ),-1.5)*pow((mbx/mtx),0.5);
133 const double f5cpmcm = f5*pow(( mbb / mtb ),-0.5)*pow((mbx/mtx),-0.5);
135 const double ql = f5q*sqrt(1.0/6.0)*msd/(sqrt(bb2)*mtx)*(1.0-bb2*mtb/(4.0*msd*msq*msb));
136 const double ll = f5l*sqrt(2.0/3.0)*mtb*sqrt(bb2)*(1.0/(2.0*msq) - 3.0/(2.0*msb) + msd*mtx*(wt-1)/bb2*(1.0/msq-msd*bb2/(2.0*mum*mtx*bbx2)));
137 const double cppcm = msd*msd*bx2*f5cppcm/(sqrt(6.0)*mtb*msq*sqrt(bb2)*bbx2);
138 const double cpmcm = -sqrt(2.0/3.0)*msd*f5cpmcm/(sqrt(bb2)*mtx)*(1+msd*bx2/(2.0*msq*bbx2));
141 const double sqmbmx = sqrt(mb*mx);
142 const double Gv1 = ll/sqmbmx;
143 const double Gv2 = mb*mb*cppcm/sqmbmx;
144 const double Gv3 = cpmcm*sqmbmx;
145 const double Ga = 2*ql*sqmbmx;
155 std::unique_ptr<FormFactorBase> FFBtoD1starISGW2::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.