Skip to content

Commit

Permalink
Add translator between JMS and flavio for sbcu and dbcu sectors
Browse files Browse the repository at this point in the history
  • Loading branch information
MJKirk committed Feb 4, 2025
1 parent b12c177 commit b0c6d03
Showing 1 changed file with 111 additions and 0 deletions.
111 changes: 111 additions & 0 deletions wilson/translate/wet.py
Original file line number Diff line number Diff line change
Expand Up @@ -1642,6 +1642,107 @@ def JMS_to_FormFlavor_chrom(C, qq, parameters):
else:
return 'not in FormFlav_chrom'

def _JMS_to_Flavio_III(C, qqqq, parameters):
p = parameters
V = ckmutil.ckm.ckm_tree(p["Vus"], p["Vub"], p["Vcb"], p["gamma"])
if qqqq in ('sbcu', 'dbcu', 'sbuc', 'dbuc'):
d1 = dflav[qqqq[0]]
d2 = dflav[qqqq[1]] # Will always be b = 2
u1 = uflav[qqqq[2]]
u2 = uflav[qqqq[3]]
xi = V[u1, d2] * V[u2, d1].conj()
else:
raise ValueError("Unexpected flavours: {}".format(qqqq))
pf = -sqrt(2) / p['GF'] / xi / 4
qqqq_fl = qqqq[1:4] + qqqq[0] # Indices flipped for flavio (sbcu -> bcus, etc)
Nc = 3
if qqqq == 'sbcu':
indices_ud = (1,0,1,2)
indices_ud_conj = (0,1,2,1)
indices_uddu = (1,2,1,0)
indices_uddu_conj = (0,1,2,1)
indices_du = (1,2,1,0)
elif qqqq == 'dbcu':
indices_ud = (1,0,0,2)
indices_ud_conj = (0,1,2,0)
indices_uddu = (1,2,0,0)
indices_uddu_conj = (0,0,2,1)
indices_du = (0,2,1,0)
else:
raise ValueError(f"Sector not implemented: {qqqq}")
return {
'CVLL_' + qqqq_fl: pf * ( C["V8udLL"][*indices_ud_conj].conj()/2 ),
'CVLR_' + qqqq_fl: pf * ( C["V1udduLR"][*indices_uddu] - C["V8udduLR"][*indices_uddu]/(2*Nc) ),
'CVRL_' + qqqq_fl: pf * ( C["V1udduLR"][*indices_uddu_conj].conj() - C["V8udduLR"][*indices_uddu_conj].conj()/(2*Nc) ),
'CVRR_' + qqqq_fl: pf * ( C["V8udRR"][*indices_ud_conj].conj()/2 ),
'CSLL_' + qqqq_fl: pf * ( C["S1udduRR"][*indices_uddu_conj].conj() - C["S8udduRR"][*indices_uddu_conj].conj()/(2*Nc) - C["S8udRR"][*indices_ud_conj].conj()/4 ),
'CSLR_' + qqqq_fl: pf * ( -C["V8duLR"][*indices_du] ),
'CSRL_' + qqqq_fl: pf * ( -C["V8udLR"][*indices_ud_conj].conj() ),
'CSRR_' + qqqq_fl: pf * ( C["S1udduRR"][*indices_uddu] - C["S8udduRR"][*indices_uddu]/(2*Nc) - C["S8udRR"][*indices_ud]/4 ),
'CTLL_' + qqqq_fl: pf * ( -C["S8udRR"][*indices_ud_conj].conj()/16 ),
'CTRR_' + qqqq_fl: pf * ( -C["S8udRR"][*indices_ud]/16 ),
'CVLLt_' + qqqq_fl: pf * ( C["V1udLL"][*indices_ud_conj].conj() - C["V8udLL"][*indices_ud_conj].conj()/(2*Nc) ),
'CVLRt_' + qqqq_fl: pf * ( C["V8udduLR"][*indices_uddu]/2 ),
'CVRLt_' + qqqq_fl: pf * ( C["V8udduLR"][*indices_uddu_conj].conj()/2 ),
'CVRRt_' + qqqq_fl: pf * ( C["V1udRR"][*indices_ud_conj].conj() - C["V8udRR"][*indices_ud_conj].conj()/(2*Nc) ),
'CSLLt_' + qqqq_fl: pf * ( -C["S1udRR"][*indices_ud_conj].conj()/2 + C["S8udduRR"][*indices_uddu_conj].conj()/2 + C["S8udRR"][*indices_ud_conj].conj()/(4*Nc) ),
'CSLRt_' + qqqq_fl: pf * ( -2*C["V1duLR"][*indices_du] + C["V8duLR"][*indices_du]/Nc ),
'CSRLt_' + qqqq_fl: pf * ( -2*C["V1udLR"][*indices_ud_conj].conj() + C["V8udLR"][*indices_ud_conj].conj()/Nc ),
'CSRRt_' + qqqq_fl: pf * ( -C["S1udRR"][*indices_ud]/2 + C["S8udduRR"][*indices_uddu]/2 + C["S8udRR"][*indices_ud]/(4*Nc) ),
'CTLLt_' + qqqq_fl: pf * ( -C["S1udRR"][*indices_ud_conj].conj()/8 + C["S8udRR"][*indices_ud_conj].conj()/(16*Nc) ),
'CTRRt_' + qqqq_fl: pf * ( -C["S1udRR"][*indices_ud]/8 + C["S8udRR"][*indices_ud]/(16*Nc) ),
}

