From 87d5e1829dcae4fec13e83d123caa82db97ac9b2 Mon Sep 17 00:00:00 2001 From: Elie Hammou Date: Fri, 18 Oct 2024 16:20:35 +0100 Subject: [PATCH 1/8] Added first version BSM propagator --- .../coefficient_functions/coupling_constants.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/yadism/coefficient_functions/coupling_constants.py b/src/yadism/coefficient_functions/coupling_constants.py index ec62e51c..933cc262 100644 --- a/src/yadism/coefficient_functions/coupling_constants.py +++ b/src/yadism/coefficient_functions/coupling_constants.py @@ -247,10 +247,22 @@ def propagator_factor(self, mode, Q2): * (1.0 - self.theory_config["sin2theta_weak"]) ) eta_phZ /= 1 - self.obs_config["propagatorCorrection"] + + # Need to specify Wilson coefficient? + C_4F = 1 + # Modify with more precise value + alpha = 1 / 137 + # Should get it from param card + BSM_scale = 1000 + eta_ph4F = ((C_4F) / (4 * np.pi*alpha)) *(Q2/BSM_scale**2) if mode == "phZ": return eta_phZ if mode == "ZZ": return eta_phZ**2 + if mode == "ph4F": + return eta_ph4F + if mode == "Z4F": + return eta_phZ * eta_ph4F if mode == "WW": eta_W = ( (eta_phZ / 2) From a9d45851bb213e4cb91695b9d8b0801c2f01fd25 Mon Sep 17 00:00:00 2001 From: Elie Hammou Date: Fri, 18 Oct 2024 16:41:56 +0100 Subject: [PATCH 2/8] Added Olq3 charges --- .../coefficient_functions/coupling_constants.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/yadism/coefficient_functions/coupling_constants.py b/src/yadism/coefficient_functions/coupling_constants.py index 933cc262..039c53be 100644 --- a/src/yadism/coefficient_functions/coupling_constants.py +++ b/src/yadism/coefficient_functions/coupling_constants.py @@ -46,6 +46,21 @@ def __init__(self, theory_config, obs_config): # neutrinos for pid in [12, 14, 16]: self.weak_isospin_3[pid] = 1 / 2 + + # BSM couplings ------------------------------------------------------- + # Temporary couplings to Olq3 + self.BSM_couplings = {21: 0} + self.weak_isospin_3 = {21: 0} + for q in range(1, 7): + self.BSM_couplings[q] = -1 if q % 2 == 0 else 1 # u if stmt else d + # leptons: 11 = e-(!) + for pid in [11, 13, 15]: + self.BSM_couplings[pid] = 1 + # neutrinos + # CC not yet implemented + for pid in [12, 14, 16]: + self.BSM_couplings[pid] = 0 + self.log() def log(self): From 5313249346167f79e16c0fca9ed89a42f66f6803 Mon Sep 17 00:00:00 2001 From: Elie Hammou Date: Mon, 21 Oct 2024 16:08:33 +0100 Subject: [PATCH 3/8] Implemented 4F couplings for quarks and leptons --- .../coupling_constants.py | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/src/yadism/coefficient_functions/coupling_constants.py b/src/yadism/coefficient_functions/coupling_constants.py index 039c53be..f8b60aa3 100644 --- a/src/yadism/coefficient_functions/coupling_constants.py +++ b/src/yadism/coefficient_functions/coupling_constants.py @@ -49,17 +49,20 @@ def __init__(self, theory_config, obs_config): # BSM couplings ------------------------------------------------------- # Temporary couplings to Olq3 - self.BSM_couplings = {21: 0} - self.weak_isospin_3 = {21: 0} + self.BSM_coupling_vectorial = {21: 0} + self.BSM_coupling_axial = {21: 0} for q in range(1, 7): - self.BSM_couplings[q] = -1 if q % 2 == 0 else 1 # u if stmt else d + self.BSM_coupling_vectorial[q] = -1 if q % 2 == 0 else 1 # u if stmt else d + self.BSM_coupling_axial[q] = -1 if q % 2 == 0 else 1 # u if stmt else d # leptons: 11 = e-(!) for pid in [11, 13, 15]: - self.BSM_couplings[pid] = 1 + self.BSM_coupling_vectorial[pid] = 1 + self.BSM_coupling_axial[pid] = 1 # neutrinos # CC not yet implemented for pid in [12, 14, 16]: - self.BSM_couplings[pid] = 0 + self.BSM_coupling_vectorial[pid] = 0 + self.BSM_coupling_axial[pid] = 0 self.log() @@ -107,9 +110,14 @@ def leptonic_coupling(self, mode, quark_coupling_type): # load Z coupling projectile_v = 0.0 projectile_a = 0.0 - if mode in ["phZ", "ZZ"]: + if mode in ["phZ", "ZZ", "Z4F"]: projectile_v = self.vectorial_coupling(abs(projectile_pid)) projectile_a = self.weak_isospin_3[abs(projectile_pid)] + projectile_BSM_v = self.BSM_coupling_vectorial(abs(projectile_pid)) + projectile_BSM_a = self.BSM_coupling_axial[abs(projectile_pid)] + if mode in ["ph4F"]: + projectile_BSM_v = self.BSM_coupling_vectorial(abs(projectile_pid)) + projectile_BSM_a = self.BSM_coupling_axial[abs(projectile_pid)] # switch mode if mode == "phph": if quark_coupling_type in ["VV", "AA"]: @@ -136,6 +144,26 @@ def leptonic_coupling(self, mode, quark_coupling_type): return 2.0 * projectile_v * projectile_a + pol * ( projectile_v**2 + projectile_a**2 ) + elif mode == "ph4F": + if quark_coupling_type in ["VV", "AA"]: + return self.electric_charge[abs(projectile_pid)] * ( + projectile_BSM_v + pol * projectile_BSM_a + ) + else: + return self.electric_charge[abs(projectile_pid)] * ( + projectile_BSM_a + pol * projectile_BSM_v + ) + elif mode == "Z4F": + if quark_coupling_type in ["VV", "AA"]: + return ( + projectile_v * projectile_BSM_v + + projectile_a * projectile_BSM_a + + pol * (projectile_v * projectile_BSM_a + projectile_BSM_v * projectile_a) + ) + else: + return projectile_v * projectile_BSM_a + projectile_BSM_v * projectile_a + pol * ( + projectile_v * projectile_BSM_v + projectile_a * projectile_BSM_a + ) raise ValueError(f"Unknown mode: {mode}") def nc_partonic_coupling(self, pid): @@ -145,6 +173,10 @@ def nc_partonic_coupling(self, pid): "A": 0, # axial coupling of the photon to the quark is not there of course } qZ = {"V": self.vectorial_coupling(pid), "A": self.weak_isospin_3[pid]} + + qBSM = { + + } return qph, qZ def partonic_coupling(self, mode, pid, quark_coupling_type, cc_mask=None): @@ -264,7 +296,7 @@ def propagator_factor(self, mode, Q2): eta_phZ /= 1 - self.obs_config["propagatorCorrection"] # Need to specify Wilson coefficient? - C_4F = 1 + C_4F = 1/4 # Modify with more precise value alpha = 1 / 137 # Should get it from param card From 1d18e0fd064069103945cce66db7b104f345d9f7 Mon Sep 17 00:00:00 2001 From: Elie Hammou Date: Mon, 21 Oct 2024 16:11:07 +0100 Subject: [PATCH 4/8] Fixed partonic coupling --- .../coefficient_functions/coupling_constants.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/yadism/coefficient_functions/coupling_constants.py b/src/yadism/coefficient_functions/coupling_constants.py index f8b60aa3..ea8d9580 100644 --- a/src/yadism/coefficient_functions/coupling_constants.py +++ b/src/yadism/coefficient_functions/coupling_constants.py @@ -174,10 +174,11 @@ def nc_partonic_coupling(self, pid): } qZ = {"V": self.vectorial_coupling(pid), "A": self.weak_isospin_3[pid]} - qBSM = { - + q4F = { + "V": self.BSM_coupling_vectorial[pid], + "A": self.BSM_coupling_axial[pid], } - return qph, qZ + return qph, qZ, q4F def partonic_coupling(self, mode, pid, quark_coupling_type, cc_mask=None): """Compute the coupling of the boson to the parton. @@ -204,7 +205,7 @@ def partonic_coupling(self, mode, pid, quark_coupling_type, cc_mask=None): if mode == "WW": return np.sum(self.theory_config["CKM"].masked(cc_mask)(pid)) # load couplings - qph, qZ = self.nc_partonic_coupling(pid) + qph, qZ, q4F = self.nc_partonic_coupling(pid) first = quark_coupling_type[0] second = quark_coupling_type[1] @@ -215,6 +216,10 @@ def partonic_coupling(self, mode, pid, quark_coupling_type, cc_mask=None): return qph[first] * qZ[second] if mode == "ZZ": return qZ[first] * qZ[second] + if mode == "ph4F": + return qph[first] * q4F[second] + if mode == "Z4F": + return qZ[first] * q4F[second] raise ValueError(f"Unknown mode: {mode}") def partonic_coupling_fl11(self, mode, pid, nf, quark_coupling_type): From 02a67c08c159367010537b0f3e58d4390e901957 Mon Sep 17 00:00:00 2001 From: Elie Hammou Date: Mon, 21 Oct 2024 16:46:25 +0100 Subject: [PATCH 5/8] Fixed typo --- .../coupling_constants.py | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/yadism/coefficient_functions/coupling_constants.py b/src/yadism/coefficient_functions/coupling_constants.py index ea8d9580..02dce982 100644 --- a/src/yadism/coefficient_functions/coupling_constants.py +++ b/src/yadism/coefficient_functions/coupling_constants.py @@ -113,10 +113,10 @@ def leptonic_coupling(self, mode, quark_coupling_type): if mode in ["phZ", "ZZ", "Z4F"]: projectile_v = self.vectorial_coupling(abs(projectile_pid)) projectile_a = self.weak_isospin_3[abs(projectile_pid)] - projectile_BSM_v = self.BSM_coupling_vectorial(abs(projectile_pid)) + projectile_BSM_v = self.BSM_coupling_vectorial[abs(projectile_pid)] projectile_BSM_a = self.BSM_coupling_axial[abs(projectile_pid)] if mode in ["ph4F"]: - projectile_BSM_v = self.BSM_coupling_vectorial(abs(projectile_pid)) + projectile_BSM_v = self.BSM_coupling_vectorial[abs(projectile_pid)] projectile_BSM_a = self.BSM_coupling_axial[abs(projectile_pid)] # switch mode if mode == "phph": @@ -158,11 +158,21 @@ def leptonic_coupling(self, mode, quark_coupling_type): return ( projectile_v * projectile_BSM_v + projectile_a * projectile_BSM_a - + pol * (projectile_v * projectile_BSM_a + projectile_BSM_v * projectile_a) + + pol + * ( + projectile_v * projectile_BSM_a + + projectile_BSM_v * projectile_a + ) ) else: - return projectile_v * projectile_BSM_a + projectile_BSM_v * projectile_a + pol * ( - projectile_v * projectile_BSM_v + projectile_a * projectile_BSM_a + return ( + projectile_v * projectile_BSM_a + + projectile_BSM_v * projectile_a + + pol + * ( + projectile_v * projectile_BSM_v + + projectile_a * projectile_BSM_a + ) ) raise ValueError(f"Unknown mode: {mode}") @@ -301,12 +311,12 @@ def propagator_factor(self, mode, Q2): eta_phZ /= 1 - self.obs_config["propagatorCorrection"] # Need to specify Wilson coefficient? - C_4F = 1/4 + C_4F = 1 / 4 # Modify with more precise value alpha = 1 / 137 # Should get it from param card BSM_scale = 1000 - eta_ph4F = ((C_4F) / (4 * np.pi*alpha)) *(Q2/BSM_scale**2) + eta_ph4F = ((C_4F) / (4 * np.pi * alpha)) * (Q2 / BSM_scale**2) if mode == "phZ": return eta_phZ if mode == "ZZ": @@ -391,7 +401,20 @@ def get_weight(self, pid, Q2, quark_coupling_type, cc_mask=None): * self.propagator_factor("ZZ", Q2) * self.partonic_coupling("ZZ", pid, quark_coupling_type) ) - return w_phph + w_phZ + w_ZZ + # photon-4F interference + w_ph4F = ( + 2 + * self.leptonic_coupling("ph4F", quark_coupling_type) + * self.propagator_factor("ph4F", Q2) + * self.partonic_coupling("ph4F", pid, quark_coupling_type) + ) + # Z-4F interference + w_Z4F = ( + self.leptonic_coupling("Z4F", quark_coupling_type) + * self.propagator_factor("Z4F", Q2) + * self.partonic_coupling("Z4F", pid, quark_coupling_type) + ) + return w_phph + w_phZ + w_ZZ + w_ph4F + w_Z4F raise ValueError(f"Unknown process: {self.obs_config['process']}") def get_fl11_weight(self, pid, Q2, nf, quark_coupling_type): From a36576f75719e9288cc41e155028072f5c6816e9 Mon Sep 17 00:00:00 2001 From: Elie Hammou Date: Tue, 22 Oct 2024 12:00:06 +0100 Subject: [PATCH 6/8] Initialised BSM couplings --- src/yadism/coefficient_functions/coupling_constants.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/yadism/coefficient_functions/coupling_constants.py b/src/yadism/coefficient_functions/coupling_constants.py index 02dce982..1cf34bb0 100644 --- a/src/yadism/coefficient_functions/coupling_constants.py +++ b/src/yadism/coefficient_functions/coupling_constants.py @@ -110,6 +110,8 @@ def leptonic_coupling(self, mode, quark_coupling_type): # load Z coupling projectile_v = 0.0 projectile_a = 0.0 + projectile_BSM_v = 0.0 + projectile_BSM_a = 0.0 if mode in ["phZ", "ZZ", "Z4F"]: projectile_v = self.vectorial_coupling(abs(projectile_pid)) projectile_a = self.weak_isospin_3[abs(projectile_pid)] From 60fd649cfaa6c404facf30c37d6597b7b0332298 Mon Sep 17 00:00:00 2001 From: Elie Hammou Date: Wed, 23 Oct 2024 15:46:02 +0100 Subject: [PATCH 7/8] Updated fl11 function and added factor 2 in get weight --- .../coupling_constants.py | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/yadism/coefficient_functions/coupling_constants.py b/src/yadism/coefficient_functions/coupling_constants.py index 1cf34bb0..b5be8270 100644 --- a/src/yadism/coefficient_functions/coupling_constants.py +++ b/src/yadism/coefficient_functions/coupling_constants.py @@ -273,12 +273,13 @@ def partonic_coupling_fl11(self, mode, pid, nf, quark_coupling_type): second = quark_coupling_type[1] def switch_mode(quark, coupling_type): - qph, qZ = self.nc_partonic_coupling(quark) - if mode in ["phph", "Zph"]: + qph, qZ, q4F = self.nc_partonic_coupling(quark) + if mode in ["phph", "Zph", "4Fph"]: return qph[coupling_type] - if mode in ["phZ", "ZZ"]: + if mode in ["phZ", "ZZ", "4FZ"]: return qZ[coupling_type] - raise ValueError(f"Unknown mode: {mode}") + if mode in ["ph4F", "Z4F"]: + return q4F[coupling_type] # first coupling contribute with a mean pids = range(1, nf + 1) @@ -412,7 +413,8 @@ def get_weight(self, pid, Q2, quark_coupling_type, cc_mask=None): ) # Z-4F interference w_Z4F = ( - self.leptonic_coupling("Z4F", quark_coupling_type) + 2 + * self.leptonic_coupling("Z4F", quark_coupling_type) * self.propagator_factor("Z4F", Q2) * self.partonic_coupling("Z4F", pid, quark_coupling_type) ) @@ -482,7 +484,29 @@ def get_fl11_weight(self, pid, Q2, nf, quark_coupling_type): * self.propagator_factor("ZZ", Q2) * self.partonic_coupling_fl11("ZZ", pid, nf, quark_coupling_type) ) - return w_phph + w_phZ + w_Zph + w_ZZ + # photon-4F interference + w_ph4F = ( + self.leptonic_coupling("ph4F", quark_coupling_type) + * self.propagator_factor("ph4F", Q2) + * self.partonic_coupling("ph4F", pid, quark_coupling_type) + ) + w_4Fph = ( + self.leptonic_coupling("ph4F", quark_coupling_type) + * self.propagator_factor("ph4F", Q2) + * self.partonic_coupling("ph4F", pid, quark_coupling_type) + ) + # Z-4F interference + w_Z4F = ( + self.leptonic_coupling("Z4F", quark_coupling_type) + * self.propagator_factor("Z4F", Q2) + * self.partonic_coupling("Z4F", pid, quark_coupling_type) + ) + w_4FZ = ( + self.leptonic_coupling("Z4F", quark_coupling_type) + * self.propagator_factor("Z4F", Q2) + * self.partonic_coupling("Z4F", pid, quark_coupling_type) + ) + return w_phph + w_phZ + w_Zph + w_ZZ + w_ph4F + w_4Fph + w_Z4F + w_4FZ raise ValueError(f"Unknown process: {self.obs_config['process']}") @classmethod From 0d3e636829ea463a6e36ac6713b7dd5839399a21 Mon Sep 17 00:00:00 2001 From: Elie Hammou Date: Wed, 23 Oct 2024 16:23:08 +0100 Subject: [PATCH 8/8] Replaced 4F by Olq3 --- .../coupling_constants.py | 182 +++++++++--------- 1 file changed, 93 insertions(+), 89 deletions(-) diff --git a/src/yadism/coefficient_functions/coupling_constants.py b/src/yadism/coefficient_functions/coupling_constants.py index b5be8270..31e9541e 100644 --- a/src/yadism/coefficient_functions/coupling_constants.py +++ b/src/yadism/coefficient_functions/coupling_constants.py @@ -49,20 +49,22 @@ def __init__(self, theory_config, obs_config): # BSM couplings ------------------------------------------------------- # Temporary couplings to Olq3 - self.BSM_coupling_vectorial = {21: 0} - self.BSM_coupling_axial = {21: 0} + self.Olq3_coupling_vectorial = {21: 0} + self.Olq3_coupling_axial = {21: 0} for q in range(1, 7): - self.BSM_coupling_vectorial[q] = -1 if q % 2 == 0 else 1 # u if stmt else d - self.BSM_coupling_axial[q] = -1 if q % 2 == 0 else 1 # u if stmt else d + self.Olq3_coupling_vectorial[q] = ( + -1 if q % 2 == 0 else 1 + ) # u if stmt else d + self.Olq3_coupling_axial[q] = -1 if q % 2 == 0 else 1 # u if stmt else d # leptons: 11 = e-(!) for pid in [11, 13, 15]: - self.BSM_coupling_vectorial[pid] = 1 - self.BSM_coupling_axial[pid] = 1 + self.Olq3_coupling_vectorial[pid] = 1 + self.Olq3_coupling_axial[pid] = 1 # neutrinos # CC not yet implemented for pid in [12, 14, 16]: - self.BSM_coupling_vectorial[pid] = 0 - self.BSM_coupling_axial[pid] = 0 + self.Olq3_coupling_vectorial[pid] = 0 + self.Olq3_coupling_axial[pid] = 0 self.log() @@ -108,18 +110,18 @@ def leptonic_coupling(self, mode, quark_coupling_type): ): pol *= -1 # load Z coupling - projectile_v = 0.0 - projectile_a = 0.0 - projectile_BSM_v = 0.0 - projectile_BSM_a = 0.0 - if mode in ["phZ", "ZZ", "Z4F"]: - projectile_v = self.vectorial_coupling(abs(projectile_pid)) - projectile_a = self.weak_isospin_3[abs(projectile_pid)] - projectile_BSM_v = self.BSM_coupling_vectorial[abs(projectile_pid)] - projectile_BSM_a = self.BSM_coupling_axial[abs(projectile_pid)] - if mode in ["ph4F"]: - projectile_BSM_v = self.BSM_coupling_vectorial[abs(projectile_pid)] - projectile_BSM_a = self.BSM_coupling_axial[abs(projectile_pid)] + projectile_Z_v = 0.0 + projectile_Z_a = 0.0 + projectile_Olq3_v = 0.0 + projectile_Olq3_a = 0.0 + if mode in ["phZ", "ZZ", "Z0lq3"]: + projectile_Z_v = self.vectorial_coupling(abs(projectile_pid)) + projectile_Z_a = self.weak_isospin_3[abs(projectile_pid)] + projectile_Olq3_v = self.Olq3_coupling_vectorial[abs(projectile_pid)] + projectile_Olq3_a = self.Olq3_coupling_axial[abs(projectile_pid)] + if mode in ["ph0lq3"]: + projectile_Olq3_v = self.Olq3_coupling_vectorial[abs(projectile_pid)] + projectile_Olq3_a = self.Olq3_coupling_axial[abs(projectile_pid)] # switch mode if mode == "phph": if quark_coupling_type in ["VV", "AA"]: @@ -129,51 +131,51 @@ def leptonic_coupling(self, mode, quark_coupling_type): elif mode == "phZ": if quark_coupling_type in ["VV", "AA"]: return self.electric_charge[abs(projectile_pid)] * ( - projectile_v + pol * projectile_a + projectile_Z_v + pol * projectile_Z_a ) else: return self.electric_charge[abs(projectile_pid)] * ( - projectile_a + pol * projectile_v + projectile_Z_a + pol * projectile_Z_v ) elif mode == "ZZ": if quark_coupling_type in ["VV", "AA"]: return ( - projectile_v**2 - + projectile_a**2 - + 2.0 * pol * projectile_v * projectile_a + projectile_Z_v**2 + + projectile_Z_a**2 + + 2.0 * pol * projectile_Z_v * projectile_Z_a ) else: - return 2.0 * projectile_v * projectile_a + pol * ( - projectile_v**2 + projectile_a**2 + return 2.0 * projectile_Z_v * projectile_Z_a + pol * ( + projectile_Z_v**2 + projectile_Z_a**2 ) - elif mode == "ph4F": + elif mode == "ph0lq3": if quark_coupling_type in ["VV", "AA"]: return self.electric_charge[abs(projectile_pid)] * ( - projectile_BSM_v + pol * projectile_BSM_a + projectile_Olq3_v + pol * projectile_Olq3_a ) else: return self.electric_charge[abs(projectile_pid)] * ( - projectile_BSM_a + pol * projectile_BSM_v + projectile_Olq3_a + pol * projectile_Olq3_v ) - elif mode == "Z4F": + elif mode == "Z0lq3": if quark_coupling_type in ["VV", "AA"]: return ( - projectile_v * projectile_BSM_v - + projectile_a * projectile_BSM_a + projectile_Z_v * projectile_Olq3_v + + projectile_Z_a * projectile_Olq3_a + pol * ( - projectile_v * projectile_BSM_a - + projectile_BSM_v * projectile_a + projectile_Z_v * projectile_Olq3_a + + projectile_Olq3_v * projectile_Z_a ) ) else: return ( - projectile_v * projectile_BSM_a - + projectile_BSM_v * projectile_a + projectile_Z_v * projectile_Olq3_a + + projectile_Olq3_v * projectile_Z_a + pol * ( - projectile_v * projectile_BSM_v - + projectile_a * projectile_BSM_a + projectile_Z_v * projectile_Olq3_v + + projectile_Z_a * projectile_Olq3_a ) ) raise ValueError(f"Unknown mode: {mode}") @@ -186,11 +188,11 @@ def nc_partonic_coupling(self, pid): } qZ = {"V": self.vectorial_coupling(pid), "A": self.weak_isospin_3[pid]} - q4F = { - "V": self.BSM_coupling_vectorial[pid], - "A": self.BSM_coupling_axial[pid], + qOlq3 = { + "V": self.Olq3_coupling_vectorial[pid], + "A": self.Olq3_coupling_axial[pid], } - return qph, qZ, q4F + return qph, qZ, qOlq3 def partonic_coupling(self, mode, pid, quark_coupling_type, cc_mask=None): """Compute the coupling of the boson to the parton. @@ -217,7 +219,7 @@ def partonic_coupling(self, mode, pid, quark_coupling_type, cc_mask=None): if mode == "WW": return np.sum(self.theory_config["CKM"].masked(cc_mask)(pid)) # load couplings - qph, qZ, q4F = self.nc_partonic_coupling(pid) + qph, qZ, qOlq3 = self.nc_partonic_coupling(pid) first = quark_coupling_type[0] second = quark_coupling_type[1] @@ -228,10 +230,10 @@ def partonic_coupling(self, mode, pid, quark_coupling_type, cc_mask=None): return qph[first] * qZ[second] if mode == "ZZ": return qZ[first] * qZ[second] - if mode == "ph4F": - return qph[first] * q4F[second] - if mode == "Z4F": - return qZ[first] * q4F[second] + if mode == "ph0lq3": + return qph[first] * qOlq3[second] + if mode == "Z0lq3": + return qZ[first] * qOlq3[second] raise ValueError(f"Unknown mode: {mode}") def partonic_coupling_fl11(self, mode, pid, nf, quark_coupling_type): @@ -273,13 +275,13 @@ def partonic_coupling_fl11(self, mode, pid, nf, quark_coupling_type): second = quark_coupling_type[1] def switch_mode(quark, coupling_type): - qph, qZ, q4F = self.nc_partonic_coupling(quark) - if mode in ["phph", "Zph", "4Fph"]: + qph, qZ, qOlq3 = self.nc_partonic_coupling(quark) + if mode in ["phph", "Zph", "Olq3ph"]: return qph[coupling_type] - if mode in ["phZ", "ZZ", "4FZ"]: + if mode in ["phZ", "ZZ", "Olq3Z"]: return qZ[coupling_type] - if mode in ["ph4F", "Z4F"]: - return q4F[coupling_type] + if mode in ["ph0lq3", "Z0lq3"]: + return qOlq3[coupling_type] # first coupling contribute with a mean pids = range(1, nf + 1) @@ -314,20 +316,20 @@ def propagator_factor(self, mode, Q2): eta_phZ /= 1 - self.obs_config["propagatorCorrection"] # Need to specify Wilson coefficient? - C_4F = 1 / 4 + C_Olq3 = 1 / 4 # Modify with more precise value alpha = 1 / 137 # Should get it from param card BSM_scale = 1000 - eta_ph4F = ((C_4F) / (4 * np.pi * alpha)) * (Q2 / BSM_scale**2) + eta_phOlq3 = ((C_Olq3) / (4 * np.pi * alpha)) * (Q2 / BSM_scale**2) if mode == "phZ": return eta_phZ if mode == "ZZ": return eta_phZ**2 - if mode == "ph4F": - return eta_ph4F - if mode == "Z4F": - return eta_phZ * eta_ph4F + if mode == "ph0lq3": + return eta_phOlq3 + if mode == "Z0lq3": + return eta_phZ * eta_phOlq3 if mode == "WW": eta_W = ( (eta_phZ / 2) @@ -404,21 +406,21 @@ def get_weight(self, pid, Q2, quark_coupling_type, cc_mask=None): * self.propagator_factor("ZZ", Q2) * self.partonic_coupling("ZZ", pid, quark_coupling_type) ) - # photon-4F interference - w_ph4F = ( + # photon-Olq3 interference + w_ph0lq3 = ( 2 - * self.leptonic_coupling("ph4F", quark_coupling_type) - * self.propagator_factor("ph4F", Q2) - * self.partonic_coupling("ph4F", pid, quark_coupling_type) + * self.leptonic_coupling("ph0lq3", quark_coupling_type) + * self.propagator_factor("ph0lq3", Q2) + * self.partonic_coupling("ph0lq3", pid, quark_coupling_type) ) - # Z-4F interference - w_Z4F = ( + # Z-Olq3 interference + w_Z0lq3 = ( 2 - * self.leptonic_coupling("Z4F", quark_coupling_type) - * self.propagator_factor("Z4F", Q2) - * self.partonic_coupling("Z4F", pid, quark_coupling_type) + * self.leptonic_coupling("Z0lq3", quark_coupling_type) + * self.propagator_factor("Z0lq3", Q2) + * self.partonic_coupling("Z0lq3", pid, quark_coupling_type) ) - return w_phph + w_phZ + w_ZZ + w_ph4F + w_Z4F + return w_phph + w_phZ + w_ZZ + w_ph0lq3 + w_Z0lq3 raise ValueError(f"Unknown process: {self.obs_config['process']}") def get_fl11_weight(self, pid, Q2, nf, quark_coupling_type): @@ -484,29 +486,31 @@ def get_fl11_weight(self, pid, Q2, nf, quark_coupling_type): * self.propagator_factor("ZZ", Q2) * self.partonic_coupling_fl11("ZZ", pid, nf, quark_coupling_type) ) - # photon-4F interference - w_ph4F = ( - self.leptonic_coupling("ph4F", quark_coupling_type) - * self.propagator_factor("ph4F", Q2) - * self.partonic_coupling("ph4F", pid, quark_coupling_type) + # photon-Olq3 interference + w_ph0lq3 = ( + self.leptonic_coupling("ph0lq3", quark_coupling_type) + * self.propagator_factor("ph0lq3", Q2) + * self.partonic_coupling("ph0lq3", pid, quark_coupling_type) ) - w_4Fph = ( - self.leptonic_coupling("ph4F", quark_coupling_type) - * self.propagator_factor("ph4F", Q2) - * self.partonic_coupling("ph4F", pid, quark_coupling_type) + w_Olq3ph = ( + self.leptonic_coupling("ph0lq3", quark_coupling_type) + * self.propagator_factor("ph0lq3", Q2) + * self.partonic_coupling("ph0lq3", pid, quark_coupling_type) ) - # Z-4F interference - w_Z4F = ( - self.leptonic_coupling("Z4F", quark_coupling_type) - * self.propagator_factor("Z4F", Q2) - * self.partonic_coupling("Z4F", pid, quark_coupling_type) + # Z-Olq3 interference + w_Z0lq3 = ( + self.leptonic_coupling("Z0lq3", quark_coupling_type) + * self.propagator_factor("Z0lq3", Q2) + * self.partonic_coupling("Z0lq3", pid, quark_coupling_type) ) - w_4FZ = ( - self.leptonic_coupling("Z4F", quark_coupling_type) - * self.propagator_factor("Z4F", Q2) - * self.partonic_coupling("Z4F", pid, quark_coupling_type) + w_Olq3Z = ( + self.leptonic_coupling("Z0lq3", quark_coupling_type) + * self.propagator_factor("Z0lq3", Q2) + * self.partonic_coupling("Z0lq3", pid, quark_coupling_type) + ) + return ( + w_phph + w_phZ + w_Zph + w_ZZ + w_ph0lq3 + w_Olq3ph + w_Z0lq3 + w_Olq3Z ) - return w_phph + w_phZ + w_Zph + w_ZZ + w_ph4F + w_4Fph + w_Z4F + w_4FZ raise ValueError(f"Unknown process: {self.obs_config['process']}") @classmethod