__author__ = 'Aaron D. Milstein' from specify_cells import * import os import random """ Builds a cell locally so each engine is ready to receive jobs one at a time, specified by an index corresponding to which synapse to stimulate (coarse sampling of the full set of spines). """ morph_filename = 'EB2-late-bifurcation.swc' mech_filename = '043016 Type A - km2_NMDA_KIN5_Pr' rec_filename = 'output'+datetime.datetime.today().strftime('%m%d%Y%H%M')+'-pid'+str(os.getpid()) def calculate_single_attenuation_ratio(syn_index): """ :param syn_index: int :return: str """ start_time = time.time() sim.parameters['stim_loc'] = 'spine' syn = spine_syn_list[syn_index] loc = syn.loc spine = syn.node branch = spine.parent.parent sim.modify_rec(0, branch, loc=loc) sim.parameters['input_loc'] = branch.type sim.modify_rec(1, spine) syn.source.play(spike_times) sim.run(v_init) with h5py.File(data_dir+rec_filename+'.hdf5', 'a') as f: sim.export_to_file(f, syn_index*2) syn.source.play(h.Vector()) # playing an empty vector turns this synapse off for future runs while keeping the # VecStim source object in existence so it can be activated again sim.parameters['stim_loc'] = 'branch' syn = branch_syn_list[syn_index] syn.source.play(spike_times) sim.run(v_init) with h5py.File(data_dir+rec_filename+'.hdf5', 'a') as f: sim.export_to_file(f, syn_index*2+1) syn.source.play(h.Vector()) # playing an empty vector turns this synapse off for future runs while keeping the # VecStim source object in existence so it can be activated again print 'Process:', os.getpid(), 'completed Iteration:', syn_index, 'Spine:', spine.index, 'Node:', \ branch.name, 'in', time.time() - start_time, 's' return rec_filename equilibrate = 250. # time to steady-state duration = 350. v_init = -67. amp = 0.03 syn_type = 'EPSC' # 'AMPA_KIN' spine_syn_list = [] branch_syn_list = [] cell = CA1_Pyr(morph_filename, mech_filename, full_spines=True) cell.zero_na() random.seed(0) for branch in cell.basal+cell.trunk+cell.apical+cell.tuft: node_list = [] if len(branch.spines) > 1: if branch.sec.L <= 10.: node = branch.spines[random.sample(range(0, len(branch.spines)), 1)[0]] node_list.append(node) else: num_syns = min(len(branch.spines), int(branch.sec.L//10.)) # a random synapse every 10 um for i in random.sample(range(0, len(branch.spines)), num_syns): node = branch.spines[i] node_list.append(node) elif branch.spines: node = branch.spines[0] node_list.append(node) for node in node_list: syn = Synapse(cell, node, [syn_type], stochastic=0) syn.netcon(syn_type).weight[0] = amp spine_syn_list.append(syn) loc = syn.loc syn = Synapse(cell, branch, [syn_type], stochastic=0, loc=loc) syn.netcon(syn_type).weight[0] = amp branch_syn_list.append(syn) sim = QuickSim(duration, verbose=False) sim.parameters['amp'] = amp sim.parameters['equilibrate'] = equilibrate sim.parameters['duration'] = duration sim.append_rec(cell, cell.tree.root, 0.5, description='branch') sim.append_rec(cell, cell.tree.root, 0.5, description='spine') spike_times = h.Vector([equilibrate])