/* In this experiment we want to fit our model to recorded NMDAR current
during oscilating patterns of membrane voltage which include some action potentials
*/
load_file("nrngui.hoc")
load_file("params.hoc")

//fully activates cache efficiency
cvode.cache_efficient(1)  

tstop = 85
dt = .025
celsius = 32	// temperature in Kim11 experiment Fig. 11
v_init = -70

// ------------------
create soma
access soma

// load data
//------------Action Potential Clamp---------------------------	
objref vc, vRec, tRec, vFile, tFile

vRec = new Vector(1592)
tRec = new Vector(1592)
vFile = new File()
tFile = new File()

vFile.ropen("./Data/Exp09-Kim11-Oscilating-Voltage/Vm.dat")
tFile.ropen("./Data/Exp09-Kim11-Oscilating-Voltage/time.dat")
vRec.scanf(vFile)
tRec.scanf(tFile)

// vRec.printf()

vc = new VClamp(.5)
	vc.dur[0] = tstop
	vRec.play(&vc.amp[0],tRec)
	
//---------------------------------------------------
SynWeight = 0.38508

Tau1 = 1.0327
Tau2_0 = 25.057
Tau3_0 = 232.27
A2 = 2.2364
A3 = 43.495
k0 = 4.1
DELTA = 0.8

objref sNMDA, stim, nc
stim = new NetStim(.5)
	stim.interval = 30		//ms (mean) time between spikes
	stim.number = 3			//(average) number of spikes
	stim.start 	= 1 - 1	//ms (most likely) start time of first spike
	stim.noise 	= 0			//---- range 0 to 1. Fractional randomness.
	//0 deterministic, 1 intervals have negexp distribution.
sNMDA = new Exp5NMDA3(.5)
nc = new NetCon(stim, sNMDA)

proc init_NMDA() {
	sNMDA.tau1 = Tau1
	sNMDA.a2 = A2
	sNMDA.tau2_0 = Tau2_0
	sNMDA.a3 = A3
	sNMDA.tau3_0 = Tau3_0
	sNMDA.K0 = k0
	sNMDA.delta = DELTA
	
	nc.weight = SynWeight
	nc.delay = 1
}
objref FinNMDA
FinNMDA = new FInitializeHandler(3,"init_NMDA()")
	
load_file("MRF-OscilVm.ses")	
//-------Graph----------------------	
objref iNMDA, vSoma
iNMDA = new Graph()
iNMDA.size(0,tstop,-25,120)
iNMDA.addvar("sNMDA.i",3,0)
iNMDA.save_name("graphList[0].")
graphList[0].append(iNMDA)

vSoma = new Graph()
vSoma.size(0,tstop,-100,50)
vSoma.addvar("soma.v(.5)",3,0)
vSoma.save_name("graphList[0].")
graphList[0].append(vSoma)

// init()
// run()