def convert_to_firing_rate(self, calciumtraces): firingrate = [] denoisedcalicumtrace = [] for ii in xrange(0, np.size(calciumtraces, 1)): fluor = calciumtraces[:, ii] print 'Deconvolving..', ii deconvolvedresult = constrained_foopsi(fluor) print np.ndim(deconvolvedresult[5]) if np.ndim(deconvolvedresult[5]) > 1: print 'Skipping..Cell ', ii continue firingrate.append(deconvolvedresult[5]) denoisedcalicumtrace.append(deconvolvedresult[0]) firingrate = np.asarray(np.vstack(firingrate)).T denoisedcalicumtrace = np.asarray(np.vstack(denoisedcalicumtrace)).T np.savetxt(os.path.join(self.WorkingDirectory, key + "_denoiseddata.csv"), denoisedcalicumtrace, delimiter=",") np.savetxt(os.path.join(self.WorkingDirectory, key + "_firingrate.csv"), firingrate, delimiter=",") plt.plot(np.clip(firingrate, 0, np.max(firingrate)), '.') plt.savefig('/Users/seetha/Desktop/test1.png')
def convert_to_firing_rate(self): rawdatacsv_filenames = [f for f in os.listdir(os.path.join(self.WorkingDirectory, 'RawdataCSV')) if f.endswith('.csv')] for ff in rawdatacsv_filenames[2:]: print 'Deconvolving File...', ff calciumtraces = np.loadtxt(os.path.join(self.WorkingDirectory, 'RawdataCSV', ff), delimiter=",") print np.shape(calciumtraces) firingrate = [] denoisedcalicumtrace = [] cellsused = np.array([]) for ii in xrange(0, np.size(calciumtraces, 1)): fluor = calciumtraces[2:, ii] # First two rows are fish and plane number print 'Deconvolving..', ii try: deconvolvedresult = constrained_foopsi(fluor) except ZeroDivisionError: print 'Skipping..Cell ', ii continue except ValueError: print 'Skipping..Cell ', ii continue if np.ndim(deconvolvedresult[5]) > 1: print 'Skipping..Cell ', ii continue print np.ndim(deconvolvedresult[5]) cellsused = np.vstack((cellsused, ii)) if np.size(cellsused) else ii firingrate.append(deconvolvedresult[5]) denoisedcalicumtrace.append(deconvolvedresult[0]) firingrate = np.asarray(np.vstack(firingrate)).T firingrate = np.vstack((calciumtraces[1, cellsused].T, firingrate)) denoisedcalicumtrace = np.asarray(np.vstack(denoisedcalicumtrace)).T denoisedcalicumtrace = np.vstack((calciumtraces[1, cellsused].T, denoisedcalicumtrace)) np.savetxt(os.path.join(self.WorkingDirectory, 'DeconvolveddataCSV', ff[:-4] + "_denoiseddata.csv"), denoisedcalicumtrace, delimiter=",") np.savetxt(os.path.join(self.WorkingDirectory, 'DenoisedDataCSV', ff[:-4] + "_firingrate.csv"), firingrate, delimiter=",") plt.plot(np.clip(firingrate[2:, :], 0, np.max(firingrate[2:, :])), '.') plt.savefig(os.path.join(WorkingDirectory, 'Images', ff[:-4] + '.png'))
def update_temporal_components(Y, A, b, Cin, fin, ITER=1, method='constrained_foopsi', deconv_method='cvx', g='None', **kwargs): # b=None, # c1=None, # g=None, # sn=None, # p=2, # method='cvx', # bas_nonneg=True, # noise_range=[0.25, 0.5], # noise_method='logmexp', # lags=5, # resparse=0, # fudge_factor=1, # verbosity=False): # """ # update temporal components and background given spatial components # **kwargs: all parameters passed to constrained_foopsi # """ d, T = np.shape(Y) nr = np.shape(A)[-1] A = scipy.sparse.hstack((A, coo_matrix(b))) Cin = np.vstack((Cin, fin)) C = Cin #% nA = np.squeeze(np.array(np.sum(np.square(A.todense()), axis=0))) Y = np.matrix(Y) C = np.matrix(C) Cin = np.matrix(Cin) YrA = Y.T * A - Cin.T * (A.T * A) for iter in range(ITER): idxs = range(nr + 1) random.shuffle(idxs) P_ = [] # perm = randperm(nr+1) for jj, ii in enumerate(idxs): #ii=jj #print ii,jj pars = dict(kwargs) # ii = perm(jj); if ii < nr: if method == 'constrained_foopsi': #print YrA.shape #print YrA.shape YrA[:, ii] = YrA[:, ii] + nA[ii] * Cin[ii, :].T cc, cb, c1, gn, sn, _ = constrained_foopsi( np.squeeze(np.asarray(YrA[:, ii] / nA[ii])), method=deconv_method, **pars) #print pars pars['gn'] = gn gd = np.max(np.roots(np.hstack((1, -gn.T)))) # decay time constant for initial concentration gd_vec = gd**range(T) C[ii, :] = cc[:].T + cb + c1 * gd_vec YrA[:, ii] = YrA[:, ii] - np.matrix(nA[ii] * C[ii, :]).T pars['b'] = cb pars['c1'] = c1 pars['neuron_sn'] = sn pars['neuron_id'] = ii P_.append(pars) else: raise Exception('undefined method') else: YrA[:, ii] = YrA[:, ii] + nA[ii] * Cin[ii, :].T cc = np.maximum(YrA[:, ii] / nA[ii], 0) #C[ii,:] = full(cc'); YrA[:, ii] = YrA[:, ii] - nA[ii] * C[ii, :].T if jj % 10 == 0: print str(jj) + ' out of total ' + str( nr + 1) + ' temporal components updated \n' #%disp(norm(Fin(1:nr,:) - F,'fro')/norm(F,'fro')); if scipy.linalg.norm(Cin - C, 'fro') / scipy.linalg.norm( C, 'fro') <= 1e-3: # stop if the overall temporal component does not change by much break else: Cin = C Y_res = Y - A * C f = C[nr:, :] C = C[:nr, :] P_ = sorted(P_, key=lambda k: k['neuron_id']) return C, f, Y_res, P_
def update_temporal_components(Y,A,b,Cin,fin,ITER=1,method='constrained_foopsi',deconv_method = 'cvx', g='None',**kwargs): # b=None, # c1=None, # g=None, # sn=None, # p=2, # method='cvx', # bas_nonneg=True, # noise_range=[0.25, 0.5], # noise_method='logmexp', # lags=5, # resparse=0, # fudge_factor=1, # verbosity=False): # """ # update temporal components and background given spatial components # **kwargs: all parameters passed to constrained_foopsi # """ d,T = np.shape(Y); nr = np.shape(A)[-1] A = scipy.sparse.hstack((A,coo_matrix(b))) Cin = np.vstack((Cin,fin)); C = Cin; #% nA = np.squeeze(np.array(np.sum(np.square(A.todense()),axis=0))) Y=np.matrix(Y) C=np.matrix(C) Cin=np.matrix(Cin) YrA = Y.T*A - Cin.T*(A.T*A); for iter in range(ITER): idxs=range(nr+1) random.shuffle(idxs) P_=[]; # perm = randperm(nr+1) for jj,ii in enumerate(idxs): #ii=jj #print ii,jj pars=dict(kwargs) # ii = perm(jj); if ii<nr: if method == 'constrained_foopsi': #print YrA.shape #print YrA.shape YrA[:,ii] = YrA[:,ii] + nA[ii]*Cin[ii,:].T cc,cb,c1,gn,sn,_ = constrained_foopsi(np.squeeze(np.asarray(YrA[:,ii]/nA[ii])), method = deconv_method, **pars) #print pars pars['gn'] = gn gd = np.max(np.roots(np.hstack((1,-gn.T)))); # decay time constant for initial concentration gd_vec = gd**range(T) C[ii,:] = cc[:].T + cb + c1*gd_vec YrA[:,ii] = YrA[:,ii] - np.matrix(nA[ii]*C[ii,:]).T pars['b'] = cb pars['c1'] = c1 pars['neuron_sn'] = sn pars['neuron_id'] = ii P_.append(pars) else: raise Exception('undefined method') else: YrA[:,ii] = YrA[:,ii] + nA[ii]*Cin[ii,:].T cc = np.maximum(YrA[:,ii]/nA[ii],0) #C[ii,:] = full(cc'); YrA[:,ii] = YrA[:,ii] - nA[ii]*C[ii,:].T if jj%10 == 0: print str(jj) + ' out of total ' + str(nr+1) + ' temporal components updated \n' #%disp(norm(Fin(1:nr,:) - F,'fro')/norm(F,'fro')); if scipy.linalg.norm(Cin - C,'fro')/scipy.linalg.norm(C,'fro') <= 1e-3: # stop if the overall temporal component does not change by much break else: Cin = C Y_res = Y - A*C f = C[nr:,:] C = C[:nr,:] P_ = sorted(P_, key=lambda k: k['neuron_id']) return C,f,Y_res,P_