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.