From c7f56127179a188cde40214a02690c2908ac15a1 Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Tue, 2 Nov 2021 11:09:43 +0000 Subject: [PATCH] Corr objects now support slicing, T_symmetry implemented for Corr objects --- pyerrors/correlators.py | 19 +++++++++++++++++++ pyerrors/pyerrors.py | 20 -------------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/pyerrors/correlators.py b/pyerrors/correlators.py index 1e182f31..a65a32e5 100644 --- a/pyerrors/correlators.py +++ b/pyerrors/correlators.py @@ -62,6 +62,9 @@ class Corr: self.gamma_method() + def __getitem__(self, idx): + return self.content[idx] + def gamma_method(self): for item in self.content: if not(item is None): @@ -206,6 +209,22 @@ class Corr: def reverse(self): return Corr(self.content[::-1]) + def T_symmetry(partner, parity=+1): + if not isinstance(partner, Corr): + raise Exception("T partner has to be a Corr object.") + if parity not in [+1, -1]: + raise Exception("Parity has to be +1 or -1.") + T_partner = parity * partner.reverse() + t_slices = [] + for x0, t_slice in enumerate(self - T_partner): + if t_slice is not None: + if not t_slice.is_zero_within_error(3): + t_slices.append(x0) + if t_slices: + warnings.warn("T symmetry partner do not agree within 5 sigma on time slices" + str(t_slices) + ".", RuntimeWarning) + + return (self + T_partner) / 2 + def deriv(self, symmetric=True): # Defaults to symmetric derivative if not symmetric: newcontent = [] diff --git a/pyerrors/pyerrors.py b/pyerrors/pyerrors.py index 8daac2bb..fc184f53 100644 --- a/pyerrors/pyerrors.py +++ b/pyerrors/pyerrors.py @@ -1405,26 +1405,6 @@ def covariance3(obs1, obs2, correlation=False, **kwargs): return cov -def use_time_reversal_symmetry(data1, data2, **kwargs): - """Combine two correlation functions (lists of Obs) according to time reversal symmetry - - Keyword arguments - ----------------- - minus -- if True, multiply the second correlation function by a minus sign. - """ - if kwargs.get('minus'): - sign = -1 - else: - sign = 1 - - result = [] - T = int(len(data1)) - for i in range(T): - result.append(derived_observable(lambda x, **kwargs: (x[0] + sign * x[1]) / 2, [data1[i], data2[T - i - 1]], **kwargs)) - - return result - - def pseudo_Obs(value, dvalue, name, samples=1000): """Generate a pseudo Obs with given value, dvalue and name