mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-15 03:53:41 +02:00
t0 extractions for new Hadrons module (#171)
* feat: first version of read flow observables for new hadrons module. * feat: refactored t0 fit in seperate function and added extract_t0_hd5 to hadrons submodule.
This commit is contained in:
parent
be061fdc23
commit
1184a0fe76
3 changed files with 120 additions and 48 deletions
|
@ -3,12 +3,10 @@ import fnmatch
|
|||
import struct
|
||||
import warnings
|
||||
import numpy as np # Thinly-wrapped numpy
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib import gridspec
|
||||
from ..obs import Obs
|
||||
from ..fits import fit_lin
|
||||
from ..obs import CObs
|
||||
from ..correlators import Corr
|
||||
from .misc import fit_t0
|
||||
from .utils import sort_names
|
||||
|
||||
|
||||
|
@ -428,51 +426,7 @@ def extract_t0(path, prefix, dtr_read, xmin, spatial_extent, fit_range=5, postfi
|
|||
new_obs = Obs(samples, rep_names, idl=idl)
|
||||
t2E_dict[n * dn * eps] = (n * dn * eps) ** 2 * new_obs / (spatial_extent ** 3) - 0.3
|
||||
|
||||
zero_crossing = np.argmax(np.array(
|
||||
[o.value for o in t2E_dict.values()]) > 0.0)
|
||||
|
||||
x = list(t2E_dict.keys())[zero_crossing - fit_range:
|
||||
zero_crossing + fit_range]
|
||||
y = list(t2E_dict.values())[zero_crossing - fit_range:
|
||||
zero_crossing + fit_range]
|
||||
[o.gamma_method() for o in y]
|
||||
|
||||
fit_result = fit_lin(x, y)
|
||||
|
||||
if kwargs.get('plot_fit'):
|
||||
plt.figure()
|
||||
gs = gridspec.GridSpec(2, 1, height_ratios=[3, 1], wspace=0.0, hspace=0.0)
|
||||
ax0 = plt.subplot(gs[0])
|
||||
xmore = list(t2E_dict.keys())[zero_crossing - fit_range - 2: zero_crossing + fit_range + 2]
|
||||
ymore = list(t2E_dict.values())[zero_crossing - fit_range - 2: zero_crossing + fit_range + 2]
|
||||
[o.gamma_method() for o in ymore]
|
||||
ax0.errorbar(xmore, [yi.value for yi in ymore], yerr=[yi.dvalue for yi in ymore], fmt='x')
|
||||
xplot = np.linspace(np.min(x), np.max(x))
|
||||
yplot = [fit_result[0] + fit_result[1] * xi for xi in xplot]
|
||||
[yi.gamma_method() for yi in yplot]
|
||||
ax0.fill_between(xplot, y1=[yi.value - yi.dvalue for yi in yplot], y2=[yi.value + yi.dvalue for yi in yplot])
|
||||
retval = (-fit_result[0] / fit_result[1])
|
||||
retval.gamma_method()
|
||||
ylim = ax0.get_ylim()
|
||||
ax0.fill_betweenx(ylim, x1=retval.value - retval.dvalue, x2=retval.value + retval.dvalue, color='gray', alpha=0.4)
|
||||
ax0.set_ylim(ylim)
|
||||
ax0.set_ylabel(r'$t^2 \langle E(t) \rangle - 0.3 $')
|
||||
xlim = ax0.get_xlim()
|
||||
|
||||
fit_res = [fit_result[0] + fit_result[1] * xi for xi in x]
|
||||
residuals = (np.asarray([o.value for o in y]) - [o.value for o in fit_res]) / np.asarray([o.dvalue for o in y])
|
||||
ax1 = plt.subplot(gs[1])
|
||||
ax1.plot(x, residuals, 'ko', ls='none', markersize=5)
|
||||
ax1.tick_params(direction='out')
|
||||
ax1.tick_params(axis="x", bottom=True, top=True, labelbottom=True)
|
||||
ax1.axhline(y=0.0, ls='--', color='k')
|
||||
ax1.fill_between(xlim, -1.0, 1.0, alpha=0.1, facecolor='k')
|
||||
ax1.set_xlim(xlim)
|
||||
ax1.set_ylabel('Residuals')
|
||||
ax1.set_xlabel(r'$t/a^2$')
|
||||
|
||||
plt.draw()
|
||||
return -fit_result[0] / fit_result[1]
|
||||
return fit_t0(t2E_dict, fit_range, plot_fit=kwargs.get('plot_fit'))
|
||||
|
||||
|
||||
def _parse_array_openQCD2(d, n, size, wa, quadrupel=False):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue