stim_amplitude_range = range(-200., 220., 50.)
sim_refs = []

sim_config_name = 'input_resistance_single_cell'
sim_config = project.simConfigInfo.getSimConfig(sim_config_name)
project.neuronSettings.setNoConsole()

# generate
pm.doGenerate(sim_config_name, 1234)
while pm.isGenerating():
    time.sleep(0.02)
print('network generated')

for amplitude in stim_amplitude_range:
    sim_ref = utils.ir_single_cell_sim_ref(timestamp, amplitude)
    sim_refs.append(sim_ref)
    sim_path = '../simulations/' + sim_ref
    project.simulationParameters.setReference(sim_ref)
    # set stim amplitude
    amplitude_in_nA = amplitude / 1000.
    for cell_type in ['Vervaeke', 'reduced']:
        stim = project.elecInputInfo.getStim('cclamp_' + cell_type + '_TTX')
        stim.setAmp(NumberGenerator(amplitude_in_nA))
        project.elecInputInfo.updateStim(stim)
    # generate and compile neuron files
    print "Generating NEURON scripts..."
    #    project.neuronFileManager.setSuggestedRemoteRunTime(10)
    simulator_seed = random.getrandbits(32)
    project.neuronFileManager.generateTheNeuronFiles(sim_config, None,
                                                     NeuronFileManager.RUN_HOC,
stim_amplitude_range = range(-200.0, 220.0, 50.0)
sim_refs = []

sim_config_name = "input_resistance_single_cell"
sim_config = project.simConfigInfo.getSimConfig(sim_config_name)
project.neuronSettings.setNoConsole()

# generate
pm.doGenerate(sim_config_name, 1234)
while pm.isGenerating():
    time.sleep(0.02)
print ("network generated")

for amplitude in stim_amplitude_range:
    sim_ref = utils.ir_single_cell_sim_ref(timestamp, amplitude)
    sim_refs.append(sim_ref)
    sim_path = "../simulations/" + sim_ref
    project.simulationParameters.setReference(sim_ref)
    # set stim amplitude
    amplitude_in_nA = amplitude / 1000.0
    for cell_type in ["Vervaeke", "reduced"]:
        stim = project.elecInputInfo.getStim("cclamp_" + cell_type + "_TTX")
        stim.setAmp(NumberGenerator(amplitude_in_nA))
        project.elecInputInfo.updateStim(stim)
        # generate and compile neuron files
    print "Generating NEURON scripts..."
    #    project.neuronFileManager.setSuggestedRemoteRunTime(10)
    simulator_seed = random.getrandbits(32)
    project.neuronFileManager.generateTheNeuronFiles(sim_config, None, NeuronFileManager.RUN_HOC, simulator_seed)
    compile_process = ProcessManager(project.neuronFileManager.getMainHocFile())
from matplotlib import pyplot as plt

import utils

timestamp = sys.argv[1]
stim_range = range(-200, 220, 50)

fig, ax = plt.subplots()

cell_types = ['reduced', 'Vervaeke']
voltages = {}

for cell_type in cell_types:
    voltages[cell_type] = np.zeros(shape=len(stim_range), dtype=np.float)
    for k,stim_level in enumerate(stim_range):
	sim_ref = utils.ir_single_cell_sim_ref(timestamp,
					       stim_level)
	filename = '../simulations/{0}/Golgi_{1}_TTX_0.dat'.format(sim_ref,
								   cell_type)
	try:
	    voltages[cell_type][k] = np.loadtxt(filename)[-1]
	except IOError:
	    print('Data file not found: {0}'.format(sim_ref))

    baseline = voltages[cell_type][4]
    voltages[cell_type] = voltages[cell_type] - baseline
    ax.plot(stim_range, voltages[cell_type], label=cell_type, marker='o')

ax.legend(loc='best')
ax.set_xlabel('stimulation amplitude (pA)')
ax.set_ylabel('voltage response (mV)')
fig.suptitle('Steady-state current-voltage relations, single cell (no gap junctions).\ninput resistance (-200pA to 0pA): {0}M$\Omega$'.format(1000*voltages['reduced'][0]/float(stim_range[0])))