diff --git a/pyerrors/input/sfcf.py b/pyerrors/input/sfcf.py index 8feb8989..89cda7e1 100644 --- a/pyerrors/input/sfcf.py +++ b/pyerrors/input/sfcf.py @@ -130,7 +130,8 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l check_configs: list[list[int]] list of list of supposed configs, eg. [range(1,1000)] for one replicum with 1000 configs - + rep_string: str + Separator of ensemble name and replicum. Example: In "ensAr0", "r" would be the separator string. Returns ------- result: dict[list[Obs]] @@ -200,9 +201,9 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l else: ens_name = kwargs.get("ens_name") if not appended: - new_names = _get_rep_names(ls, ens_name) + new_names = _get_rep_names(ls, ens_name, rep_sep=(kwargs.get('rep_string', 'r'))) else: - new_names = _get_appended_rep_names(ls, prefix, name_list[0], ens_name) + new_names = _get_appended_rep_names(ls, prefix, name_list[0], ens_name, rep_sep=(kwargs.get('rep_string', 'r'))) new_names = sort_names(new_names) idl: list[list[int]] = [] @@ -649,22 +650,22 @@ def _read_append_rep(filename: str, pattern: str, b2b: bool, cfg_separator: str, return T, rep_idl, final_data -def _get_rep_names(ls: list[str], ens_name: None=None) -> list[str]: +def _get_rep_names(ls: list[str], ens_name: None=None, rep_sep: str ='r') -> list[str]: new_names = [] for entry in ls: try: - idx = entry.index('r') + idx = entry.index(rep_sep) except Exception: raise Exception("Automatic recognition of replicum failed, please enter the key word 'names'.") if ens_name: - new_names.append('ens_name' + '|' + entry[idx:]) + new_names.append(ens_name + '|' + entry[idx:]) else: new_names.append(entry[:idx] + '|' + entry[idx:]) return new_names -def _get_appended_rep_names(ls: list[str], prefix: str, name: str, ens_name: None=None) -> list[str]: +def _get_appended_rep_names(ls: list[str], prefix: str, name: str, ens_name: None=None, rep_sep: str ='r') -> list[str]: new_names = [] for exc in ls: if not fnmatch.fnmatch(exc, prefix + '*.' + name): @@ -673,12 +674,12 @@ def _get_appended_rep_names(ls: list[str], prefix: str, name: str, ens_name: Non for entry in ls: myentry = entry[:-len(name) - 1] try: - idx = myentry.index('r') + idx = myentry.index(rep_sep) except Exception: raise Exception("Automatic recognition of replicum failed, please enter the key word 'names'.") if ens_name: - new_names.append('ens_name' + '|' + entry[idx:]) + new_names.append(ens_name + '|' + entry[idx:]) else: new_names.append(myentry[:idx] + '|' + myentry[idx:]) return new_names diff --git a/tests/sfcf_in_test.py b/tests/sfcf_in_test.py index f92126f9..60a71433 100644 --- a/tests/sfcf_in_test.py +++ b/tests/sfcf_in_test.py @@ -387,3 +387,33 @@ def test_find_correlator(): found_start, found_T = sfin._find_correlator(file, "2.0", "name f_A\nquarks lquark lquark\noffset 0\nwf 0", False, False) assert found_start == 21 assert found_T == 3 + + +def test_get_rep_name(): + names = ['data_r0', 'data_r1', 'data_r2'] + new_names = sfin._get_rep_names(names) + assert len(new_names) == 3 + assert new_names[0] == 'data_|r0' + assert new_names[1] == 'data_|r1' + assert new_names[2] == 'data_|r2' + names = ['data_q0', 'data_q1', 'data_q2'] + new_names = sfin._get_rep_names(names, rep_sep='q') + assert len(new_names) == 3 + assert new_names[0] == 'data_|q0' + assert new_names[1] == 'data_|q1' + assert new_names[2] == 'data_|q2' + + +def test_get_appended_rep_name(): + names = ['data_r0.f_1', 'data_r1.f_1', 'data_r2.f_1'] + new_names = sfin._get_appended_rep_names(names, 'data', 'f_1') + assert len(new_names) == 3 + assert new_names[0] == 'data_|r0' + assert new_names[1] == 'data_|r1' + assert new_names[2] == 'data_|r2' + names = ['data_q0.f_1', 'data_q1.f_1', 'data_q2.f_1'] + new_names = sfin._get_appended_rep_names(names, 'data', 'f_1', rep_sep='q') + assert len(new_names) == 3 + assert new_names[0] == 'data_|q0' + assert new_names[1] == 'data_|q1' + assert new_names[2] == 'data_|q2'