def _Flavio_to_JMS_III(C, qqqq, parameters):
p = parameters
V = ckmutil.ckm.ckm_tree(p["Vus"], p["Vub"], p["Vcb"], p["gamma"])
if qqqq in ('sbcu', 'dbcu', 'sbuc', 'dbuc'):
d1 = dflav[qqqq[0]]
d2 = dflav[qqqq[1]] # Will always be b = 2
u1 = uflav[qqqq[2]]
u2 = uflav[qqqq[3]]
xi = V[u1, d2] * V[u2, d1].conj()
else:
raise ValueError("Unexpected flavours: {}".format(qqqq))
pf = -4 * p['GF'] * xi / sqrt(2)
Nc = 3
qqqq_fl = qqqq[1:4] + qqqq[0] # Indices flipped for flavio (sbcu -> bcus, etc)
if qqqq == 'sbcu':
indices_ud = "2123"
indices_ud_conj = "1232"
indices_uddu = "2321"
indices_uddu_conj = "1232"
indices_du = "2321"
elif qqqq == 'dbcu':
indices_ud = "2113"
indices_ud_conj = "1231"
indices_uddu = "2311"
indices_uddu_conj = "1132"
indices_du = "1321"
else:
raise ValueError(f"Sector not implemented: {qqqq}")
return {
f"V1udLL_{indices_ud_conj}": pf * ( C[f"CVLL_{qqqq_fl}"].conjugate()/Nc + C[f"CVLLt_{qqqq_fl}"].conjugate() ),
f"V8udLL_{indices_ud_conj}": pf * ( 2*C[f"CVLL_{qqqq_fl}"].conjugate() ),
f"V1udRR_{indices_ud_conj}": pf * ( C[f"CVRR_{qqqq_fl}"].conjugate()/Nc + C[f"CVRRt_{qqqq_fl}"].conjugate() ),
f"V8udRR_{indices_ud_conj}": pf * ( 2*C[f"CVRR_{qqqq_fl}"].conjugate() ),
f"V1udLR_{indices_ud_conj}": pf * ( -C[f"CSRL_{qqqq_fl}"].conjugate()/(2.*Nc) - C[f"CSRLt_{qqqq_fl}"].conjugate()/2. ),
f"V8udLR_{indices_ud_conj}": pf * ( -C[f"CSRL_{qqqq_fl}"].conjugate() ),
f"V1duLR_{indices_du}": pf * ( -C[f"CSLR_{qqqq_fl}"]/(2.*Nc) - C[f"CSLRt_{qqqq_fl}"]/2. ),
f"V8duLR_{indices_du}": pf * ( -C[f"CSLR_{qqqq_fl}"] ),
f"V1udduLR_{indices_uddu_conj}": pf * ( C[f"CVRL_{qqqq_fl}"].conjugate() + C[f"CVRLt_{qqqq_fl}"].conjugate()/Nc ),
f"V8udduLR_{indices_uddu_conj}": pf * ( 2*C[f"CVRLt_{qqqq_fl}"].conjugate() ),
f"V1udduLR_{indices_uddu}": pf * ( C[f"CVLR_{qqqq_fl}"] + C[f"CVLRt_{qqqq_fl}"]/Nc ),
f"V8udduLR_{indices_uddu}": pf * ( 2*C[f"CVLRt_{qqqq_fl}"] ),
f"S1udRR_{indices_ud_conj}": pf * ( (-8*C[f"CTLL_{qqqq_fl}"]).conjugate()/Nc - 8*C[f"CTLLt_{qqqq_fl}"].conjugate() ),
f"S8udRR_{indices_ud_conj}": pf * ( -16*C[f"CTLL_{qqqq_fl}"].conjugate() ),
f"S1udduRR_{indices_uddu_conj}": pf * ( C[f"CSLL_{qqqq_fl}"].conjugate() + C[f"CSLLt_{qqqq_fl}"].conjugate()/Nc - 4*C[f"CTLL_{qqqq_fl}"].conjugate() - (4*C[f"CTLLt_{qqqq_fl}"]).conjugate()/Nc ),
f"S8udduRR_{indices_uddu_conj}": pf * ( 2*C[f"CSLLt_{qqqq_fl}"].conjugate() - 8*C[f"CTLLt_{qqqq_fl}"].conjugate() ),
f"S1udRR_{indices_ud}": pf * ( (-8*C[f"CTRR_{qqqq_fl}"])/Nc - 8*C[f"CTRRt_{qqqq_fl}"] ),
f"S8udRR_{indices_ud}": pf * ( -16*C[f"CTRR_{qqqq_fl}"] ),
f"S1udduRR_{indices_uddu}": pf * ( C[f"CSRR_{qqqq_fl}"] + C[f"CSRRt_{qqqq_fl}"]/Nc - 4*C[f"CTRR_{qqqq_fl}"] - (4*C[f"CTRRt_{qqqq_fl}"])/Nc ),
f"S8udduRR_{indices_uddu}": pf * ( 2*C[f"CSRRt_{qqqq_fl}"] - 8*C[f"CTRRt_{qqqq_fl}"] ),
}

