From 8b3abebd5d1bcf71c5b98a32f084226ae42ecee7 Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 26 Jul 2020 19:08:35 +0800 Subject: [PATCH 1/8] Add support for sessioneye as a valid session name --- DataProcessingTools/levels.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/DataProcessingTools/levels.py b/DataProcessingTools/levels.py index 3e5e5da..2b990ff 100644 --- a/DataProcessingTools/levels.py +++ b/DataProcessingTools/levels.py @@ -3,7 +3,7 @@ import re levels = ['subjects', 'subject', 'day', 'session', 'array', 'channel','cell'] -level_patterns_s = ["*", "*", "[0-9]*", "session[0-9]*", "array[0-9]*", "channel[0-9]*", "cell[0-9]*"] +level_patterns_s = ["([a-zA-Z]+)", "([a-zA-Z]+)", "([0-9]+)", "(session)([a-z0-9]+)", "(array)([0-9]+)", "(channel)([0-9]+)", "(cell)([0-9]+)"] def get_numbers(ss): return "".join(filter(str.isdigit, ss)) @@ -27,13 +27,17 @@ def level(cwd=None): """ Return the level corresponding to the folder `cwd`. """ - pp = cwd.split(os.sep)[-1] + leaf = cwd.split(os.sep)[-1] ll = '' - if pp.isdigit(): + if leaf.isdigit(): ll = 'day' else: - numstr = [str(i) for i in range(10)] - ll = pp.strip(''.join(numstr)) + for pattern in level_patterns_s[::-1]: + pp = re.compile(pattern) + m = pp.match(leaf) + if m is not None: + ll = m.groups()[0] + break return ll From 3d225275ae0793b92e3617686603794f34561c1a Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 26 Jul 2020 19:08:51 +0800 Subject: [PATCH 2/8] Adds test for sessioneye --- tests/test_levels.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_levels.py b/tests/test_levels.py index 9f0859c..8260b9f 100644 --- a/tests/test_levels.py +++ b/tests/test_levels.py @@ -4,6 +4,9 @@ def test_level(): + ll = DPT.level("sessioneye") + assert ll == "session" + cwd = "Pancake/20130923/session01/array02/channel033" ll = DPT.levels.level(cwd) assert ll == "channel" From 45b8b60ded55c7ccb6ec2d7356da1c3dc72518a7 Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 26 Jul 2020 19:11:51 +0800 Subject: [PATCH 3/8] Fixes test --- tests/test_levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_levels.py b/tests/test_levels.py index 8260b9f..be0a877 100644 --- a/tests/test_levels.py +++ b/tests/test_levels.py @@ -4,7 +4,7 @@ def test_level(): - ll = DPT.level("sessioneye") + ll = DPT.levels.level("sessioneye") assert ll == "session" cwd = "Pancake/20130923/session01/array02/channel033" From b98fddd9b33db7b8ee023bbccbc08bf0dcb1795f Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 26 Jul 2020 19:31:10 +0800 Subject: [PATCH 4/8] Fixes get_shortname to work with non-numeric IDs --- DataProcessingTools/levels.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/DataProcessingTools/levels.py b/DataProcessingTools/levels.py index 2b990ff..866c182 100644 --- a/DataProcessingTools/levels.py +++ b/DataProcessingTools/levels.py @@ -5,16 +5,23 @@ levels = ['subjects', 'subject', 'day', 'session', 'array', 'channel','cell'] level_patterns_s = ["([a-zA-Z]+)", "([a-zA-Z]+)", "([0-9]+)", "(session)([a-z0-9]+)", "(array)([0-9]+)", "(channel)([0-9]+)", "(cell)([0-9]+)"] + def get_numbers(ss): return "".join(filter(str.isdigit, ss)) + +def get_id(ss): + ll = level(ss) + return ss.replace(ll, "") + + shortnames = {"subjects": lambda x: "", "subject": lambda x: x[0], "day": lambda x: x, - "session": lambda x: "s{0}".format(get_numbers(x)), - "array": lambda x: "a{0}".format(get_numbers(x)), - "channel": lambda x: "g{0}".format(get_numbers(x)), - "cell": lambda x: "c{0}".format(get_numbers(x))} + "session": lambda x: "s{0}".format(get_id(x)), + "array": lambda x: "a{0}".format(get_id(x)), + "channel": lambda x: "g{0}".format(get_id(x)), + "cell": lambda x: "c{0}".format(get_id(x))} def get_shortname(level, cwd =None): From ff64bfcc8a06bccfbc3d8c11444eb3b4f1c7f0e8 Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 26 Jul 2020 19:31:22 +0800 Subject: [PATCH 5/8] Fixes globbing with new patterns --- DataProcessingTools/levels.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DataProcessingTools/levels.py b/DataProcessingTools/levels.py index 866c182..1ad5197 100644 --- a/DataProcessingTools/levels.py +++ b/DataProcessingTools/levels.py @@ -86,16 +86,17 @@ def get_level_dirs(target_level, cwd=None): dirs.append(os.path.join(dpath, _dnames)) dirs.sort() return dirs - if target_idx == this_idx: dirs = [os.path.join(cwd, ".")] elif target_idx < this_idx: rel_path = resolve_level(target_level, cwd) pattern = level_patterns_s[target_idx] + pattern = pattern.replace("(", "").replace(")", "").replace("+", "*") gpattern = os.path.join(cwd, rel_path, "..", pattern) dirs = sorted(glob.glob(gpattern)) else: patterns = level_patterns_s[this_idx+1:target_idx+1] + patterns = [pattern.replace("(", "").replace(")", "").replace("+", "*") for pattern in patterns] dirs = sorted(glob.glob(os.path.join(cwd, *patterns))) return dirs From 410fb638338a637e6cfa78c944b39120325f1df7 Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 26 Jul 2020 19:31:41 +0800 Subject: [PATCH 6/8] Bumps version number --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9dbaa85..90a6440 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup setup(name="DataProcessingTools", - version="0.11.0", + version="0.12.0", description="""Tools for processing data with hierarchical organization""", url="https://github.com/grero/DataProcessingTools.git", author="Roger Herikstad", From ec2e7adb0a5d4527f160fc21ab06685946736980 Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 26 Jul 2020 19:33:09 +0800 Subject: [PATCH 7/8] Adds test for non-numeric shortname --- tests/test_levels.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_levels.py b/tests/test_levels.py index be0a877..dcc4846 100644 --- a/tests/test_levels.py +++ b/tests/test_levels.py @@ -71,3 +71,6 @@ def test_shortnames(): npth = DPT.levels.normpath(pth) assert npth == "Pancake/20230923/session01" + aa = DPT.levels.get_shortname("session", "sessioneye") + assert aa == "seye" + From c763c8cdb9514f1b0b3b4523e8d7861a8f588609 Mon Sep 17 00:00:00 2001 From: roger Date: Sun, 26 Jul 2020 19:41:43 +0800 Subject: [PATCH 8/8] Adds a separate test for get_numbers so that it remains covered --- tests/test_levels.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_levels.py b/tests/test_levels.py index dcc4846..1f60ac4 100644 --- a/tests/test_levels.py +++ b/tests/test_levels.py @@ -74,3 +74,5 @@ def test_shortnames(): aa = DPT.levels.get_shortname("session", "sessioneye") assert aa == "seye" + aa = DPT.levels.get_numbers("session01") + assert aa == "01"