# import ipdb from neuron import h, gui import numpy as np from glob import glob as listdir import os from branch_setup import * import h5py as h5 from protocol import * import sys def superrun(xxx_todo_changeme): (run_index,delta_t, dep_dur, hyp_dur, n_BPAP, conf_n, activate_LTP,nstim,blk_RMBLK) = xxx_todo_changeme global protocol, p , cell, rank if p['check']: print(('Started simulation %s run %g on CPU %g'%(conf_n, run_index,rank))) # print protocol.stimulators['IC_dep'][0][0].delay,protocol.stimulators['IC_dep'][0][0].amp for ic_idx,(dc,hc) in enumerate(zip(protocol.stimulators['IC_dep'],protocol.stimulators['IC_hyp'])): if ic_idx < p['protocols'][conf_n]['nstim']: for dcc,hcc in zip(dc,hc): dcc.dur = dep_dur hcc.dur = hyp_dur hcc.delay = dcc.delay + dcc.dur # ms if n_BPAP == 1: for i in [1,2,3]: dc[i].dur = 0 hc[i].dur = 0 if n_BPAP == 2: for i in [2,3]: dc[i].dur = 0 hc[i].dur = 0 else: for i in [0,1,2,3]: dc[i].dur = 0 hc[i].dur = 0 if activate_LTP: protocol.stim.number = nstim if p['check']: print(('Stimulation is %s for %g times.'%(conf_n,nstim))) else: protocol.stim.number = 0 # Remove the RMBLK if blk_RMBLK: for s in cell.spines: s.head.RMECB.alpha_cai_RMBLK = 0 # print s.name,s.head.RMECB.alpha_cai_RMBLK # print "SPINE max_fused_vesicles", s.head.BDNF.max_fused_vesicles if p['check']: print(("Running for delta_t = %g"%delta_t)) protocol.stim.start = p['time_start_induction_stimuli'] + delta_t # ms if p['check']: print(('Initializing on run %g on CPU %g'%(run_index,rank))) if p['override_tstop'] is not None: h.tstop = p['override_tstop'] else: h.tstop = protocol.p['tstop']#p['time_on_initialization']+p['time_to_begin_induction'] + 1000 if p['check']: print(('Running for %g ms'%h.tstop)) # for seg in dend: # mec = getattr(seg,'na3') # mec.gbar = 0 # for dc in protocol.stimulators['IC_dep']: # for d in dc: # d.amp = 0 # for dc in protocol.stimulators['IC_hyp']: # for d in dc: # d.amp = 0 # print conf_n, dc[0].amp, dc[0].dur # for s in cell.spines: # print s.head.BDNF.alpha_gAMPA, s.head.BDNF.theta_gAMPA, s.head.BDNF.sigma_gAMPA # print s.parent_sec,s.parent_seg # s.head.AMPA.Pmax = 0 # s.head.NMDA.Pmax = 0 h.init() if h.tstop > 1e3: while h.t < h.tstop: h.continuerun(h.t+5e3) print((h.t)) sys.stdout.flush() else: h.run() for s in cell.spines: print((s.name, s.head.AMPA.Pmax, s.head.AMPA.g_factor, s.head.AMPA.glut_factor, 'lowindex', cell.MCell_Ran4_lowindex, 'cell highindex', cell.MCell_Ran4_highindex, 'spine highindex', s.highindex, 'delta t', delta_t)) store = h5.File(p['data_file']+'_%g.hdf5'%run_index, 'w') # print "Opened data file on cpu %g"%rank # Group for sim data sim_data = store.create_group('Simulation_data') conf_data = sim_data.create_group(conf_n) # Group for single iteration run_iteration = conf_data.create_group('delta_t_%g_%g'%(delta_t,run_index)) run_iteration.create_dataset('branches indexes',data=cell.seg_indexes) run_iteration.create_dataset('branches indexes 2',data=cell.seg_indexes_2) run_iteration.create_dataset('branch names',data=[str(ss) for ss in cell.branch_segments]) run_iteration.create_dataset('spiny branch names',data=[str(ss) for ss in cell.spine_segments]) run_iteration.create_dataset('delta_t',data=delta_t) run_iteration.create_dataset('test_pre_spike_times', data=np.array(protocol.stimulators['test_pre_spike_times'])) run_iteration.create_dataset('induction_spikes', data=np.array(protocol.stimulators['induction_spikes'])) run_iteration.create_dataset('test_during_spike_times', data=np.array(protocol.stimulators['test_during_spike_times'])) run_iteration.create_dataset('test_post_spike_times', data=np.array(protocol.stimulators['test_post_spike_times'])) run_iteration.create_dataset('induction_injection_times', data=np.array(protocol.stimulators['IC_delays'])) if p['check']: for spine_index,spine in enumerate(cell.spines): print((conf_n, spine.name, 'delta_t_%g'%delta_t, list(run_iteration.keys()))) for spine_index,spine in enumerate(cell.spines): # Single spine group # if spine.name in run_iteration.keys(): spine_group = run_iteration.create_group(spine.name) spine.head.save_records(spine_group, spine_index, write_datasets = True) spine.neck.save_records(spine_group, spine_index, write_datasets = True) cell.cell.save_records(run_iteration, write_datasets = True) tb.dig_dict_save('Parameters',p,store.create_group('Parameters')) store.close() return 'Completed sim on run %g on CPU %g time %g'%(run_index,rank,h.t) pc = h.ParallelContext() rank = int(pc.id()) CVOde = h.cvode CVOde.active(1) # h.nrnmainmenu() p = {} exec(compile(open('parameters.py').read(), 'parameters.py', 'exec'),p) # global cell cell = Spiny_branch(p,rank=rank) # for s in cell.spines: # print s.head.BDNF.alpha_gAMPA, s.head.BDNF.theta_gAMPA, s.head.BDNF.sigma_gAMPA # global protocol protocol = stim_protocol(cell,p, rank=rank) pc.runworker() print(('Starting %g'%rank)) sim_list = [] if rank == 0: # Remove old data files ls = listdir(p['data_file']+'_*.hdf5') for f in ls: if 'pulled' not in f: os.remove(f) # nnodes = world.size run_index = 0 for conf_n,conf in list(p['protocols'].items()): for delta_t in p['time_delta']: blk_RMBLK = conf['Block_RMBLK'] if 'Block_RMBLK' in list(conf.keys()) else False # print "Submitting jobs", delta_t args = [ run_index, delta_t, conf['BPAP_dep_stimulus_duration'], conf['BPAP_hyp_stimulus_duration'], conf['n_BPAP'], conf_n, conf['activate_LTP_protocol'], conf['nstim'], blk_RMBLK] # print(args) sim_list.append(args) run_index += 1 pc.submit(superrun, args) while pc.working(): print((pc.pyret())) pc.done()