From 979eae48afb4500948bde084208c592ec97a1a88 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Mon, 16 Sep 2019 19:55:12 +0200 Subject: [PATCH] rename --- baseline_data.py | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 baseline_data.py diff --git a/baseline_data.py b/baseline_data.py new file mode 100644 index 0000000..5106df9 --- /dev/null +++ b/baseline_data.py @@ -0,0 +1,94 @@ +import datajoint as dj +import nixio as nix +import os +import numpy as np +from IPython import embed +from database import Dataset, Repro +schema = dj.schema("fish_book", locals()) + + +class BaselineData(object): + + def __init__(self, dataset:Dataset): + self.__data = [] + self.__dataset = dataset + self._get_data() + + + def _get_data(self): + if not self.__dataset: + self.__data = [] + self.__data = [] + + repros = (Repro & self.__dataset & "repro_name like 'BaselineActivity%'") + for r in repros: + self.__data.append(self.__read_data(r)) + + def __read_data(self, r:Repro): + if self.__dataset["has_nix"]: + return self.__read_data_from_nix(r) + else: + return self.__read_data_from_directory(r) + + @property + def dataset(self): + return self.__dataset + + @property + def data(self, index:int=0): + return self.__data[0] if len(self.__data) >= index else None + + @property + def size(self): + return len(self.__data) + + def __str__(self): + str = "Baseline data of %s " % self.__dataset + + def __read_data_from_nix(self, r)->np.ndarray: + data_source = os.path.join(self.__dataset["data_source"], self.__dataset["dataset_id"] + ".nix") + if not os.path.exists(data_source): + print("Data not found! Trying from folder") + return self.__read_data_from_directory(r) + f = nix.File.open(data_source, nix.FileMode.ReadOnly) + b = f.blocks[0] + t = b.tags[r["repro_id"]] + if not t: + print("Tag not found!") + data = t.retrieve_data("Spikes-1")[:] + f.close() + return data + + def __read_data_from_directory(self, r)->np.ndarray: + data = [] + data_source = os.path.join(self.__dataset["data_source"], "basespikes1.dat") + if os.path.exists(data_source): + found_run = False + with open(data_source, 'r') as f: + l = f.readline() + while l: + if "index" in l: + index = int(l.strip("#").strip().split(":")[-1]) + found_run = index == r["run"] + if l.startswith("#Key") and found_run: + data = self.__do_read(f) + break + l = f.readline() + return data + + def __do_read(self, f)->np.ndarray: + data = [] + f.readline() + f.readline() + l = f.readline() + while l and "#" not in l and len(l.strip()) > 0: + data.append(float(l.strip())) + l = f.readline() + return np.asarray(data) + + +if __name__ == "__main__": + print("Test") + dataset = Dataset & "dataset_id like '2018-11-09-aa-%' " + baseline = BaselineData(dataset.fetch1()) + embed() \ No newline at end of file