from neuron import h 
from basket import Basket
import numpy as np
import multiprocessing

basketcell = Basket()

cpu = multiprocessing.cpu_count()
h.load_file("parcom.hoc")
p = h.ParallelComputeTool()
p.change_nthread(8,1)
p.multisplit(1)

h('load_file("vm.ses")')
h.nrncontrolmenu()

stimdata = dict()
stimdata['timeglobal'] = 8000
synapsesdata = dict()

freq_interv = [5, 10, 20, 50, 100, 250]

basketcell.createsyn(30)

for ms_step in freq_interv:
    spk_stim_pf = []
    spk_nc_pfsynpf = []
    spk_nc_pfsynpfnmda = []

    spk_stim = h.NetStim()
    spk_stim.interval = ms_step
    spk_stim.number = 10
    spk_stim.noise = 0
    spk_stim.start = 3000

    spk_stim_pf.append(spk_stim)

    for m in range(int(len(spk_stim_pf))):
        spk_nc_pfsynpf.append([h.NetCon(spk_stim_pf[m],pf.input,0,0.1,1) for pf in basketcell.pf_bc])
        spk_nc_pfsynpfnmda.append([h.NetCon(spk_stim_pf[m],pfnmda.input,0,0.1,1) for pfnmda in basketcell.pf_bcnmda])

    fixed_time = h.CVode()
    fixed_time.active(0)

    h.dt = 0.025
    h.celsius = 32
    h.tstop = stimdata['timeglobal']
    h.v_init = -60
      
    def initialize():
        h.finitialize()
        h.run()
        
    initialize()

    np.savetxt('05_singlesynAMPA_Hz_' + str(int(1000/synapsesdata['synpfinterval'])) + '.txt', np.column_stack((np.array(basketcell.time),np.array(basketcell.pf_bc[0].i['AMPA'][0]))), delimiter = ' ')
    np.savetxt('05_singlesynNMDA_Hz_' + str(int(1000/synapsesdata['synpfinterval'])) + '.txt', np.column_stack((np.array(basketcell.time), np.array(basketcell.pf_bcnmda[0].i['NMDA'][0]))), delimiter = ' ')

    np.savetxt('05_voltagetraceAMPA-NMDA_Hz_' + str(int(1000/synapsesdata['synpfinterval'])) + '.txt', np.column_stack((np.array(basketcell.time),np.array(basketcell.voltage))), delimiter = ' ')