### Analysis of DG network data ### # This Python code creates a scatter plot of output vs input sim scores. # Enter the idname # ModelDB file along with publication: # Yim MY, Hanuschkin A, Wolfart J (2015) Hippocampus 25:297-308. # http://onlinelibrary.wiley.com/doi/10.1002/hipo.22373/abstract # modified and augmented by # Man Yi Yim / 2015 # Alexander Hanuschkin / 2011 import pylab import numpy import matplotlib as mpl font_size = 12 # 20 mpl.rcParams['axes.titlesize'] = font_size+10 mpl.rcParams['xtick.labelsize'] = font_size+6 mpl.rcParams['ytick.labelsize'] = font_size+6 mpl.rcParams['axes.labelsize'] = font_size+8 mpl.rcParams['legend.fontsize'] = font_size mpl.rcParams['font.size'] = font_size+10 sid = 0 sidm = 12 nid = 6 step = 2 delta = numpy.array([20])/2. dur = 200. # duration of the simulation bin = 1. ninput = 100 # number of input sources ncell = 500 # number of neurons (GCs) #idname ='-pp10-gaba1-kir1-st0' def corr_score(file1,file2,delta,bin=1.,dur=100.,ncell=500): """Similarity score by correlation coefficient. The spike trains are convolved with a triangular kernel.""" d1 = numpy.loadtxt(file1) d2 = numpy.loadtxt(file2) x = numpy.zeros(int(ncell*dur/bin)) y = numpy.zeros(int(ncell*dur/bin)) for j in range(ncell): if d1.size == 2: s1 = numpy.array(d1[0]*(d1[1]==j)) else: s1 = d1[d1[:,1]==j,0] if d2.size == 2: s2 = numpy.array(d2[0]*(d2[1]==j)) else: s2 = d2[d2[:,1]==j,0] kern = numpy.append(numpy.arange(delta/bin),numpy.arange(delta/bin,-1,-1)) ts1,dump = pylab.histogram(s1,numpy.arange(0.,dur+bin,bin)) ts2,dump = pylab.histogram(s2,numpy.arange(0.,dur+bin,bin)) x[j*dur/bin:(j+1)*dur/bin] = numpy.convolve(ts1,kern,'same') y[j*dur/bin:(j+1)*dur/bin] = numpy.convolve(ts2,kern,'same') x = x - pylab.mean(x) y = y - pylab.mean(y) cor = sum(x*y)/(len(x)*pylab.std(x)*pylab.std(y)) return cor pylab.figure() fin1 = 'StimIn-'+str(sid)+'-'+str(nid)+idname+'.txt' fout1 = 'GCsp-'+str(sid)+'-'+str(nid)+idname+'.txt' inscore = numpy.empty((delta.size,sidm*(sidm+1)/2+1)) outscore = numpy.empty((delta.size,sidm*(sidm+1)/2+1)) for k in range(delta.size): inscore[k,0] = corr_score(fin1,fin1,delta[k],bin,dur,ninput) outscore[k,0] = corr_score(fout1,fout1,delta[k],bin,dur,ncell) count = 1 for j in range(0,sidm): fin1 = 'StimIn-'+str(j)+'-'+str(nid)+idname+'.txt' fout1 = 'GCsp-'+str(j)+'-'+str(nid)+idname+'.txt' for m in range(j+1,sidm+1): fin2 = 'StimIn-'+str(m)+'-'+str(nid)+idname+'.txt' fout2 = 'GCsp-'+str(m)+'-'+str(nid)+idname+'.txt' for k in range(delta.size): inscore[k,count] = corr_score(fin1,fin2,delta[k],bin,dur,ninput) outscore[k,count] = corr_score(fout1,fout2,delta[k],bin,dur,ncell) count += 1 for k in range(delta.size): pylab.plot(inscore[k,:],outscore[k,:],'ko',label='width='+str(2*delta[k])) pylab.plot([0,1],[0,1],'k--',linewidth=2) pylab.axis([-0.05,1.05,-0.05,1.05]) pylab.xlabel('Input similarity score') pylab.ylabel('Output similarity score') pylab.savefig('sim_score_'+idname+'.eps') f_write = open('sim_score'+idname+'.txt','w') for j in range(inscore.size): f_write.write(str(inscore[0][j])+'\t'+str(outscore[0][j])+'\n') f_write.close() pylab.show()