if sys.argv[-1] == 'plot': ## load file data = ntwk.load_dict_from_hdf5('CellRep2019_data.h5') print(data) # ## plot fig, _ = ntwk.raster_and_Vm_plot(data, smooth_population_activity=10.) ntwk.show() else: import numpy as np from analyz.processing.signanalysis import smooth NTWK = ntwk.build_populations(Model, ['RecExc', 'RecInh', 'DsInh'], AFFERENT_POPULATIONS=['AffExc'], with_raster=True, with_Vm=4, verbose=True) ntwk.build_up_recurrent_connections(NTWK, SEED=5, verbose=True) ####################################### ########### AFFERENT INPUTS ########### ####################################### t_array = ntwk.arange(int(Model['tstop'] / Model['dt'])) * Model['dt'] faff = smooth(np.array([4 * int(tt / 1000) for tt in t_array]), int(200 / 0.1)) # ###################### # ## ----- Plot ----- ##
def run_sim(Model, with_Vm=0, with_synaptic_currents=False, firing_rate_only=False, tdiscard=100): if 'RATES' in Model.keys(): RATES = Model['RATES'] else: RATES = {} for pop in Model['POP_STIM']: RATES['F_' + pop] = Model['F_' + pop] if tdiscard >= Model['tstop']: print('discard time higher than simulation time -> set to 0') tdiscard = 0 t_array = np.arange(int(Model['tstop'] / Model['dt'])) * Model['dt'] ############################################################################ # everything is reformatted to have it compatible with the network framework ############################################################################ aff_pops_discard_self = [] for p in Model['POP_STIM']: if p != Model['NRN_KEY']: aff_pops_discard_self.append(p) # note that number of neurons become number of different seeds NTWK = ntwk.build_populations( Model, [Model['NRN_KEY']], NEURONS=[{ 'name': Model['NRN_KEY'], 'N': Model['N_SEED'] }], AFFERENT_POPULATIONS=aff_pops_discard_self, with_Vm=with_Vm, with_raster=True, with_synaptic_currents=with_synaptic_currents) ntwk.initialize_to_rest( NTWK) # (fully quiescent State as initial conditions) SPKS, SYNAPSES, PRESPKS = [], [], [] for i, afferent_pop in enumerate(Model['POP_STIM']): rate_array = RATES['F_' + afferent_pop] + 0. * t_array ntwk.construct_feedforward_input(NTWK, Model['NRN_KEY'], afferent_pop, t_array, rate_array, SEED=i + Model['SEED']) sim = ntwk.collect_and_run(NTWK) # calculating firing rate vec = np.zeros(Model['N_SEED']) ispikes = np.array(NTWK['RASTER'][0].i) tspikes = np.array(NTWK['RASTER'][0].t / ntwk.ms) for nrn in range(Model['N_SEED']): i0 = np.argwhere(ispikes == nrn).flatten() ts = tspikes[i0] fout = 1e3 * len(ts[ts > tdiscard]) / (Model['tstop'] - tdiscard ) # from ms to Hz vec[nrn] = fout if firing_rate_only: return vec.mean(), vec.std() else: output = { 'ispikes': np.array(NTWK['RASTER'][0].i), 'tspikes': np.array(NTWK['RASTER'][0].t / ntwk.ms), 'Model': Model, 'fout_mean': vec.mean(), 'fout_std': vec.std() } if with_Vm: output['i_prespikes'] = NTWK['iRASTER_PRE'] output['t_prespikes'] = [ vv / ntwk.ms for vv in NTWK['tRASTER_PRE'] ] output['Vm'] = np.array([vv.V / ntwk.mV for vv in NTWK['VMS'][0]]) if with_synaptic_currents: output['Ie'] = np.array( [vv.Ie / ntwk.pA for vv in NTWK['ISYNe'][0]]) output['Ii'] = np.array( [vv.Ii / ntwk.pA for vv in NTWK['ISYNi'][0]]) return output
## plot fig, AX = plt.subplots(2) AX[0].plot(data['tRASTER_Exc'], data['iRASTER_Exc'], 'bo', ms=2) AX[0].plot(data['tRASTER_Inh'], -data['iRASTER_Inh'], 'ro', ms=2) ntwk.set_plot(AX[0], [], xticks=[], yticks=[]) for v in data['VMS_Exc']: AX[1].plot(np.arange(len(v)) * data['dt'], v, 'k-', lw=1) ntwk.set_plot(AX[1], xlabel='time (ms)', ylabel='Vm (mV)') ntwk.show() else: ## we build and run the simulation NTWK = ntwk.build_populations( Model, ['Exc', 'Inh'], with_raster=True, with_Vm=4, # with_synaptic_currents=True, # with_synaptic_conductances=True, verbose=True) ntwk.build_up_recurrent_connections(NTWK, SEED=5, verbose=True) ################################################################ ## --------------- Initial Condition ------------------------ ## ################################################################ for i in range(2): NTWK['POPS'][i].V = (-65 + 5 * np.random.randn(NTWK['POPS'][i].N) ) * ntwk.mV # random Vm # then excitation NTWK['POPS'][0].GExcExc = abs(40 + 15 *
###################### t_array = ntwk.arange(int(Model['tstop'] / Model['dt'])) * Model['dt'] faff = smooth(np.array([4 * int(tt / 1000) for tt in t_array]), int(200 / 0.1)) fnoise = 3. ####################################### ########### BUILD POPS ################ ####################################### NTWK = ntwk.build_populations(Model, REC_POPS, AFFERENT_POPULATIONS=AFF_POPS, with_pop_act=True, with_raster=True, with_Vm=4, verbose=True) ntwk.build_up_recurrent_connections(NTWK, SEED=5, verbose=True) ####################################### ########### AFFERENT INPUTS ########### ####################################### # time-dep afferent excitation for i, tpop in enumerate(REC_POPS): # both on excitation and inhibition ntwk.construct_feedforward_input(NTWK, tpop, 'AffExc',
# ## ----- Plot ----- ## # ###################### ## load file data = ntwk.load_dict_from_hdf5('3pop_model_data.h5') # ## plot fig, _ = ntwk.activity_plots(data, smooth_population_activity=10.) plt.show() else: NTWK = ntwk.build_populations( Model, ['Exc', 'Inh', 'DsInh'], AFFERENT_POPULATIONS=['AffExc'], with_raster=True, with_Vm=4, # with_synaptic_currents=True, # with_synaptic_conductances=True, verbose=True) ntwk.build_up_recurrent_connections(NTWK, SEED=5, verbose=True) ####################################### ########### AFFERENT INPUTS ########### ####################################### faff = 1. t_array = ntwk.arange(int(Model['tstop'] / Model['dt'])) * Model['dt'] # # # afferent excitation onto cortical excitation and inhibition for i, tpop in enumerate(['Exc', 'Inh',
## load file data = ntwk.load_dict_from_hdf5('sinusoidal_input_data.h5') data['iRASTER_L4Exc'] = data['iRASTER_PRE1'] data['tRASTER_L4Exc'] = data['tRASTER_PRE1'] # # ## plot fig, _ = ntwk.activity_plots( data, POP_KEYS=['L23Exc', 'PVInh', 'SOMInh', 'VIPInh'], COLORS=['green', 'red', 'orange', 'purple'], smooth_population_activity=10.) plt.show() else: NTWK = ntwk.build_populations(Model, ['L23Exc', 'PVInh', 'SOMInh', 'VIPInh'], AFFERENT_POPULATIONS=['L4Exc'], with_raster=True, with_Vm=4, with_pop_act=True, verbose=True) ntwk.build_up_recurrent_connections(NTWK, SEED=5, verbose=True) ####################################### ########### AFFERENT INPUTS ########### ####################################### t_array = ntwk.arange(int(Model['tstop'] / Model['dt'])) * Model['dt'] faff = 0.8 + 0.7 * (1 - np.cos(2 * np.pi * 4e-3 * t_array)) faff[t_array < 750] = 1. # # # afferent excitation onto cortical excitation and inhibition