Source code for slophep.Predictions.FormFactorsBToV.BToVFFBLPR

from math import sqrt
import numpy as np
from slophep.Predictions.FormFactorsBToV import FormFactorBToV
from slophep.Predictions.Math import hqet
from flavio.physics.bdecays.formfactors.b_v.cln import h_to_A


[docs] class BLPR_BToV(FormFactorBToV): def __init__(self, B: str, V: str, par: dict = None, scale: float = None, *ffargs): super().__init__(B, V, par, scale) self._name = "BToV_BLPR" self._ffpar = { "RhoSq" : 1.24, "Chi21" : -0.06, "Chi2p" : 0.0, "Chi3p" : 0.05, "Eta1" : 0.30, "Etap" : -0.05, "dV20" : 0.0, "mb" : 4.710, "delta_mbc" : 3.4, "normscale" : 1.0 } self._params = ["RhoSq", "Chi21", "Chi2p", "Chi3p", "Eta1", "Etap", "dV20", "mb", "delta_mbc", "normscale"] internalparams = { "ash" : 0.26/np.pi, "ebReb" : 0.861, "ecRec" : 0.822, "mbarB" : 5.313, "lam1" : -0.3, # GeV^2 "rD" : self.par['m_D0']/self.par['m_B0'] } self._internalparams.update(internalparams)
[docs] def get_ff(self, q2: float) -> dict: """FF in BLPR parameterisation from https://arxiv.org/pdf/1703.05330 as in HAMMER v1.4.1 Parameters ---------- q2 : float q2 value to calculate FF at Returns ------- dict FF dictionary """ mB = self.internalparams["Mb"] mV = self.internalparams["Mc"] w = max(self.w(q2), 1) ash = self.internalparams["ash"] mb = self.ffpar["mb"] la = self.internalparams["mbarB"] - mb + self.internalparams["lam1"]/(2*mb) eb = la/(2*mb) mc = mb - self.ffpar["delta_mbc"] ec = la/(2*mc) ebReb = self.internalparams["ebReb"] ecRec = self.internalparams["ecRec"] corrb = eb*(1.-ebReb) corrc = ec*(1.-ecRec) zBC = mc/mb # z = ffcommon.z(mB, mV, q2, t0='tm') RhoSq = self.ffpar["RhoSq"] chi21 = self.ffpar["Chi21"] chi2p = self.ffpar["Chi2p"] chi3p = self.ffpar["Chi3p"] eta1 = self.ffpar["Eta1"] etap = self.ffpar["Etap"] L1 = -4.0*(w-1.0)*(chi21 + (w-1.0)*chi2p)+12.0*chi3p*(w-1.0) L2 = -4.0*chi3p*(w-1.0) L3 = 4.0*(chi21 + (w-1.0)*chi2p) L4 = 2.*(eta1 + etap*(w-1.))-1. # L4 = (2.0*(eta1 + etap*(w-1.0))-1.0*ebReb) L5 = -1.0 # L5 = -ecRec L6 = -2.*(1+(eta1 + etap*(w-1.)))/(w+1.) # L6 = -2.0*(ecRec + (eta1 + etap*(w-1.0)))/(w+1.0) # QCD correction functions Cv1 = hqet.CV1(w, zBC) # CV2 = hqet.CV2(w, zBC) # CV3 = hqet.CV3(w, zBC) Ca1 = hqet.CA1(w, zBC) Ca2 = hqet.CA2(w, zBC) Ca3 = hqet.CA3(w, zBC) Ct1 = hqet.CT1(w, zBC) Ct2 = hqet.CT2(w, zBC) Ct3 = hqet.CT3(w, zBC) # From Sec. III-A in https://arxiv.org/pdf/1703.05330 - Variables for leading IW function (derived from G(1)) rD = self.internalparams["rD"] a = sqrt((1+rD)/(2*sqrt(rD))) V21 = 57.0 V20 = 7.5 + self.ffpar["dV20"] zCon = (np.sqrt(w+1.0) - sqrt(2.0)*a)/(np.sqrt(w+1.0) + sqrt(2.0)*a) # Derivatives (approx) at w_0 = 2a^2-1 w0 = 2.0*a*a - 1.0 Cv1z = hqet.CV1(w0, zBC) Cv2z = hqet.CV2(w0, zBC) Cv3z = hqet.CV3(w0, zBC) Cv1zp = (hqet.CV1(w0 + 1e-5, zBC) - Cv1z)/1e-5 Cv2zp = (hqet.CV2(w0 + 1e-5, zBC) - Cv2z)/1e-5 Cv3zp = (hqet.CV3(w0 + 1e-5, zBC) - Cv3z)/1e-5 Cv1zpp = (Cv1zp - (Cv1z - hqet.CV1(w0 - 1e-5, zBC))/1e-5)/1e-5 Cv2zpp = (Cv2zp - (Cv2z - hqet.CV2(w0 - 1e-5, zBC))/1e-5)/1e-5 Cv3zpp = (Cv3zp - (Cv3z - hqet.CV3(w0 - 1e-5, zBC))/1e-5)/1e-5 a2 = a*a a4 = a2*a2 a6 = a4*a2 Xi = 64*a4*RhoSq - 16*a2 - V21 xiIW = 1 - 8*a2*RhoSq*zCon + zCon*zCon*( V21*RhoSq - V20 + (eb - ec)*(2*Xi*etap * (1-rD)/(1+rD)) + (eb + ec)*(Xi* (12*chi3p - 4*chi21) - 16*((a2-1)*Xi - 16* a4)*chi2p) + ash*(Xi*(Cv1zp +(Cv3z + rD*Cv2z)/(1 + rD)) + 2*a2*(Xi - 32*a2)*(Cv3zp + rD*Cv2zp)/(1+rD) - 64*a6*(Cv3zpp + rD*Cv2zpp)/(1+rD) -32*a4*Cv1zpp )) xiIW /= 1 - 8*a2*RhoSq*(1-a)/(1+a) + pow((1-a)/(1+a),2.)*( V21*RhoSq - V20 + (eb - ec)*(2*Xi*etap * (1-rD)/(1+rD)) + (eb + ec)*(Xi* (12*chi3p - 4*chi21) - 16*((a2-1)*Xi - 16* a4)*chi2p) + ash*(Xi*(Cv1zp +(Cv3z + rD*Cv2z)/(1 + rD)) + 2*a2*(Xi - 32*a2)*(Cv3zp + rD*Cv2zp)/(1+rD) - 64*a6*(Cv3zpp + rD*Cv2zpp)/(1+rD) -32*a4*Cv1zpp )) chi1=0 xi =xiIW + 2.*(eb+ec)*chi1 # Hps = 1.+ash*Cps+ec*(L2+L3*(w-1)+L5-L6*(w+1))+eb*(L1-L4)-(corrc + corrb) Hv = 1.+ash*Cv1+ec*(L2-L5)+eb*(L1-L4) -(corrc + corrb) Ha1 = 1.+ash*Ca1+ec*(L2-L5*(w-1)/(w+1))+eb*(L1-L4*(w-1)/(w+1)) -(corrc + corrb)*(w-1)/(w+1) Ha2 = ash*Ca2+ec*(L3+L6) +2.*corrc/(w+1.) Ha3 = 1.+ash*(Ca1+Ca3)+ec*(L2-L3-L5+L6)+eb*(L1-L4) -(corrc * (w-1.)/(w+1.)+corrb) Ht1 = 1.+ash*(Ct1+0.5*(w-1)*(Ct2-Ct3))+ec*(L2)+eb*(L1) Ht2 = 0.5*(w+1)*ash*(Ct2+Ct3)+ec*(L5)-eb*(L4) +corrc-corrb Ht3 = ash*(Ct2)+ec*(L6-L3) +2.*corrc/(w+1.) normscale = self.ffpar["normscale"] h = { "V" : normscale*xi*Hv, "A1" : normscale*xi*Ha1, "A2" : normscale*xi*Ha2, "A3" : normscale*xi*Ha3, "T1" : normscale*xi*Ht1, "T2" : normscale*xi*Ht2, "T3" : normscale*xi*Ht3 } # NOTE: this performs the translation https://arxiv.org/pdf/1309.0301 eqns. 38-39, # should be analgous to eqns B7-B13 in https://arxiv.org/pdf/1908.09398 return h_to_A(mB, mV, h, q2)
[docs] def get_hhat(self, q2: float) -> dict: w = max(self.w(q2), 1) ash = self.internalparams["ash"] la = self.internalparams["la"] mb = self.internalparams["mb"] eb = la/(2*mb) mc = mb - self.internalparams["delta_mbc"] ec = la/(2*mc) ebReb = self.internalparams["ebReb"] ecRec = self.internalparams["ecRec"] corrb = eb*(1.-ebReb) corrc = ec*(1.-ecRec) zBC = mc/mb chi21 = self.ffpar["Chi21"] chi2p = self.ffpar["Chi2p"] chi3p = self.ffpar["Chi3p"] eta1 = self.ffpar["Eta1"] etap = self.ffpar["Etap"] L1 = -4.0*(w-1.0)*(chi21 + (w-1.0)*chi2p)+12.0*chi3p*(w-1.0) L2 = -4.0*chi3p*(w-1.0) L3 = 4.0*(chi21 + (w-1.0)*chi2p) L4 = 2.*(eta1 + etap*(w-1.))-1. # L4 = (2.0*(eta1 + etap*(w-1.0))-1.0*ebReb) L5 = -1.0 # L5 = -ecRec L6 = -2.*(1+(eta1 + etap*(w-1.)))/(w+1.) # L6 = -2.0*(ecRec + (eta1 + etap*(w-1.0)))/(w+1.0) # QCD correction functions Cv1 = hqet.CV1(w, zBC) # CV2 = hqet.CV2(w, zBC) # CV3 = hqet.CV3(w, zBC) Ca1 = hqet.CA1(w, zBC) Ca2 = hqet.CA2(w, zBC) Ca3 = hqet.CA3(w, zBC) Ct1 = hqet.CT1(w, zBC) Ct2 = hqet.CT2(w, zBC) Ct3 = hqet.CT3(w, zBC) # Hps = 1.+ash*Cps+ec*(L2+L3*(w-1)+L5-L6*(w+1))+eb*(L1-L4)-(corrc + corrb) Hv = 1.+ash*Cv1+ec*(L2-L5)+eb*(L1-L4) -(corrc + corrb) Ha1 = 1.+ash*Ca1+ec*(L2-L5*(w-1)/(w+1))+eb*(L1-L4*(w-1)/(w+1)) -(corrc + corrb)*(w-1)/(w+1) Ha2 = ash*Ca2+ec*(L3+L6) +2.*corrc/(w+1.) Ha3 = 1.+ash*(Ca1+Ca3)+ec*(L2-L3-L5+L6)+eb*(L1-L4) -(corrc * (w-1.)/(w+1.)+corrb) Ht1 = 1.+ash*(Ct1+0.5*(w-1)*(Ct2-Ct3))+ec*(L2)+eb*(L1) Ht2 = 0.5*(w+1)*ash*(Ct2+Ct3)+ec*(L5)-eb*(L4) +corrc-corrb Ht3 = ash*(Ct2)+ec*(L6-L3) +2.*corrc/(w+1.) hhat = { "V" : Hv, "A1" : Ha1, "A2" : Ha2, "A3" : Ha3, "T1" : Ht1, "T2" : Ht2, "T3" : Ht3 } return hhat