str spiketype = "spke4"

//1: high=*50, med =*1, low =/1.5, gaba = *2
//2: high=*40, med =*1, low =/1.5, gaba = *2
//3: high=*40, med =*1, low =/1.5, gaba = *3
//4: high=*40, med =*1, low =/1.5, gaba = *4
//5: high=*60, med =/2, low =/5, gaba = *4
//6: high=*30, med =*1, low =/1.5, gaba = *4


//****start local subroutines

function makeinputpre(rate, path)
    str rate
    str path
    create randomspike {path}/randomspikehigh
    setfield ^ min_amp 1.0 max_amp 1.0 rate {{rate}*40} reset 1 reset_value 0	
    create randomspike {path}/randomspikemed
    setfield ^ min_amp 1.0 max_amp 1.0 rate {{rate}} reset 1 reset_value 0	
    create randomspike {path}/randomspikelow
    setfield ^ min_amp 1.0 max_amp 1.0 rate {{rate}/1.5} reset 1 reset_value 0	
    create randomspike {path}/randomspike2
    setfield ^ min_amp 1.0 max_amp 1.0 rate {{rate}*4} reset 1 reset_value 0	
 end
	
function makeinputpost(pathspike, path) 
	str path
	int msgnum
	addmsg {pathspike} {path} SPIKE
    	msgnum = {getfield {path} nsynapses} - 1
   	setfield {path} \
  	synapse[{msgnum}].weight 1 synapse[{msgnum}].delay 0
end


function stopinput (path)
	str path
	deletemsg {path} 2 -incoming
end

function stopinput2 (path)
	str path
	deletemsg {path} 1 -incoming
end

//***end local subroutines 

//***start main functions


function makeALLpre (Hz)
	float Hz
	int i=1
	str path9
	for(i=1;i<5;i=i+1)
		foreach path9({el {cellpath}/primdend{i}})
			makeinputpre {Hz} {path9}
		end
		reset
	end

	str path
	int i=1
	for(i=11;i<13;i=i+1)
		foreach path({el {cellpath}/secdend{i}})
			makeinputpre {Hz} {path}
		end
		reset
	end
	for(i=21;i<23;i=i+1)
		foreach path({el {cellpath}/secdend{i}})
			makeinputpre {Hz} {path}
		end
		reset
	end
	for(i=31;i<33;i=i+1)
		foreach path({el {cellpath}/secdend{i}})
			makeinputpre {Hz} {path}
		end
		reset
	end
	for(i=41;i<43;i=i+1)
		foreach path({el {cellpath}/secdend{i}})
			makeinputpre {Hz} {path}
		end
		reset
	end
	

	int j=1
	int s=1
	str path4
	str path3
	for(j=1;j<17;j=j+1)
		for(s=1;s<12;s=s+1)
			foreach path4({el {cellpath}/tertdend{j}_{s}})
				makeinputpre {Hz} {path4}
			end
		end
	end
	
	reset 
	reset       // twice?
	
end

