mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-16 12:33:41 +02:00
Merge branch 'develop' into feature/covobs
This commit is contained in:
commit
0e75cf48bc
2 changed files with 92 additions and 27 deletions
|
@ -63,7 +63,7 @@ def read_meson_hd5(path, filestem, ens_id, meson='meson_0', tree='meson', idl=No
|
||||||
for outputs of the Meson module. Can be altered to read input
|
for outputs of the Meson module. Can be altered to read input
|
||||||
from other modules with similar structures.
|
from other modules with similar structures.
|
||||||
idl : range
|
idl : range
|
||||||
If specified only conifgurations in the given range are read in.
|
If specified only configurations in the given range are read in.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
files, idx = _get_files(path, filestem, idl)
|
files, idx = _get_files(path, filestem, idl)
|
||||||
|
@ -134,12 +134,15 @@ def read_ExternalLeg_hd5(path, filestem, ens_id, idl=None):
|
||||||
"""Read hadrons ExternalLeg hdf5 file and output an array of CObs
|
"""Read hadrons ExternalLeg hdf5 file and output an array of CObs
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
-----------------
|
----------
|
||||||
path -- path to the files to read
|
path : str
|
||||||
filestem -- namestem of the files to read
|
path to the files to read
|
||||||
ens_id -- name of the ensemble, required for internal bookkeeping
|
filestem : str
|
||||||
|
namestem of the files to read
|
||||||
|
ens_id : str
|
||||||
|
name of the ensemble, required for internal bookkeeping
|
||||||
idl : range
|
idl : range
|
||||||
If specified only conifgurations in the given range are read in.
|
If specified only configurations in the given range are read in.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
files, idx = _get_files(path, filestem, idl)
|
files, idx = _get_files(path, filestem, idl)
|
||||||
|
@ -171,12 +174,15 @@ def read_Bilinear_hd5(path, filestem, ens_id, idl=None):
|
||||||
"""Read hadrons Bilinear hdf5 file and output an array of CObs
|
"""Read hadrons Bilinear hdf5 file and output an array of CObs
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
-----------------
|
----------
|
||||||
path -- path to the files to read
|
path : str
|
||||||
filestem -- namestem of the files to read
|
path to the files to read
|
||||||
ens_id -- name of the ensemble, required for internal bookkeeping
|
filestem : str
|
||||||
|
namestem of the files to read
|
||||||
|
ens_id : str
|
||||||
|
name of the ensemble, required for internal bookkeeping
|
||||||
idl : range
|
idl : range
|
||||||
If specified only conifgurations in the given range are read in.
|
If specified only configurations in the given range are read in.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
files, idx = _get_files(path, filestem, idl)
|
files, idx = _get_files(path, filestem, idl)
|
||||||
|
@ -216,3 +222,62 @@ def read_Bilinear_hd5(path, filestem, ens_id, idl=None):
|
||||||
result_dict[key] = Npr_matrix(matrix.swapaxes(1, 2).reshape((12, 12), order='F'), mom_in=mom_in, mom_out=mom_out)
|
result_dict[key] = Npr_matrix(matrix.swapaxes(1, 2).reshape((12, 12), order='F'), mom_in=mom_in, mom_out=mom_out)
|
||||||
|
|
||||||
return result_dict
|
return result_dict
|
||||||
|
|
||||||
|
|
||||||
|
def read_Fourquark_hd5(path, filestem, ens_id, idl=None):
|
||||||
|
"""Read hadrons FourquarkFullyConnected hdf5 file and output an array of CObs
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
path : str
|
||||||
|
path to the files to read
|
||||||
|
filestem : str
|
||||||
|
namestem of the files to read
|
||||||
|
ens_id : str
|
||||||
|
name of the ensemble, required for internal bookkeeping
|
||||||
|
idl : range
|
||||||
|
If specified only configurations in the given range are read in.
|
||||||
|
"""
|
||||||
|
|
||||||
|
files, idx = _get_files(path, filestem, idl)
|
||||||
|
|
||||||
|
mom_in = None
|
||||||
|
mom_out = None
|
||||||
|
|
||||||
|
corr_data = {}
|
||||||
|
|
||||||
|
tree = 'FourQuarkFullyConnected/FourQuarkFullyConnected_'
|
||||||
|
|
||||||
|
for hd5_file in files:
|
||||||
|
file = h5py.File(path + '/' + hd5_file, "r")
|
||||||
|
|
||||||
|
for i in range(1):
|
||||||
|
name = file[tree + str(i) + '/info'].attrs['gammaA'][0].decode('UTF-8') + '_' + file[tree + str(i) + '/info'].attrs['gammaB'][0].decode('UTF-8')
|
||||||
|
if name not in corr_data:
|
||||||
|
corr_data[name] = []
|
||||||
|
raw_data = file[tree + str(i) + '/corr'][0][0].view('complex')
|
||||||
|
corr_data[name].append(raw_data)
|
||||||
|
if mom_in is None:
|
||||||
|
mom_in = np.array(str(file[tree + str(i) + '/info'].attrs['pIn'])[3:-2].strip().split(' '), dtype=int)
|
||||||
|
if mom_out is None:
|
||||||
|
mom_out = np.array(str(file[tree + str(i) + '/info'].attrs['pOut'])[3:-2].strip().split(' '), dtype=int)
|
||||||
|
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
result_dict = {}
|
||||||
|
|
||||||
|
for key, data in corr_data.items():
|
||||||
|
local_data = np.array(data)
|
||||||
|
|
||||||
|
rolled_array = np.moveaxis(local_data, 0, 8)
|
||||||
|
|
||||||
|
matrix = np.empty((rolled_array.shape[:-1]), dtype=object)
|
||||||
|
for index in np.ndindex(rolled_array.shape[:-1]):
|
||||||
|
real = Obs([rolled_array[index].real], [ens_id], idl=[idx])
|
||||||
|
imag = Obs([rolled_array[index].imag], [ens_id], idl=[idx])
|
||||||
|
matrix[index] = CObs(real, imag)
|
||||||
|
|
||||||
|
result_dict[key] = Npr_matrix(matrix, mom_in=mom_in, mom_out=mom_out)
|
||||||
|
# result_dict[key] = Npr_matrix(matrix.swapaxes(1, 2).reshape((12, 12), order='F'), mom_in=mom_in, mom_out=mom_out)
|
||||||
|
|
||||||
|
return result_dict
|
||||||
|
|
|
@ -186,49 +186,49 @@ def jack_matmul(*operands):
|
||||||
For large matrices this is considerably faster compared to matmul.
|
For large matrices this is considerably faster compared to matmul.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if any(isinstance(o[0, 0], CObs) for o in operands):
|
if any(isinstance(o.flat[0], CObs) for o in operands):
|
||||||
name = operands[0][0, 0].real.names[0]
|
name = operands[0].flat[0].real.names[0]
|
||||||
idl = operands[0][0, 0].real.idl[name]
|
idl = operands[0].flat[0].real.idl[name]
|
||||||
|
|
||||||
def _exp_to_jack(matrix):
|
def _exp_to_jack(matrix):
|
||||||
base_matrix = np.empty_like(matrix)
|
base_matrix = np.empty_like(matrix)
|
||||||
for (n, m), entry in np.ndenumerate(matrix):
|
for index, entry in np.ndenumerate(matrix):
|
||||||
base_matrix[n, m] = entry.real.export_jackknife() + 1j * entry.imag.export_jackknife()
|
base_matrix[index] = entry.real.export_jackknife() + 1j * entry.imag.export_jackknife()
|
||||||
return base_matrix
|
return base_matrix
|
||||||
|
|
||||||
def _imp_from_jack(matrix):
|
def _imp_from_jack(matrix):
|
||||||
base_matrix = np.empty_like(matrix)
|
base_matrix = np.empty_like(matrix)
|
||||||
for (n, m), entry in np.ndenumerate(matrix):
|
for index, entry in np.ndenumerate(matrix):
|
||||||
base_matrix[n, m] = CObs(import_jackknife(entry.real, name, [idl]),
|
base_matrix[index] = CObs(import_jackknife(entry.real, name, [idl]),
|
||||||
import_jackknife(entry.imag, name, [idl]))
|
import_jackknife(entry.imag, name, [idl]))
|
||||||
return base_matrix
|
return base_matrix
|
||||||
|
|
||||||
r = _exp_to_jack(operands[0])
|
r = _exp_to_jack(operands[0])
|
||||||
for op in operands[1:]:
|
for op in operands[1:]:
|
||||||
if isinstance(op[0, 0], CObs):
|
if isinstance(op.flat[0], CObs):
|
||||||
r = r @ _exp_to_jack(op)
|
r = r @ _exp_to_jack(op)
|
||||||
else:
|
else:
|
||||||
r = r @ op
|
r = r @ op
|
||||||
return _imp_from_jack(r)
|
return _imp_from_jack(r)
|
||||||
else:
|
else:
|
||||||
name = operands[0][0, 0].names[0]
|
name = operands[0].flat[0].names[0]
|
||||||
idl = operands[0][0, 0].idl[name]
|
idl = operands[0].flat[0].idl[name]
|
||||||
|
|
||||||
def _exp_to_jack(matrix):
|
def _exp_to_jack(matrix):
|
||||||
base_matrix = np.empty_like(matrix)
|
base_matrix = np.empty_like(matrix)
|
||||||
for (n, m), entry in np.ndenumerate(matrix):
|
for index, entry in np.ndenumerate(matrix):
|
||||||
base_matrix[n, m] = entry.export_jackknife()
|
base_matrix[index] = entry.export_jackknife()
|
||||||
return base_matrix
|
return base_matrix
|
||||||
|
|
||||||
def _imp_from_jack(matrix):
|
def _imp_from_jack(matrix):
|
||||||
base_matrix = np.empty_like(matrix)
|
base_matrix = np.empty_like(matrix)
|
||||||
for (n, m), entry in np.ndenumerate(matrix):
|
for index, entry in np.ndenumerate(matrix):
|
||||||
base_matrix[n, m] = import_jackknife(entry, name, [idl])
|
base_matrix[index] = import_jackknife(entry, name, [idl])
|
||||||
return base_matrix
|
return base_matrix
|
||||||
|
|
||||||
r = _exp_to_jack(operands[0])
|
r = _exp_to_jack(operands[0])
|
||||||
for op in operands[1:]:
|
for op in operands[1:]:
|
||||||
if isinstance(op[0, 0], Obs):
|
if isinstance(op.flat[0], Obs):
|
||||||
r = r @ _exp_to_jack(op)
|
r = r @ _exp_to_jack(op)
|
||||||
else:
|
else:
|
||||||
r = r @ op
|
r = r @ op
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue