In [1]:
import nibabel as nb
import os
import numpy as np
import scipy.io as sio
import scipy.optimize
from Tkinter import Tk
from tkFileDialog import askdirectory
#import libtiff
import matplotlib.pyplot as plt
from Tkinter import Tk
from tkFileDialog import askopenfilename
#import cv2
%matplotlib inline
In [2]:
# from http://stackoverflow.com/questions/3579568/choosing-a-file-in-python-with-simple-dialog
from Tkinter import Tk
from tkFileDialog import askopenfilename
Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename)
Ua=sio.loadmat(filename)
Tvid=Ua['Time']
Tvid.shape
Out[2]:
Open the head saved as 32bit nii
In [3]:
# from http://stackoverflow.com/questions/3579568/choosing-a-file-in-python-with-simple-dialog
Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
filename2 = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename2)
img1 = nb.load(filename2)
data = img1.get_data()
S=data.shape
S
Out[3]:
In [4]:
# Find end of onset of light and begining of offset (to align to behavior)
In [5]:
M=np.mean(np.mean(data,0),0)
M=M-np.min(M)
Mav=M.mean()
M=M/Mav
In [6]:
M.shape
Out[6]:
In [7]:
plt.plot(M)
Out[7]:
In [8]:
liston=[i for i in range(len(M)) if M[i]>0.7]
#liston[0]
max(liston)
Out[8]:
In [9]:
def model(x,a,b,c,d):
if x<a:
return b
elif x<c:
return b+(x-a)*d
else:
return (c-a)*d+b
In [10]:
Ms=M[range(liston[0]-8,liston[0]+8)]-M[liston[0]-8]
In [11]:
def Sq(X):
return sum([(model(i,X[0],X[1],X[2],X[3])-Ms[i])**2 for i in range(len(Ms))])
In [12]:
liston[0]-8
Out[12]:
In [13]:
res = scipy.optimize.minimize(Sq,x0=[7.2,0.00,8.2,1.2])
In [14]:
ON=liston[0]-8+res.x[2]
print(ON)
In [15]:
ONint=np.int(np.ceil(ON))
print(ONint)
In [16]:
plt.plot(np.squeeze(Ms),'+')
plt.plot(np.arange(0,len(Ms),0.1),[model(i,res.x[0],res.x[1],res.x[2],res.x[3]) for i in np.arange(0,len(Ms),0.1)])
plt.show()
Model offset and find precise offset time
In [17]:
len(M)
Out[17]:
In [18]:
Ms=M[range(max(liston)-6,max(liston)+6)]
In [19]:
def Sq(X):
return sum([(model(i,X[0],X[1],X[2],X[3])-Ms[i])**2 for i in range(len(Ms))])
In [20]:
res = scipy.optimize.minimize(Sq,x0=[5.8,1.2,7.2,-1])
In [21]:
OFF=liston[len(liston)-1]-6+res.x[0]
#OFF=liston[len(liston)-1]
print(OFF)
OFFint=np.int(np.floor(OFF))
print(OFFint)
In [22]:
plt.plot(np.squeeze(Ms),'+')
plt.plot(np.arange(0,len(Ms),0.1),[model(i,res.x[0],res.x[1],res.x[2],res.x[3]) for i in np.arange(0,len(Ms),0.1)])
plt.show()
In imageJ: choose subsack between these 2 values
In [23]:
print(ONint+1)
print(OFFint+1)
print(ON)
print(OFF)
print(OFFint-ONint)
print(OFF-ON)
In [24]:
Tvid=Tvid.T
In [25]:
TimeOn=[Tvid[i] for i in range(ONint,(OFFint+1))]
In [26]:
Tinit=(ON-(ONint-1))*(Tvid[ONint]-Tvid[ONint-1])+Tvid[ONint-1]
In [27]:
Toff=(OFF-OFFint)*(Tvid[OFFint+1]-Tvid[OFFint])+Tvid[OFFint]
In [28]:
Toff-Tinit
Out[28]:
In [31]:
np.mean((Tvid[100:(len(Tvid))])-np.array(Tvid[99:(len(Tvid)-1)]))
Out[31]:
In [32]:
np.std((Tvid[100:(len(Tvid))])-np.array(Tvid[99:(len(Tvid)-1)]))
Out[32]:
In [33]:
#Ttest=np.array(Tvid.T[2:(len(Tvid.T))])-np.array(Tvid.T[1:(len(Tvid.T)-1)])
#plt.plot(Ttest)
#plt.axis([0,100,19.5,150])
In [34]:
TimeOnFinal=(np.array(TimeOn)-Tinit)/1000
In [35]:
np.max(TimeOnFinal)
Out[35]:
In [36]:
Fileout="".join(filename[i] for i in range(len(filename)-4))
In [37]:
OutFilename=Fileout+'OnVid.mat'
In [38]:
OutFilename
Out[38]:
In [39]:
sio.savemat(OutFilename, {'TimeFluoOnVid':TimeOnFinal,'ONint':ONint+1,'OFFint':OFFint+1})
In [ ]:
In [ ]: