// Load cell templates 
err_ = load_file("objects/GC.hoc")

print_voltage_tracings = 1

tstop = 2000
delay = 50
duration = tstop - 2*delay 

n_steps = 20
v_init = -77.71 
i_min = 0
i_max = 0.4
i_step = (i_max - i_min)/n_steps

objref tdata, vdata[n_steps+1], vdatalist, spikes[n_steps+1]
objref current_steps
objref cells[n_steps+1], stim[n_steps+1]
objref vmfile, fifile
strdef vm_filename, ficurve_filename
vm_filename = "ficurve-vm.txt"
ficurve_filename = "ficurve.txt"


objref na_scales, kdr_scales, ka_scales, ht_gbars, lt_gbars, size_scales
na_scales = new Vector()
na_scales.append(1, 0.034/0.033, 0.026/0.033)

kdr_scales = new Vector() 
kdr_scales.append(1, 1.15, 1.3)

ka_scales = new Vector() 
ka_scales.append(1, 0.0096/0.008, 0.0104/0.008)

ht_gbars = new Vector() 
ht_gbars.append(0.0004, 0.0008, 0.0004)
//ht_gbars.append(0.000, 0.000, 0.000)

lt_gbars = new Vector() 
//lt_gbars.append(0.0002, 0.0002, 0.0002)
lt_gbars.append(0.000, 0.000, 0.000)


for s=0, 2 {
    current_steps = new Vector()
    for i = 0, n_steps { 
        cells[i] = new GranuleCell(i, na_scales.x[s], kdr_scales.x[s], ka_scales.x[s], ht_gbars.x[s]) 
        cells[i].soma stim[i] = new IClamp(0.5)
        stim[i].del = delay
        stim[i].dur = duration 
        stim[i].amp = i_min + i*i_step
        current_steps.append(i_min + i*i_step)
    }  

    tdata = new Vector()
    tdata.record(&t)
    for i = 0, n_steps {
        vdata[i] = new Vector()
        vdata[i].record(&cells[i].soma.v(0.5))
        spikes[i] = new Vector()
    }

    finitialize(v_init)
    while (t < tstop) {
        fadvance()
    }


    // FUNCTIONS TO PRINT FILES
    // Save FI CURVE
    fifile = new File()
    fifile.aopen(ficurve_filename)
    for i = 0, n_steps {
        spikes[i].spikebin(vdata[i], 0)
        fifile.printf("%f\t%f\t%f\t%f\t%f\t%f\t%f\n", current_steps.x[i], spikes[i].sum()/(duration/1000), na_scales.x[s], kdr_scales.x[s], ka_scales.x[s], ht_gbars.x[s], lt_gbars.x[s])
    }
    fifile.close()

    if (print_voltage_tracings == 1) {
        // Save voltage traces 
        vmfile = new File()
        sprint(vm_filename, "%svm-%f.txt", "data/fi-curves/", s)
        vmfile.aopen(vm_filename)
        for j = 0, tdata.size - 1 {
            for i = 0, n_steps {
                if (i == 0) {
                    vmfile.printf("%f\t%f\t", tdata.x[j], vdata[i].x[j])
                } 
                if (i == n_steps) {
                    vmfile.printf("%f\n", vdata[i].x[j])
                }
                if (i > 0 && i < n_steps ) {
                    vmfile.printf("%f\t", vdata[i].x[j])
                }
            }
        }
        vmfile.close()
    }
}