def init_run_save(group_vec_list, dsname, tstop, attrs): """init, run and save the data in fd, creating the dataset `dsname`. vec_dict: {field name: Vector recording the field} tstop: stop time of simulation attrs: dict containing additional attributes for the dataset. """ h.tstop = tend logger.info('Init: saving in dataset {}'.format(dsname)) h.init() h.run() print('Finished run: saving in dataset {}'.format(dsname)) for group, vec_dict in group_vec_list: data = np.vstack([np.asarray(vec.x) for vec in vec_dict.values()]) ds = group.create_dataset(dsname, data=data) ds.attrs['fields'] = list(vec_dict.keys()) for k, v in attrs.items(): ds.attrs[k] = v
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')