//genesis

// This is the main script for setting up and running a network.


	float dt = 10e-6 
	str label = "IMTEK" 
   	str filename = "./" 

	setclock 0 {dt} 
	setclock 1 50e-6 
	float tmax = 0.15
	str name

include defaults.g



// making the neurons

/*  Make L5P pyramidal cell   */
include ../L5P37C/L5P_make.g
create_L5P /L5P 0 0 0 

/*  Make L5P pyramidal cell without tuft or backpropagating spike */
include ../L5P37C-notuft/L5P_notuft_make.g
create_L5Pnotuft /L5Pnotuft -0.00004 0 0.0002 

/*  Make neuron with narrow spikes  */
include ../L5P37C-onlybasal/L5P_onlybasal_make.g
create_L5Ponlybasal /L5Ponlybasal 0.00004 0 0.0001 

/* Make additional inhibitory neuron */
create_L5Ponlybasal /L5Ponlybasal2 -20e-6 -30e-6 0.0003 

/* Make additional excitatory neuron */
create_L5Pnotuft /L5Pnotuft2 20e-6  30e-6 0.0003 

cd ../Network_5neuron_IMTEK



/* Set up graphical and ascii output */

include ../Output/L5P_view.g
	add_xcell /L5P
	add_xcell /L5Ponlybasal
	add_xcell /L5Pnotuft
	add_xcell /L5Ponlybasal2
	add_xcell /L5Pnotuft2

//include ../Output/L5P_graph.g
//        add_xgraph /L5P
//	add_xgraph /L5Ponlybasal
//	add_xgraph /L5Pnotuft
//	add_xgraph /L5Ponlybasal2
//	add_xgraph /L5Pnotuft2


include ../Output/L5P_ascout.g
	add_ascout /L5P
	add_ascout /L5Ponlybasal
	add_ascout /L5Pnotuft
	add_ascout /L5Ponlybasal2
	add_ascout /L5Pnotuft2


/* Set up electrode arrays  */ 

// include ../Electrodes/electrodesIMTEK_make.g
// include ../Electrodes/electrodes_connect.g
//	connect_to_electrodes L5P
//	connect_to_electrodes L5Ponlybasal
//	connect_to_electrodes L5Pnotuft

//	connect_to_electrodes L5Ponlybasal2
//	connect_to_electrodes L5Pnotuft2

// useclock   /electrode_array    1
// useclock   /electrode_array/##[]    1


/* Setup the hines solvers  */
include Network_hsolve.g

	make_hsolve /L5P
	make_hsolve /L5Ponlybasal
	make_hsolve /L5Pnotuft

	make_hsolve /L5Ponlybasal2
	make_hsolve /L5Pnotuft2

include ../Output/L5P_graphsolve.g
        add_xgraph /L5P
	add_xgraph /L5Ponlybasal
	add_xgraph /L5Pnotuft
	add_xgraph /L5Ponlybasal2
	add_xgraph /L5Pnotuft2
	

/* generate for each compartment of L5P an associated fibre  */

	randseed 54321 // 12345


// make the fibres using L5P as template neuron
include ../Fibres/Fibres_make

	make_fibres /Excitatory_fibres /L5P/p# 
	make_fibres /Inhibitory_fibres /L5P/p#


// connect the fibres to the neurons
include ../Fibres/Fibres_connect

	connect_horizontally 	/Excitatory_fibres/FF/fibre[] \
				/L5P/p#[][TYPE=compartment]/AMPA \
				0.05 {weight_AMPA_synapse * 0.5} 0

	connect_horizontally 	/Excitatory_fibres/FBintra/fibre[] \
				/L5P/p#[][TYPE=compartment]/AMPA \
				0.05 {weight_AMPA_synapse * 0.5} 0.02

	connect_horizontally 	/Inhibitory_fibres/FF/fibre[] \
				/L5P/p#[][TYPE=compartment]/GABA \
				0.025 {weight_GABA_synapse * 0.25} 0.002

	connect_horizontally 	/Inhibitory_fibres/FBintra/fibre[] \
				/L5P/p#[][TYPE=compartment]/GABA \
				0.025 {weight_GABA_synapse * 0.25} 0.033 // 0.025


	connect_horizontally 	/Excitatory_fibres/FF/fibre[] \
				/L5Ponlybasal/p#[][TYPE=compartment]/AMPA \
				0.1 {weight_AMPA_synapse * 0.15} 0

	connect_horizontally 	/Excitatory_fibres/FBintra/fibre[] \
				/L5Ponlybasal/p#[][TYPE=compartment]/AMPA \
				0.1 {weight_AMPA_synapse * 0.10} 0.02

	connect_horizontally 	/Inhibitory_fibres/FF/fibre[] \
				/L5Ponlybasal/p#[][TYPE=compartment]/GABA \
				0.025 {weight_GABA_synapse * 0.7} 0.002

	connect_horizontally 	/Inhibitory_fibres/FBintra/fibre[] \
				/L5Ponlybasal/p#[][TYPE=compartment]/GABA \
				0.025 {weight_GABA_synapse * 0.7} 0.033


	connect_horizontally 	/Excitatory_fibres/FF/fibre[] \
				/L5Pnotuft/p#[][TYPE=compartment]/AMPA \
				0.05 {weight_AMPA_synapse * 0.8} 0

	connect_horizontally 	/Excitatory_fibres/FBintra/fibre[] \
				/L5Pnotuft/p#[][TYPE=compartment]/AMPA \
				0.05 {weight_AMPA_synapse * 0.8} 0.02

	connect_horizontally 	/Inhibitory_fibres/FF/fibre[] \
				/L5Pnotuft/p#[][TYPE=compartment]/GABA \
				0.02 {weight_GABA_synapse * 0.4} 0.002

	connect_horizontally 	/Inhibitory_fibres/FBintra/fibre[] \
				/L5Pnotuft/p#[][TYPE=compartment]/GABA \
				0.02 {weight_GABA_synapse * 0.4} 0.033


