示例#1
0
if half_linear:
    v_cell_ext[:, :] = utils.half_linear_field(
        cell, pulse_start, pulse_start + pulse_duration, n_tsteps,
        axis='z') * amp
else:
    v_cell_ext[:, :] = utils.linear_field(
        cell, pulse_start, pulse_start + pulse_duration, n_tsteps,
        axis='z') * amp

cell.insert_v_ext(v_cell_ext, t)

# Run simulation, electrode object argument in cell.simulate
# print("running cell {2} distance from electrode: {0} current intensity: {1}").format(depth, amp, cell_id)
cell.simulate(rec_imem=True, rec_vmem=True)
spike_time_loc = utils.return_first_spike_time_and_idx(cell.vmem)
if spike_time_loc[0] is not None:
    print("!!!spike at segment {0} @ t = {1} ms").format(
        spike_time_loc[1], spike_time_loc[0] * cell.dt)
    c_vext = v_cell_ext[spike_time_loc[1]][spike_time_loc[0]]

# FIGURES
fig = plt.figure(figsize=[12, 8])
initial = spike_time_loc[1]

# ax1 = plt.subplot(111, projection="3d",
#                   title="t = " + str(spike_time_loc[0] * cell.dt) + "ms", aspect=1, xlabel="x [$\mu$m]",
#                   ylabel="y [$\mu$m]", zlabel="z [$\mu$m]", xlim=[-600, 600], ylim=[-600, 600], zlim=[-1800, 200])
# # [ax1.plot([cell.xstart[idx], cell.xend[idx]], [cell.ystart[idx], cell.yend[idx]], [cell.zstart[idx], cell.zend[idx]], '-',
# #          c='k', clip_on=False) for idx in range(cell.totnsegs)]
# # [plt.plot([cell.xstart[idx], cell.xend[idx]], [cell.zstart[idx], cell.zend[idx]], '-',
                    # DEBUG
                    if np.isnan(cell.vmem).any():
                        print("NaN for cell {}".format(RANK))

                    utils.dendritic_spike(cell)
                    # print('rank {}, pulse_start {}, buffer {}'.format(RANK, pulse_start, params.sim['buffer']))
                    spike_time_loc = utils.spike_soma(
                        cell,
                        from_t=(pulse_start - params.sim['buffer']),
                        to_t=(pulse_start + pulse_duration +
                              params.sim['buffer']))

                    if spike_time_loc[0] is not None:
                        spiked = True

                        detail_spike = utils.return_first_spike_time_and_idx(
                            cell.vmem)
                        print("!spike! at time {0} and position {1}, rank {2}".
                              format(detail_spike[0],
                                     cell.get_idx_name(detail_spike[1])[1],
                                     RANK))
                        # print("DEBUG 0 rank {}".format(RANK))
                        # current[RANK][np.where(amp_spread == amp)[0][0]] = dis
                        current[RANK][i_amp] = dis
                        # print("DEBUG 1 rank {}".format(RANK))

                        # c_vext[RANK][np.where(amp_spread == amp)[0][0]] = v_cell_ext[detail_spike[1]][detail_spike[0]]
                        c_vext[RANK][i_amp] = v_cell_ext[detail_spike[1]][
                            detail_spike[0]]
                        # print("DEBUG 2 rank {}".format(RANK))
                        # ap_loc[RANK][np.where(amp_spread == amp)[0][0]] = detail_spike[1]
                        ap_loc[RANK][i_amp] = detail_spike[1]