ivec = h.Vector() kc_solo_vvec = h.Vector() ivec_solo = h.Vector() tvec.record(h._ref_t) kc_vvec.record(kc.soma(0.5)._ref_v) ggn_ca_vvec.record(model['ggn_pre'][0][0](model['ggn_pre'][0][1])._ref_v) ivec.record(inject._ref_i) kc_solo_vvec.record(kc_solo.soma(0.5)._ref_v) ivec_solo.record(inject_solo._ref_i) fb_dict = {'t': tvec, 'i': ivec, 'kc': kc_vvec, 'ca': ggn_ca_vvec} solo_dict = {'t': tvec, 'i': ivec_solo, 'kc': kc_solo_vvec} outfile = '{}_UTC{}_PID{}_JID{}.h5'.format( args.outprefix, timestamp.strftime('%Y_%m_%d__%H_%M_%S'), mypid, myjobid) logger.info('Starting simulation') with h5.File(outfile, 'w') as fd: fd.attrs['command_line'] = str(sys.argv) fd.attrs['ggn_kc_syn'] = str(ggn_kc_syn_params) syntype = np.dtype([('sec', h5.special_dtype(vlen=str)), ('pos', np.float32)]) ds_ca_syn = fd.create_dataset('ggn_pre', (len(model['ggn_pre']), ), dtype=syntype) ds_ca_syn[:] = [(sec.name(), pos) for sec, pos in model['ggn_pre']] grp_feedback = fd.create_group('ggn_kc') grp_solo = fd.create_group('kc') grp_vec_inject = [(grp_feedback, fb_dict, inject), (grp_solo, solo_dict, inject_solo)] if len(args.freq) > 1:
def main(): parser = make_parser() args = parser.parse_args() logger.info('Command line args: {}'.format(str(sys.argv))) print(args.ggn_vm_file) # KCs with GGN inhibition inhibited_vec = defaultdict(list) solo_vec_list = [] tstart = Q_(args.tstart).to('ms').m tend = Q_(args.tend).to('ms').m istart = Q_(args.istart).to('nA').m iend = Q_(args.iend).to('nA').m di = Q_(args.di).to('nA').m irange = np.arange(istart, iend + di / 2.0, di) logger.info('Starting current: {} nA'.format(istart)) logger.info('End current: {} nA'.format(iend)) logger.info('Increment: {} nA'.format(di)) logger.info('current range: {}'.format(irange)) ggn_vm = {} for input_file in args.ggn_vm_file: ggn_vm[input_file] = np.loadtxt(input_file) for inject in irange: for input_file, vm in ggn_vm.items(): kc_vvec, ggn_gvec = make_kc_with_dynaclamp(args.kc, args.kc_file, inject, tstart, tend, vm) inhibited_vec[input_file].append((kc_vvec, ggn_gvec)) # KC without any inhibition kc_vvec, ggn_gvec = make_kc_with_dynaclamp(args.kc, args.kc_file, inject, tstart, tend) solo_vec_list.append(kc_vvec) tvec = h.Vector() tvec.record(h._ref_t) h.tstop = tend print('Init') h.init() print('Run') h.run() print('Finished simulation') fig, ax = plt.subplots(nrows=len(irange) + 1, ncols=len(ggn_vm) + 1, sharex='all', sharey='all') t = np.array(tvec.x) solo_data = [] for ii, vvec in enumerate(solo_vec_list): ax[ii + 1, 0].plot(tvec, vvec, color='#e66101') solo_data.append(np.array(vvec.x)) combined = np.vstack(solo_data) prefix = 'UTC' + timestamp.strftime('%Y%m%d_%H%M%S') fname = '{}_solo_kc.npz'.format(prefix) np.savez(fname, t=t, vm=combined, inject=irange) logger.info('Saved solo KC data in {}'.format(fname)) for jj, input_file in enumerate(args.ggn_vm_file): fname = '{}_{}.npz'.format(prefix, os.path.basename(input_file)) data = [] kc_vm_list = inhibited_vec[input_file] for ii, (vvec, gvec) in enumerate(kc_vm_list): data.append(np.array(vvec.x)) ax[ii + 1, jj + 1].plot(tvec, vvec, color='#e66101') ax[ii + 1, 0].set_ylabel('{} pA'.format(irange[ii] * 1e3)) # ax[ii+1, 0].set_ylabel('{} pA'.format(int(np.round(irange[ii]*1e3)))) # to avoid decimal point when integer values # ax[0, jj+1].plot(tvec, gvec) # ax[0, jj+1].plot(ggn_vm[input_file][:,0], ggn_vm[input_file][:,1]) ax[0, jj + 1].set_title(input_file) combined = np.vstack(data) np.savez(fname, combined=combined, irange=irange, ggn_vm=ggn_vm[input_file]) logger.info( 'Saved data from dynamic clamp with input from {} in {}'.format( input_file, fname)) for axis in ax.flat: axis.set_xlim(250, 1750) fig.set_size_inches(210 / 25.4, 290 / 25.4) fig.tight_layout() fig.savefig('{}_KC_dynamic_range_with_ggn_vm.svg'.format(prefix)) plt.show() print('End')