/
trace_extractor.py
59 lines (57 loc) · 2.6 KB
/
trace_extractor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python
import os
import scipy.io as sio
import matplotlib.pyplot as plt
import autograd.numpy as np
from oasis.functions import deconvolve
import pyute as ut
import analysis_template as at
import scipy.ndimage.filters as sfi
import scipy.stats as sst
import scipy.ndimage.measurements as snm
import scipy.optimize as sop
import naka_rushton_analysis as nra
import sim_utils
def gen_traces(datafiles,blcutoff=blcutoff,blspan=blspan): #nbefore=nbefore,nafter=nafter
trialwise = np.array(())
ctrialwise = np.array(())
strialwise = np.array(())
dfofall = np.array(())
baselineall = np.array(())
for datafile in datafiles:
frm = sio.loadmat(datafile.replace('.rois','.mat'),squeeze_me=True)['info']['frame'][()][1:]
with h5py.File(datafile,mode='r') as f:
to_add = f['corrected'][:].T
to_add[np.isnan(to_add)] = np.nanmin(to_add)
# baseline = np.percentile(to_add,blcutoff,axis=1)
baseline = sfi.percentile_filter(to_add[:,::ds],blcutoff,(1,int(blspan/ds)))
baseline = np.repeat(baseline,ds,axis=1)
for i in range(baseline.shape[0]):
baseline[i] = sfi.gaussian_filter1d(baseline[i],blspan/2)
# if baseline.shape[1]<to_add.shape[1]:
# baseline = np.hstack((baseline,np.repeat(baseline[:,-1],to_add.shape[1]-baseline.shape[1])))
if baseline.shape[1]>to_add.shape[1]:
baseline = baseline[:,:to_add.shape[1]]
c = np.zeros_like(to_add)
s = np.zeros_like(to_add)
dfof = np.zeros_like(to_add)
for i in range(c.shape[0]):
# dfof = (to_add[i]-baseline[i,np.newaxis])/baseline[i,np.newaxis]
dfof[i] = (to_add[i]-baseline[i,:])/(baseline[i,:])
#try:
c[i],s[i],_,_,_ = deconvolve(dfof[i].astype(np.float64),penalty=1,sn=5e-3)
#except:
# print("in "+datafile+" couldn't do "+str(i))
try:
trialwise = np.concatenate((trialwise,to_add),axis=0)
ctrialwise = np.concatenate((ctrialwise,c),axis=0)
strialwise = np.concatenate((strialwise,s),axis=0)
dfofall = np.concatenate((dfofall,dfof),axis=0)
baselineall = np.concatenate((baselineall,baseline),axis=0)
except:
trialwise = to_add.copy()
ctrialwise = c.copy()
strialwise = s.copy()
dfofall = dfof.copy()
baselineall = baseline.copy()
return trialwise,ctrialwise,strialwise,dfofall,baselineall