// I keep the same connections for new neurons 4 and 5
// and do not include them in feedback

	connect_horizontally 	/Excitatory_fibres/FF/fibre[] \
				/L5Ponlybasal2/p#[][TYPE=compartment]/AMPA \
				0.4 {weight_AMPA_synapse * 0.15} 0

	connect_horizontally 	/Excitatory_fibres/FBintra/fibre[] \
				/L5Ponlybasal2/p#[][TYPE=compartment]/AMPA \
				0.1 {weight_AMPA_synapse * 0.10} 0.02

	connect_horizontally 	/Inhibitory_fibres/FF/fibre[] \
				/L5Ponlybasal2/p#[][TYPE=compartment]/GABA \
				0.025 {weight_GABA_synapse * 0.7} 0.002

	connect_horizontally 	/Inhibitory_fibres/FBintra/fibre[] \
				/L5Ponlybasal2/p#[][TYPE=compartment]/GABA \
				0.025 {weight_GABA_synapse * 0.7} 0.033


	connect_horizontally 	/Excitatory_fibres/FF/fibre[] \
				/L5Pnotuft2/p#[][TYPE=compartment]/AMPA \
				0.05 {weight_AMPA_synapse * 0.8} 0

	connect_horizontally 	/Excitatory_fibres/FBintra/fibre[] \
				/L5Pnotuft2/p#[][TYPE=compartment]/AMPA \
				0.05 {weight_AMPA_synapse * 0.8} 0.02

	connect_horizontally 	/Inhibitory_fibres/FF/fibre[] \
				/L5Pnotuft2/p#[][TYPE=compartment]/GABA \
				0.02 {weight_GABA_synapse * 0.4} 0.002

	connect_horizontally 	/Inhibitory_fibres/FBintra/fibre[] \
				/L5Pnotuft2/p#[][TYPE=compartment]/GABA \
				0.02 {weight_GABA_synapse * 0.4} 0.033



include ../Output/L5P_history.g
	add_history  /L5P
	add_history  /L5Ponlybasal
	add_history  /L5Pnotuft

	add_history  /L5Ponlybasal2
	add_history  /L5Pnotuft2


include nsynapses

include ../Fibres/Firing_rate_profile.g

// This gives different weights to the afferent fibres according to their depth (layer) in neocortex

	make_firing_rate_profile  /Excitatory_fibres/FF  0.0008  0.0002 2 0 0.0004 1 10 

	make_firing_rate_profile  /Excitatory_fibres/FBintra  0.001  0.0002 2 0 0.0004 1 10 

	make_firing_rate_profile  /Inhibitory_fibres/FF  0.0008  0.0004 1 0 0.0002 2 45 

	make_firing_rate_profile  /Inhibitory_fibres/FBintra  0.001  0.0004 1 0 0.0002 2 45 


include ../Fibres/Harsch-Robinson_modulation.g

// This gives a temporal profile to the spike rate of the subcortical afferent fibres
	Harsch_Robinson_modulation 30 0.1 


// This gives a temporal profile to the intracortical fibers

include ../Fibres/Firing_rate_modulation.g

resched 


randseed 12345

// current injection

//setfield /L5P/soma inject 20e-12 // 800e-12
reset


// just a check, recording electrode positions
//include ../Electrodes/electrode-positions.g

// step 25 -t

step 0.1 -t

//quit