def _JMS_to_Flavio_VII(C, parameters):
"""From JMS to flavio basis for class VII, i.e. flavour blind operators."""
Expand Down Expand Up @@ -1784,6 +1885,11 @@ def JMS_to_flavio(Cflat, scale, parameters=None, sectors=None):
qq+'l_'+l+'nu_'+lp),
qq+'l_'+l+'nu_'+lp, p))

# Class III
for qqqq in ['sbcu', 'dbcu']: # 'sbuc', 'dbuc' not implemented yet
if sectors is None or qqqq in sectors:
d.update(_JMS_to_Flavio_III(C, qqqq, p))

# Class V semileptonic
for l in lflav.keys():
for lp in lflav.keys():
Expand Down Expand Up @@ -2144,6 +2250,11 @@ def flavio_to_JMS(C_incomplete, scale, parameters=None, sectors=None):
qq+'l_'+l+'nu_'+lp, p),
qq+'l_'+l+'nu_'+lp))

# Class III
for qqqq in ['sbcu', 'dbcu']: # 'sbuc', 'dbuc' not implemented yet
if sectors is None or qqqq in sectors:
d.update(_Flavio_to_JMS_III(C, qqqq, p))

# Class V semileptonic
for l in lflav.keys():
for lp in lflav.keys():
Expand Down

0 comments on commit b0c6d03

Please sign in to comment.