/* Author: Xu Zhang @UConn, Jan., 2019
Synaptic mechanisms between TC (Vim)-MC (PYN and FSI; abbreviated as PY and FS in the script, respectively)
This script cannot be executed individually
*/

// Varying TC-PYN synaptic strengths
objref rngTC2PY
rngTC2PY = new Random(TC2PYsynrnd)
rngTC2PY.normal(1,0.0625)

// Varying PYN-TC synaptic strengths
objref rngPY2TC
rngPY2TC = new Random(PY2TCsynrnd)
rngPY2TC.normal(1,0.25)

// Poisson process inputs to PYNs
objref rngPYns
rngPYns = new Random(PYnsrnd)
rngPYns.normal(1,0.25)
objref rngPYnsintv
rngPYnsintv = new Random(PYnsintvrnd)
rngPYnsintv.normal(20,25)

// Synaptic noise to PY/TC
objref PY_noisyn
PY_noisyn = new Random(TC2PYrnd)
PY_noisyn.normal(0, 1e-6*noiseSwitch)

// AMPA
objref TC2PY_syn_ampa[30], NC_TC2PY_syn_ampa[30]

// TCcell inputs
// for k = 0,19 {
objref TC2PYnum
TC2PYnum = new Vector(30)
TC2PYnum.indgen(0, 100, 100/30)
for k = 0,29 {
	TC2PYtmp = int(TC2PYnum.x[k])
	PYcell[TC2PYtmp] TC2PY_syn_ampa[k] = new NoisyExpSyn(0.4)

	TC2PY_syn_ampa[k].tau = 5.26 // (ms)
	TC2PY_syn_ampa[k].e = 0
	TCcell[int(k/6)] NC_TC2PY_syn_ampa[k] = new NetCon(&v(0.1), TC2PY_syn_ampa[k], -40, 1, 0.015*abs(rngTC2PY.repick())) // Delay determined from Walker et al., 2012// Synaptic noise
	PY_noisyn.play(&TC2PY_syn_ampa[k].noise)
}

// Basal Ganglia inputs
objref BG_syn_exc[100], PYns[100], PYnsnc[100]
for i = 0,99 {
	PYcell[i] BG_syn_exc[i] = new NoisyExpSyn(0.25)
	BG_syn_exc[i].tau = 3 // (ms)
	BG_syn_exc[i].e = 0
	PYcell[i] PYns[i] = new NetStim(0.15)
	PYns[i].number=1e10
	PYns[i].interval=abs(rngPYnsintv.repick())
	PYns[i].start=0
	PYns[i].noise=1
	PYcell[i] PYnsnc[i] = new NetCon(PYns[i], BG_syn_exc[i], 0, 0, 0.0022*abs(rngPYns.repick()))
}

// Synapse TC-FS
// TC-FS Pathway
// AMPA
objref TC2FS_syn_ampa[10], NC_TC2FS_syn_ampa[10], TC2FS_noisyn_ampa[10]

for i = 0,9 {
	FScell[i] TC2FS_syn_ampa[i] = new NoisyExpSyn(0.4)

	TC2FS_syn_ampa[i].tau = 5.26 // (ms)
	TC2FS_syn_ampa[i].e = 0
	TCcell[int(i/5)] NC_TC2FS_syn_ampa[i] = new NetCon(&v(0.1), TC2FS_syn_ampa[i], -40, 2, 9e-4) // Delay determined from Walker et al., 2012
	PY_noisyn.play(&TC2FS_syn_ampa[i].noise)
}

// Synapse PY-TC
// PY-TC Pathway
// AMPA
objref PY2TC_syn_ampa[20], NC_PY2TC_syn_ampa[20]

// for i = 0,19 {
objref PY2TCnum
PY2TCnum = new Vector(20)
PY2TCnum.indgen(2, 100, 100/20)
for k = 0,19 {
	PY2TCtmp = int(PY2TCnum.x[k])
	TCcell[int(k/4)] PY2TC_syn_ampa[k] = new NoisyExpSyn(0.4+0.01*k)

	PY2TC_syn_ampa[k].tau = 5.26 // (ms)
	PY2TC_syn_ampa[k].e = 0
	PYcell[PY2TCtmp] NC_PY2TC_syn_ampa[k] = new NetCon(&v(0.1), PY2TC_syn_ampa[k], -40, 1, 9e-4*abs(rngTC2PY.repick())) // Delay determined from Walker et al., 2012
	PY_noisyn.play(&PY2TC_syn_ampa[k].noise)
}