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.