From 34f004474937e35841efd14b0cbccae17897cc04 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Fri, 14 Aug 2020 17:17:13 +0200 Subject: [PATCH 1/2] [backend/util] fixing time conversions --- fishbook/frontend/util.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/fishbook/frontend/util.py b/fishbook/frontend/util.py index b8e2665..234dee0 100644 --- a/fishbook/frontend/util.py +++ b/fishbook/frontend/util.py @@ -207,7 +207,16 @@ class StimSpikesFile: for l in lines: l = l.strip() if "duration:" in l: - trial_duration = float(l[1:].strip().split(":")[-1][:-3]) + trial_duration = l[1:].strip().split(":")[-1].strip() + if "sec" in trial_duration: + trial_duration = float(trial_duration[:-3]) + elif "ms" in trial_duration: + trial_duration = float(trial_duration[:-2]) / 1000 + elif trial_duration[-1] == 's': + trial_duration = float(trial_duration[:1]) + else: + trial_duration = 0.0 + print(l, trial_duration) if "index:" in l: if len(trial_data) > 0: index_map[(index, trial)] = (trial_duration, trial_data) From 6e2bfde2dc545fece1aeb3c2280ce131362124f4 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Fri, 14 Aug 2020 17:19:02 +0200 Subject: [PATCH 2/2] [database] fix repro run counter ... sometimes repros do not put out stimuli for whatever reason. They are noted in the stimuli.dat but not e.g. in the stimspikes.dat. This leads to conflicts when fetching the data... --- fishbook/backend/database.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/fishbook/backend/database.py b/fishbook/backend/database.py index 592caca..f642af9 100644 --- a/fishbook/backend/database.py +++ b/fishbook/backend/database.py @@ -453,7 +453,9 @@ def scan_nix_file_for_repros(dataset): def scan_folder_for_repros(dataset): print("\t\tNo nix-file, scanning directory!") repro_settings, stim_indices = read_stimuli_file(dataset["data_source"]) - repro_counts = {} + repro_counts = {} # internal counter for repro runs, for cases in which the repro does not have a run counter + repros_skipped = {} # internal counter to correct the run counter for repro runs in which no stimulus was put out, needed to align e.g. with stimspikes file + repros_without_stims = ["baselineactivity"] cell_id = (Cells * CellDatasetMap * (Datasets & "dataset_id = '%s'" % dataset["dataset_id"])).fetch("cell_id", limit=1)[0] for rs, si in zip(repro_settings, stim_indices): rp = Repros.get_template_tuple() @@ -463,20 +465,26 @@ def scan_folder_for_repros(dataset): find_key_recursive(rs, "RePro", path) rp["repro_name"] = deep_get(rs, path, "None") + if rp["repro_name"] not in repros_skipped.keys(): + repros_skipped[rp["repro_name"]] = 0 + + if rp["repro_name"].lower() not in repros_without_stims and len(si) == 0: + repros_skipped[rp["repro_name"]] += 1 + continue + path = [] if rp["repro_name"] in repro_counts.keys(): repro_counts[rp["repro_name"]] += 1 else: repro_counts[rp["repro_name"]] = 0 - path = [] if not find_key_recursive(rs, "run", path): find_key_recursive(rs, "Run", path) if len(path) > 0: - rp["run"] = deep_get(rs, path, 0) + rp["run"] = int(deep_get(rs, path, 0)) - repros_skipped[rp["repro_name"]] else: # the run information is not there and needs to be fixed! - rp["run"] = repro_counts[rp["repro_name"]] - + rp["run"] = repro_counts[rp["repro_name"]] - repros_skipped[rp["repro_name"]] + rp["cell_id"] = cell_id rp["repro_id"] = rp["repro_name"] + str(repro_counts[rp["repro_name"]]) rp["start"] = 0. @@ -501,8 +509,10 @@ def scan_folder_for_repros(dataset): find_key_recursive(rs, "Duration", path) if len(path) > 0 : stim_duration = deep_get(rs, path, None) - if "ms" in stim_duration: - stim_duration = float(stim_duration[:stim_duration.index("ms")]) + if "sec" in stim_duration: + stim_duration = float(stim_duration[:stim_duration.index("sec")]) + elif "ms" in stim_duration: + stim_duration = float(stim_duration[:stim_duration.index("ms")]) / 1000 else: stim_duration = float(stim_duration[:stim_duration.index("s")]) else: