from slophep.Predictions.FormFactorsBToV import FormFactorBToV
from math import sqrt
[docs]
class HPQCD_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_HPQCD"
# From supplementary material in https://arxiv.org/abs/2304.03137v2
# This goes up to order 10 in (w-1) for each FF !!
# Will work on a neater way to store these values ...
self._ffpar = {
"a^0_hA1" : 0.9033127209857411,
"a^1_hA1" : -0.9508435406529809,
"a^2_hA1" : 0.5257520677535575,
"a^3_hA1" : -0.10086711625761521,
"a^4_hA1" : -0.18939192845292227,
"a^5_hA1" : 0.3400524945787585,
"a^6_hA1" : -0.38728694249597406,
"a^7_hA1" : 0.37132088878018327,
"a^8_hA1" : -0.3237217925179691,
"a^9_hA1" : 0.2653479192536277,
"a^10_hA1" : -0.20819351685286072,
"a^0_hA2" : -0.4642005293547826,
"a^1_hA2" : 0.4762715910680349,
"a^2_hA2" : -1.024703497027969,
"a^3_hA2" : 1.4647317764574475,
"a^4_hA2" : -1.655288306586653,
"a^5_hA2" : 1.6308234881825487,
"a^6_hA2" : -1.4706335052056245,
"a^7_hA2" : 1.2471707316030383,
"a^8_hA2" : -1.011253949245923,
"a^9_hA2" : 0.7925552531002823,
"a^10_hA2" : -0.6049480665398556,
"a^0_hA3" : 1.3554401987030802,
"a^1_hA3" : -1.2307794387685247,
"a^2_hA3" : 0.4092337281757482,
"a^3_hA3" : 0.3128491447530095,
"a^4_hA3" : -0.7495739296382179,
"a^5_hA3" : 0.9267631598398023,
"a^6_hA3" : -0.9269882683956783,
"a^7_hA3" : 0.8292611271071676,
"a^8_hA3" : -0.6910768093514228,
"a^9_hA3" : 0.5479508577968928,
"a^10_hA3" : -0.41856224634866757,
"a^0_hV" : 1.2231306553287695,
"a^1_hV" : -1.9958578437965673,
"a^2_hV" : 2.55917256361585,
"a^3_hV" : -2.671400245583292,
"a^4_hV" : 2.4971801805018696,
"a^5_hV" : -2.181267497854233,
"a^6_hV" : 1.8206590102598812,
"a^7_hV" : -1.471445852774884,
"a^8_hV" : 1.1612767702518605,
"a^9_hV" : -0.9001266450293959,
"a^10_hV" : 0.6880569014570732,
"a^0_hT1" : 0.9229006472316218,
"a^1_hT1" : -1.1546465073714087,
"a^2_hT1" : 0.9681015610543681,
"a^3_hT1" : 0.7695270465359492,
"a^4_hT1" : -0.525549938591732,
"a^5_hT1" : -0.3947275978604678,
"a^6_hT1" : -0.17881029770168894,
"a^7_hT1" : -0.06068235137612874,
"a^8_hT1" : -0.014820648861609841,
"a^9_hT1" : -0.0010156037902605876,
"a^10_hT1" : 0.0017528617366402374,
"a^0_hT2" : -0.10972353521699603,
"a^1_hT2" : 0.029878371191936617,
"a^2_hT2" : -0.3914898707269266,
"a^3_hT2" : 7.435671398299036,
"a^4_hT2" : 4.1672064427294435,
"a^5_hT2" : 1.8337356857119789,
"a^6_hT2" : 0.7240526579747844,
"a^7_hT2" : 0.2710686655731731,
"a^8_hT2" : 0.09883480662543806,
"a^9_hT2" : 0.03557789930656164,
"a^10_hT2" : 0.012731997593546481,
"a^0_hT3" : -0.20107689611999296,
"a^1_hT3" : 1.30505464841678,
"a^2_hT3" : -0.8206859343721933,
"a^3_hT3" : 1.6015122623914702,
"a^4_hT3" : 1.442334286115229,
"a^5_hT3" : 0.8100760357651001,
"a^6_hT3" : 0.3811852402868251,
"a^7_hT3" : 0.16419279860055377,
"a^8_hT3" : 0.06727158745187298,
"a^9_hT3" : 0.026738475289287966,
"a^10_hT3" : 0.010426839830565283
}
self._params = [
"a^0_hA1", "a^1_hA1", "a^2_hA1", "a^3_hA1", "a^4_hA1", "a^5_hA1", "a^6_hA1", "a^7_hA1", "a^8_hA1", "a^9_hA1", "a^10_hA1",
"a^0_hA2", "a^1_hA2", "a^2_hA2", "a^3_hA2", "a^4_hA2", "a^5_hA2", "a^6_hA2", "a^7_hA2", "a^8_hA2", "a^9_hA2", "a^10_hA2",
"a^0_hA3", "a^1_hA3", "a^2_hA3", "a^3_hA3", "a^4_hA3", "a^5_hA3", "a^6_hA3", "a^7_hA3", "a^8_hA3", "a^9_hA3", "a^10_hA3",
"a^0_hV", "a^1_hV", "a^2_hV", "a^3_hV", "a^4_hV", "a^5_hV", "a^6_hV", "a^7_hV", "a^8_hV", "a^9_hV", "a^10_hV",
"a^0_hT1", "a^1_hT1", "a^2_hT1", "a^3_hT1", "a^4_hT1", "a^5_hT1", "a^6_hT1", "a^7_hT1", "a^8_hT1", "a^9_hT1", "a^10_hT1",
"a^0_hT2", "a^1_hT2", "a^2_hT2", "a^3_hT2", "a^4_hT2", "a^5_hT2", "a^6_hT2", "a^7_hT2", "a^8_hT2", "a^9_hT2", "a^10_hT2",
"a^0_hT3", "a^1_hT3", "a^2_hT3", "a^3_hT3", "a^4_hT3", "a^5_hT3", "a^6_hT3", "a^7_hT3", "a^8_hT3", "a^9_hT3", "a^10_hT3"
]
self._internalparams = {
"Mb" : self.par[f'm_{self.B}'],
"Mc" : self.par[f'm_{self.V}'],
"lambdaqcdphys" : 0.5,
"LambdaChi" : 1.0,
"maxorder" : 10,
"Mk" : 0.493677,
"MPi" : 0.13957,
"MEta" : 0.547862,
"fpi" : 0.130
}
[docs]
def _get_ff_h(self, q2: float, A: str) -> float:
"""Calculates h form factors according to https://arxiv.org/abs/2304.03137.
Directly lifted from the ancillary files (LOAD_FIT.py)
Parameters
----------
q2 : float
A : str
FF to compute, hA1, hA2, hA3, hV, hT1, hT2, hT3
Returns
-------
float
FF computed at q2 value
"""
value = 0
w = self.w(q2)
for order in range(int(self.internalparams["maxorder"]+1)):
param_name = 'a^'+str(order)+'_'+A
if param_name not in self.ffpar:
print(f"{self.name} FF parameter {param_name} not found, not contributing")
continue
cumulator = self.ffpar[param_name]
if order==0:
value += cumulator
else:
value += cumulator*((w-1)**order)
return value
[docs]
def get_ff(self, q2: float) -> dict[float]:
"""Implements FF caclculation according to https://arxiv.org/abs/2304.03137.
Directly lifted from the ancillary files (LOAD_FIT.py)
Parameters
----------
q2 : float
Returns
-------
dict[float]
FF dictionary
"""
mB = self.internalparams["Mb"]
mV = self.internalparams["Mc"]
r=mV/mB
w = self.w(q2)
hA1b=self._get_ff_h(q2, 'hA1')
hA2b=self._get_ff_h(q2,'hA2')
hA3b=self._get_ff_h(q2,'hA3')
hVb =self._get_ff_h(q2,'hV')
hT1b=self._get_ff_h(q2,'hT1')
hT2b=self._get_ff_h(q2,'hT2')
hT3b=self._get_ff_h(q2,'hT3')
A0 = ((1.0+w)*hA1b+(r*w-1.0)*hA2b+(r-w)*hA3b)/(2.0*sqrt(r))
A1 = hA1b*(1.0+w)*sqrt(r)/(1.0+r)
A2 = (r*hA2b + hA3b)*(1.0+r)/(2.0*sqrt(r))
V = hVb*(1.0+r)/(2.0*sqrt(r))
T1b = -(1/(2*sqrt(r)))*( (1-r)*hT2b - (1+r)*hT1b )
T2b = (1/(2*sqrt(r)))*( 2*r*(w+1)*hT1b/(1+r) - 2*r*(w-1)*hT2b/(1-r) )
T3b = (1/(2*sqrt(r)))*( (1-r)*hT1b - (1+r)*hT2b + (1-r**2)*hT3b )
lambdabdstar = mB**4+mV**4+q2**2-2*(mB**2*mV**2+mB**2*q2+mV**2*q2)
T23b = (1.0/(8*mB*mV**2))*((mB**2+3*mV**2-q2)*(mB+mV)*T2b - lambdabdstar*T3b/(mB-mV))
ff = {
"A0" : A0,
"A1" : A1,
"A2" : A2,
"V" : V,
"T1" : T1b,
"T2" : T2b,
"T3" : T3b,
"T23" : T23b,
}
ff['A12'] = ((ff['A1'] * (mB + mV)**2 * (mB**2 - mV**2 - q2)
- ff['A2'] * (mB**4 + (mV**2 - q2)**2
- 2 * mB**2 * (mV**2 + q2)))
/ (16. * mB * mV**2 * (mB + mV)))
return ff