function makeALLpost (freq)
	str freq
	str path1
	str path2
	str path5
	str path8
	int i=1
	int x=1
	
	for(i=1;i<5;i=i+1)
		foreach path8 ({el {cellpath}/primdend{i}})
			makeinputpost {cellpath}/primdend{i}/randomspike{freq} {path8}/AMPA
			makeinputpost {cellpath}/primdend{i}/randomspike{freq} {path8}/{subunit}
			makeinputpost {cellpath}/primdend{i}/randomspike2 {path8}/GABA
		end
	end
	int i=1
	// sec 
	for(i=11;i<13;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			makeinputpost {cellpath}/secdend{i}/randomspike{freq} {path1}/AMPA
			makeinputpost {cellpath}/secdend{i}/randomspike{freq} {path1}/{subunit}
			makeinputpost {cellpath}/secdend{i}/randomspike2 {path1}/GABA
		end
	end

	for(i=21;i<23;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			makeinputpost {cellpath}/secdend{i}/randomspike{freq} {path1}/AMPA
			makeinputpost {cellpath}/secdend{i}/randomspike{freq} {path1}/{subunit}
			makeinputpost {cellpath}/secdend{i}/randomspike2 {path1}/GABA
		end
	end
	for(i=31;i<33;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			makeinputpost {cellpath}/secdend{i}/randomspike{freq} {path1}/AMPA
			makeinputpost {cellpath}/secdend{i}/randomspike{freq} {path1}/{subunit}
			makeinputpost {cellpath}/secdend{i}/randomspike2 {path1}/GABA
		end
	end
	for(i=41;i<43;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			makeinputpost {cellpath}/secdend{i}/randomspike{freq} {path1}/AMPA
			makeinputpost {cellpath}/secdend{i}/randomspike{freq} {path1}/{subunit}
			makeinputpost {cellpath}/secdend{i}/randomspike2 {path1}/GABA
		end
	end

	int j=1
	int k=1
	 // tert spines
	
	for(j=2;j<17;j=j+1)
		for(k=2;k<12;k=k+1)
			foreach path2 ({el {cellpath}/tertdend{j}_{k}})
				makeinputpost {cellpath}/tertdend{j}_{k}/randomspike{freq} {path2}/AMPA
				makeinputpost {cellpath}/tertdend{j}_{k}/randomspike{freq} {path2}/{subunit}
			end
		end
	end
	for(j=1;j<17;j=j+1)
		for(k=1;k<12;k=k+1)
			foreach path2 ({el {cellpath}/tertdend{j}_{k}})
				makeinputpost {cellpath}/tertdend{j}_{k}/randomspike2 {path2}/GABA
			end
		end
	end
end

function stopGlu
	int i
	str path1
	str path2
	str path9
	for(i=1;i<5;i=i+1)
		foreach path9 ({el {cellpath}/primdend{i}})
			stopinput {path9}/AMPA
			stopinput {path9}/{subunit}
		end
	end
	
	int i=1 
	int x=1
	// sec spines
	for(i=11;i<13;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			stopinput {path1}/AMPA
			stopinput {path1}/{subunit}
		end
	end
	
	for(i=21;i<23;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			stopinput {path1}/AMPA
			stopinput {path1}/{subunit}
		end
	end
	
	for(i=31;i<33;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			stopinput {path1}/AMPA
			stopinput {path1}/{subunit}
		end
	end
	for(i=41;i<43;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			stopinput {path1}/AMPA
			stopinput {path1}/{subunit}
		end
	end
	int j=1
	int k=1
	 // tert spines
	
	for(j=2;j<17;j=j+1)
		for(k=2;k<12;k=k+1)
			foreach path2 ({el {cellpath}/tertdend{j}_{k}})
				stopinput {path2}/AMPA
				stopinput {path2}/{subunit}
			end
		end
	end
end
	
function stopGABA
	int i
	str path1
	str path2
	str path9
	for(i=1;i<5;i=i+1)
		foreach path9 ({el {cellpath}/primdend{i}})
			stopinput2 {path9}/GABA
		end
	end
	
	int x=1
	// sec spines
	for(i=11;i<13;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			stopinput2 {path1}/GABA
		end
	end
	
	for(i=21;i<23;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			stopinput2 {path1}/GABA
		end
	end
	
	for(i=31;i<33;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			stopinput2 {path1}/GABA
		end
	end
	for(i=41;i<43;i=i+1)
		foreach path1 ({el {cellpath}/secdend{i}})
			stopinput2 {path1}/GABA
		end
	end
	int j=1
	int k=1
	 // tert spines
	
	for(j=1;j<17;j=j+1)
		for(k=1;k<12;k=k+1)
			foreach path2 ({el {cellpath}/tertdend{j}_{k}})
				stopinput2 {path2}/GABA
			end
		end
	end
end