### Analysis of DG network data ### # This Python code extracts and plots the inputs to a selected GC. # Enter the idname and cellID # 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 in the figure 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 # Parameters tstop = 200 # duration of the simulation to be analysed is_all_Vt = 1 # 1 if the dgvtfile contains all GCs cellID = 8 npp = 100 # number of PP inputs sid = 0 # PP_box_start_ nid = 6 # number of active PPs #idname = "-pp10-gaba1-kir1-st0" print 'duration = ' + str(tstop) print 'npp = ' + str(npp) print 'idname = ' + idname # Import data stiminfile = 'StimIn-'+str(sid)+'-'+str(nid)+idname+'.txt' dgspfile = 'DGsp-'+str(sid)+'-'+str(nid)+idname+'.txt' dgvtfile = 'DGVt-'+str(sid)+'-'+str(nid)+idname+'.txt' con_file = 'DGNC-'+str(sid)+'-'+str(nid)+idname+'.txt' con_file_id = 'id_DGNC.txt' f2 = open(stiminfile,'r') if f2.readline() == '': stimin = numpy.empty(0) else: stimin = numpy.loadtxt(stiminfile) f3 = open(dgspfile,'r') if f3.readline() == '': dgsp = numpy.empty(0) else: dgsp = numpy.loadtxt(dgspfile) dgvt = numpy.loadtxt(dgvtfile) g1 = open('130408_GC_and_input.txt','w') g2 = open('130408_GC_mp.txt','w') def extract_conn(): """extract_conn() extracts connectivity and prints the global IDs for Santhakumar model by default. Modify the number in this code if you change the network size or ordering. ID 0-499: GC ID 500-505: BC ID 506-520: MC ID 521-526: HC ID 527-626: PP ID >=527: BG """ f_read = open(con_file) f_write = open(con_file_id,'w') for line in f_read: if line[0] == 'G': j = 13 while line[j] != ']': j += 1 pre = int(line[12:j]) elif line[0] == 'B': j = 12 while line[j] != ']': j += 1 pre = 500 + int(line[11:j]) elif line[0] == 'M': j = 11 while line[j] != ']': j += 1 pre = 506 + int(line[10:j]) elif line[0] == 'H': j = 10 while line[j] != ']': j += 1 pre = 521 + int(line[9:j]) elif line[0] == 'N': j = 9 #12 while line[j] != ']': j += 1 if line[7] == 'B': # correlated PP pre = 527 + int(line[11:j]) elif line[7] == '1': # uncorrelated PP pre = 527 + int(line[11:j]) elif line[7] == '[': # BG pre = 527 + npp + int(line[8:j]) else: print 'Please check the file: ' + con_file j += 2 if line[j] == 'G': j += 13 k = j while line[j] != ']': j += 1 post = int(line[k-1:j]) elif line[j] == 'B': j += 12 k = j while line[j] != ']': j += 1 post = 500 + int(line[k-1:j]) elif line[j] == 'M': j += 11 k = j while line[j] != ']': j += 1 post = 506 + int(line[k-1:j]) elif line[j] == 'H': j += 10 k = j while line[j] != ']': j += 1 post = 521 + int(line[k-1:j]) else: print 'Please check the file: ' + con_file f_write.write(str(pre)+'\t'+str(post)+'\n') f_write.close() #extract_conn() conn = numpy.loadtxt(con_file_id) pylab.figure(figsize=(10,8)) pylab.subplot(211) ind = conn[conn[:,1]==cellID,0] ind.sort() j = 0 ystring = ['G'+str(cellID)] if dgsp.size == 2: if dgsp[1] == cellID: pylab.plot(dgsp[0]*numpy.ones(2),numpy.array([j-0.4,j+0.4]),'b',linewidth=2) elif dgsp.size > 2: if any(dgsp[:,1]==cellID): for spk in dgsp[dgsp[:,1]==cellID,0]: pylab.plot(spk*numpy.ones(2),numpy.array([j-0.4,j+0.4]),'b',linewidth=2) spktime = dgsp[dgsp[:,1]==cellID,0] for kk in range(spktime.size): g1.write(str(spktime[kk])+'\t'+str(cellID)) g1.write('\n') for k in ind: spktime = numpy.empty(0) if k < 527: if dgsp.size == 2 and dgsp[1] == k: spktime = numpy.append(spktime,dgsp[0]) elif dgsp.size > 2: spktime = numpy.append(spktime,dgsp[dgsp[:,1]==k,0]) if spktime.size > 0: j += 1 if k < 500: color = 'b' ystring.append('G'+str(int(k))+r'$\to$G'+str(cellID)) elif k < 506: color = 'g' ystring.append('B'+str(int(k-500))+r'$\to$G'+str(cellID)) elif k < 521: color = 'r' ystring.append('M'+str(int(k-506))+r'$\to$G'+str(cellID)) elif k < 527: color = 'c' ystring.append('H'+str(int(k-521))+r'$\to$G'+str(cellID)) for m in spktime: pylab.plot(m*numpy.ones(2),numpy.array([j-0.4,j+0.4]),color,linewidth=2) else: if stimin.size == 2 and stimin[1] == k-527: spktime = numpy.append(spktime,stimin[0]) elif stimin.size > 2: spktime = numpy.append(spktime,stimin[stimin[:,1]==k-527,0]) if spktime.size > 0: j += 1 ystring.append('PP'+str(int(k-527))+r'$\to$G'+str(cellID)) for m in spktime: pylab.plot(m*numpy.ones(2),numpy.array([j-0.4,j+0.4]),'k',linewidth=2) for kk in range(spktime.size): g1.write(str(spktime[kk])+'\t'+str(int(k))) g1.write('\n') pylab.yticks(numpy.arange(0.,j+1,1),ystring) pylab.axis([0,tstop,-0.5,j+0.5]) pylab.subplot(212) pylab.plot(dgvt[:,0],dgvt[:,cellID+1],'b',linewidth=2) for kk in range(dgvt[:,0].size): g2.write(str(dgvt[kk,0])+'\t'+str(dgvt[kk,cellID+1])) g2.write('\n') g1.close() g2.close() pylab.ylabel('Voltage (mV)') pylab.xlabel('Time (ms)') pylab.xlim(0,tstop) pylab.subplots_adjust(bottom=0.08,left=0.145) pylab.savefig('DG_Fig1C.eps') pylab.show()