forked from jgrewe/fishbook
baseline data should now work with frontend classes
This commit is contained in:
parent
c4bc3e064a
commit
d918373564
@ -1,14 +1,17 @@
|
|||||||
__package__ = "fishbook"
|
from fishbook.fishbook import Dataset, RePro
|
||||||
from fishbook.fishbook import Dataset
|
import numpy as np
|
||||||
|
import nixio as nix
|
||||||
|
import os
|
||||||
|
|
||||||
from IPython import embed
|
from IPython import embed
|
||||||
|
|
||||||
|
|
||||||
class BaselineData(object):
|
class BaselineData(object):
|
||||||
|
|
||||||
def __init__(self, dataset:Dataset):
|
def __init__(self, dataset:Dataset):
|
||||||
self.__data = []
|
self.__data = []
|
||||||
self.__dataset = dataset
|
self.__dataset = dataset
|
||||||
self.__cell = dataset.cells[0]
|
self.__cell = dataset.cells[0] # Beware: Assumption that there is only a single cell
|
||||||
self._get_data()
|
self._get_data()
|
||||||
|
|
||||||
def _get_data(self):
|
def _get_data(self):
|
||||||
@ -16,12 +19,12 @@ class BaselineData(object):
|
|||||||
self.__data = []
|
self.__data = []
|
||||||
self.__data = []
|
self.__data = []
|
||||||
|
|
||||||
repros = (Repros & self.__dataset & "repro_name like 'BaselineActivity%'")
|
repros = RePro.find_repros("BaselineActivity", cell_id=self.__cell.cell_id)
|
||||||
for r in repros:
|
for r in repros:
|
||||||
self.__data.append(self.__read_data(r))
|
self.__data.append(self.__read_data(r))
|
||||||
|
|
||||||
def __read_data(self, r:Repros):
|
def __read_data(self, r:RePro):
|
||||||
if self.__dataset["has_nix"]:
|
if self.__dataset.has_nix:
|
||||||
return self.__read_data_from_nix(r)
|
return self.__read_data_from_nix(r)
|
||||||
else:
|
else:
|
||||||
return self.__read_data_from_directory(r)
|
return self.__read_data_from_directory(r)
|
||||||
@ -30,7 +33,6 @@ class BaselineData(object):
|
|||||||
def dataset(self):
|
def dataset(self):
|
||||||
return self.__dataset
|
return self.__dataset
|
||||||
|
|
||||||
@property
|
|
||||||
def data(self, index:int=0):
|
def data(self, index:int=0):
|
||||||
return self.__data[0] if len(self.__data) >= index else None
|
return self.__data[0] if len(self.__data) >= index else None
|
||||||
|
|
||||||
@ -39,16 +41,16 @@ class BaselineData(object):
|
|||||||
return len(self.__data)
|
return len(self.__data)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
str = "Baseline data of %s " % self.__dataset
|
str = "Baseline data of cell %s " % self.__cell.cell_id
|
||||||
|
|
||||||
def __read_data_from_nix(self, r)->np.ndarray:
|
def __read_data_from_nix(self, r:RePro)->np.ndarray:
|
||||||
data_source = os.path.join(self.__dataset["data_source"], self.__dataset["dataset_id"] + ".nix")
|
data_source = os.path.join(self.__dataset.data_source, self.__dataset.dataset_id + ".nix")
|
||||||
if not os.path.exists(data_source):
|
if not os.path.exists(data_source):
|
||||||
print("Data not found! Trying from folder")
|
print("Data not found! Trying from directory")
|
||||||
return self.__read_data_from_directory(r)
|
return self.__read_data_from_directory(r)
|
||||||
f = nix.File.open(data_source, nix.FileMode.ReadOnly)
|
f = nix.File.open(data_source, nix.FileMode.ReadOnly)
|
||||||
b = f.blocks[0]
|
b = f.blocks[0]
|
||||||
t = b.tags[r["repro_id"]]
|
t = b.tags[r.repro_id]
|
||||||
if not t:
|
if not t:
|
||||||
print("Tag not found!")
|
print("Tag not found!")
|
||||||
data = t.retrieve_data("Spikes-1")[:]
|
data = t.retrieve_data("Spikes-1")[:]
|
||||||
@ -57,7 +59,7 @@ class BaselineData(object):
|
|||||||
|
|
||||||
def __read_data_from_directory(self, r)->np.ndarray:
|
def __read_data_from_directory(self, r)->np.ndarray:
|
||||||
data = []
|
data = []
|
||||||
data_source = os.path.join(self.__dataset["data_source"], "basespikes1.dat")
|
data_source = os.path.join(self.__dataset.data_source, "basespikes1.dat")
|
||||||
if os.path.exists(data_source):
|
if os.path.exists(data_source):
|
||||||
found_run = False
|
found_run = False
|
||||||
with open(data_source, 'r') as f:
|
with open(data_source, 'r') as f:
|
||||||
@ -65,11 +67,12 @@ class BaselineData(object):
|
|||||||
while l:
|
while l:
|
||||||
if "index" in l:
|
if "index" in l:
|
||||||
index = int(l.strip("#").strip().split(":")[-1])
|
index = int(l.strip("#").strip().split(":")[-1])
|
||||||
found_run = index == r["run"]
|
found_run = index == r.run
|
||||||
if l.startswith("#Key") and found_run:
|
if l.startswith("#Key") and found_run:
|
||||||
data = self.__do_read(f)
|
data = self.__do_read(f)
|
||||||
break
|
break
|
||||||
l = f.readline()
|
l = f.readline()
|
||||||
|
embed()
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def __do_read(self, f)->np.ndarray:
|
def __do_read(self, f)->np.ndarray:
|
||||||
@ -83,11 +86,8 @@ class BaselineData(object):
|
|||||||
return np.asarray(data)
|
return np.asarray(data)
|
||||||
|
|
||||||
|
|
||||||
#if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("Test")
|
dataset = Dataset(dataset_id='2011-06-14-ag')
|
||||||
embed()
|
# dataset = Dataset(dataset_id='2018-11-09-aa-invivo-1')
|
||||||
exit()
|
baseline = BaselineData(dataset)
|
||||||
|
embed()
|
||||||
dataset = Dataset(tuple=(Datasets & "dataset_id like '2018-11-09-aa-%'").fetch(limit=1, as_dict=True))
|
|
||||||
baseline = BaselineData(dataset)
|
|
||||||
embed()
|
|
Loading…
Reference in New Issue
Block a user