// The ball and stick model as a template with inputs length and v_init.

begintemplate Cell
public init, biophys

public soma, iseg, axon, dend, spine_head, spine_neck

proc init() {
	// $1 is branch length in microns
	// $2 is v_init
	bLength = $1
	voltInput = $2
	biophys(bLength,voltInput)
}

create iseg[40]
create axon
create soma
create dend[1]
create spine_head[1]
create spine_neck[1]
create bigdend[3]

proc biophys() {
	length = $1 		// length of dendrite in microns
	v_init = $2 		// resting membrane potential

	celsius=37			// nominal temperature of simulation
	Ri=100    			// internal resistivity in ohm-cm
	Cm=1.0	      		// specific membrane capacitance in uF/cm^2
	Rm=15000      		// specific membrane resistivity in ohm/cm^2
	//na_dend=30			// default Na channel density in pS/um^2
	//kv_dend=30			// default K channel density in pS/um^2
	na_soma=100			// somatic Na channel density in pS/um^2
	kv_soma=100			// somatic k channel density in pS/um^2

	access soma
	distance()

	create dend[length]
	create spine_head[length]
	create spine_neck[length]

	soma {
		nseg = 3
		diam = 10
		L = 20
		insert na 
		gbar_na=na_soma
		insert kv
		gbar_kv=kv_soma
		connect iseg[0](0), 0
		nao = 150
		ek = -96
		for i = 0,2 {
		connect bigdend[i] (0), 0.5
			}
	}


	for i = 0,2 {
	
		bigdend[i] {
		nseg = 21
		diam (0:1) = 5:1
		L = 600
		}
	}
	


	for i = 0, 39 {
		iseg[i] {
			nseg = 1
			diam = 2 - (1.5*(i/40))
			L = 1
			insert na
			insert kv 
			if (i < 5) {
				gbar_na = na_soma
				gbar_kv = kv_soma
			} else {
				gbar_na = 8000
				gbar_kv = 2000
			}
			nao = 150
			ek = -96  

			if (i<39) connect iseg[i+1](0), 1
			if (i==39) connect axon(0),1  
		}
	}


	axon {
		nseg = 201
		L = 2000
		diam = .5
		insert na
		gbar_na = 300
		insert kv
		gbar_kv = 60
		nao = 150
		ek = -96
	}



	for i = 0, length-1 {
		access soma
		distance()

		access dend[i] 
			nseg = 1
			L = 1
			diam = 5 - ((4*i)/(length-1))
			if (i == 0) {
			connect soma(1), 0
			} else {
			connect dend[i-1](1), 0
			}

			//Adding spines for every micron
			dend[i] connect spine_neck[i](0),.5
			spine_neck[i] connect spine_head[i](0),1
			spine_neck[i] {nseg=1 L=1 diam=0.0504573} 
			spine_head[i] {nseg=1 L=0.5 diam=0.5}
	}

	forall {
		insert pas
		g_pas = 1/Rm
		cm = Cm
		Ra = Ri
		e_pas = v_init
	}

	access axon
}

endtemplate Cell