コード例 #1
0
ファイル: kc_ggn_nofeedback.py プロジェクト: subhacom/mbnet
    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:
コード例 #2
0
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')