numTrial = 1
StoreEveryTrial = 1 // Determines how often StoreW is called
//PLAST=0 // NOT USED
ScaleExEx =0 //1 //0.5 : 0=no plasticity, 1=plasticity: SCALING
ScaleExInh=0
ScaleInhEx=0
STDP = 0 //1
STDPINH = 0
GRAPHICS = 1
COMPUTE_SLOPE = 1
t_slope_start = 20
t_slope_window = 0.6
alfa_ScaleExEx = 0.5
alfa_ScaleExInh = 0.5
WRITE_VOLTAGE_FILE = 0 // Write voltage.dat file (can get big really easy...)
WRITE_W_FILE = 0 // Write W.dat file (can get big really easy...)
WRITE_RASTER_FILE = 0
xopen("NETWORK.oc")
FILE = 1 // Write output files
xopen("PANEL_PARAMETERS.oc") // Loads panel for PARAMETERS
objectvar fSynSpace_Out
fSynSpace_Out = new File()
fSynSpace_Out.wopen("SynSpace_Out.dat")
P1_start = 0.02 // Input->Ex 0.02
P1_step_size = 0.00075 //0.00055
P1_steps = 35 //48
P2_start = 0 // 0.1 Inh->Ex
P2_step_size = 0.0175 //0.0127
P2_steps = 35 //48
nr_iterations = 50 // Number of times the whole sampling of synaptic space will run
xopen("ParamExtract.oc") // functions to get some stats on the voltage traces
proc MULTI() { local p1, p2, ii, j, input_nr, run_t, input_block, input_idx
// Sets EXCITATORY synaptic strengths ONTO Inh neurons <-- This synapse is FIXED W throughout
for (ii = 0; ii < nInh; ii = ii + 1) {
j=0
sExInh[ii][j].gmaxAMPA = (totEx_Inh/nInh)*1.7
}
for (ii = 0; ii < nInh; ii = ii + 1) {
for (j = 1; j < nEx_Inh; j = j + 1) {
// As this is, all the inputs WITHIN 'A' Inh will be the same, but then one Inh will receive all the weak inputs, the other all the strong, etc...
sExInh[ii][j].gmaxAMPA = ((totEx_Inh/nInh)/3.8) * (1 + (ii/nInh)*1.4)
}
}
for (p1 = 1; p1 <= P1_steps; p1 = p1 + 1) { // Runs for parameter 1
for (p2 = 1; p2 <= P2_steps; p2 = p2 + 1) { // Runs for parameter 2
print "P1: ",p1,"P2: ",p2
for (ii = ExINPUT; ii < nEx; ii = ii + 1) { // Sets EXCITATORY synaptic strengths ONTO true Ex neurons (not input)
for (j = 0; j < nEx_Ex; j = j + 1) {
sExEx[ii][j].gmaxAMPA = (P1_start + P1_step_size * (p1 - 1)) / ExINPUT
}
}
for (ii = ExINPUT; ii < nEx; ii = ii + 1) {
for (j = 0; j < nInh_Ex; j = j + 1) {
sInhEx[ii][j].gmaxGABA = (P2_start + P2_step_size * (p2 - 1)) / nInh // 18 Oct 2007, replaced ExINPUT here
}
}
// Selects which input cells will fire
for (ipt_idx = 0; ipt_idx < ExINPUT; ipt_idx = ipt_idx + 1) { // RESET: Inhibits all the inputs from firing
Ex[ipt_idx].soma.end_INPUT = 0
}
for (input_block = 0; input_block < ExINPUT_end; input_block = input_block + ExINPUT_block_size) { // Runs code for different inputs firing
for (input_nr = 0; input_nr < ExINPUT_block_size; input_nr = input_nr + 1) { // Gets INPUTS firing in block fashion
input_idx = input_block + input_nr
Ex[input_block + input_nr].soma.end_INPUT = 20
}
for (run_t = 1; run_t <= nr_iterations; run_t = run_t + 1) { // Repeats the same conditions "nr_iterations" times
InitCond()
for (trial=1;trial<=numTrial;trial=trial+1) { // This are the trials, if learning is implemented
SCALE_ExIAF = alfa_ScaleExEx * ScaleExEx //0.5
SCALE_InhIAF = alfa_ScaleExInh * ScaleExInh
//print ">>>>>>>>>>>>>>>Trial=",trial
if (trial%StoreEveryTrial==0 || trial==1) {
if (WRITE_W_FILE) StoreW()
}
run()
//get_EPSP_amp()
max_Ex_EPSP_amp = 0
max_Inh_EPSP_amp = 0
total_Inh_firing = get_how_many_Inh_fired()
slope = 0
if (COMPUTE_SLOPE) {
slope = get_EPSP_slope(Ex[0].soma.start_INPUT, t_slope_start, t_slope_window, dt)
}
// Write synaptic space OUTPUT FILE
// fOutParam.printf("%4d\t%8.4f\t%4d\n",p1,sExEx[1][0].gmaxAMPA,Ex[1].soma.Ca_ExIAF) // JUST BACKUP LINE
total_Inh_firing = 0
for (Inh_counter = 0; Inh_counter < nInh; Inh_counter = Inh_counter + 1) {
if (Inh[Inh_counter].soma.Ca_InhIAF > 1 ) {
my_single_Inh_firing = 1
} else {
my_single_Inh_firing = Inh[Inh_counter].soma.Ca_InhIAF
}
total_Inh_firing = total_Inh_firing + my_single_Inh_firing
}
//fSynSpace_Out.printf("%d\t%f\t%d\t%f\t%d\t%f\t%d\t%f\t%d\t%d\t%f\n", p1, sExEx[ExINPUT][0].gmaxAMPA, Ex[ExINPUT].soma.Ca_ExIAF, max_Ex_EPSP_amp, p2, sInhEx[ExINPUT][0].gmaxGABA, Inh[0].soma.Ca_InhIAF, max_Inh_EPSP_amp, total_Inh_firing, input_idx+1, slope)
fSynSpace_Out.printf("%d\t%d\t%d\t%d\t%d\t%.2e\n", p1, Ex[ExINPUT].soma.Ca_ExIAF, p2, total_Inh_firing, input_idx+1, slope)
} // End TRIALS loop
} // End nr_iterations
} // End variable inputs
} // End P1
} // End times_it_will_run
//CLOSEFILES()
fSynSpace_Out.close()
print "Code finished running successfully!"
}
// Writes parameters used to scan parameter space
objectvar fSynSpace_Param
fSynSpace_Param = new File()
fSynSpace_Param.wopen("SynSpace_Param.dat")
fSynSpace_Param.printf("P1_start = %f\n", P1_start)
fSynSpace_Param.printf("P1_step_size = %f\n", P1_step_size)
fSynSpace_Param.printf("P1_steps = %d\n", P1_steps)
fSynSpace_Param.printf("P2_start = %f\n", P2_start)
fSynSpace_Param.printf("P2_step_size = %f\n", P2_step_size)
fSynSpace_Param.printf("P2_steps = %d\n", P2_steps)
fSynSpace_Param.printf("nr_repetitions = %d\n", nr_iterations)
//fSynSpace_Param.printf("alfa_ScaleExEx = %f\n", alfa_ScaleExEx)
//fSynSpace_Param.printf("alfa_ScaleExInh = %f\n", alfa_ScaleExInh)
fSynSpace_Param.printf("AmpaMaxExEx = %f\n", AmpaMaxExEx)
fSynSpace_Param.printf("AmpaMaxExInh = %f\n", AmpaMaxExInh)
fSynSpace_Param.printf("GabaMax = %f\n", GabaMax)
fSynSpace_Param.printf("AMPANMDARATIO_EPlasSyn = %f\n", AMPANMDARATIO_EPlasSyn)
fSynSpace_Param.printf("totEx_Ex = %f\n", totEx_Ex)
fSynSpace_Param.printf("totEx_Inh = %f\n", totEx_Inh)
fSynSpace_Param.printf("totInh_Ex = %f\n", totInh_Ex)
fSynSpace_Param.printf("ExNoise = %f\n", ExNoise)
fSynSpace_Param.printf("InhNoise = %f\n", InhNoise)
fSynSpace_Param.printf("Thr_IAF_noise = %f\n", Thr_IAF_noise)
fSynSpace_Param.printf("nEx_Ex = %d\n", nEx_Ex)
fSynSpace_Param.printf("nEx_Inh = %d\n", nEx_Inh)
fSynSpace_Param.printf("nInh_Ex = %d\n", nInh_Ex)
fSynSpace_Param.printf("nEx = %d\n", nEx)
fSynSpace_Param.printf("nInh = %d\n", nInh)
fSynSpace_Param.printf("ExINPUT = %d\n", ExINPUT)
fSynSpace_Param.printf("ExINPUT_block_size = %d\n", ExINPUT_block_size)
fSynSpace_Param.printf("ExINPUT_end = %d\n", ExINPUT_end)
fSynSpace_Param.printf("ExEx_Delay = %f\n", Ex[ExINPUT].soma.Delay_EPlasSom)
fSynSpace_Param.printf("ExInh_Delay = %f\n", Ex[ExINPUT-1].soma.Delay_EtoIPlasSom)
fSynSpace_Param.printf("InhEx_Delay = %f\n", Inh[nInh-1].soma.Delay_IPlasSom)
//fSynSpace_Param.printf("ElapsedTime = %f\n", ElapsedTime)
fSynSpace_Param.printf("INPUT_diam = %d\n", Ex[0].soma.diam)
fSynSpace_Param.printf("INPUT_L = %d\n", Ex[0].soma.L)
fSynSpace_Param.printf("INPUT_gpas = %f\n", Ex[0].soma.gPAS_ExIAF)
fSynSpace_Param.printf("Ex_diam = %d\n", Ex[ExINPUT].soma.diam)
fSynSpace_Param.printf("Ex_L = %d\n", Ex[ExINPUT].soma.L)
fSynSpace_Param.printf("Ex_soma_e_pas = %f\n", Ex[ExINPUT].soma.ePAS_ExIAF)
fSynSpace_Param.printf("Ex_soma_g_pas = %f\n", Ex[ExINPUT].soma.gPAS_ExIAF)
fSynSpace_Param.printf("Thr_ExIAF = %f\n", Ex[ExINPUT].soma.Thr_ExIAF)
fSynSpace_Param.printf("ePAS_ExIAF = %f\n", Ex[ExINPUT].soma.ePAS_ExIAF)
fSynSpace_Param.printf("gPAS_ExIAF = %f\n", Ex[ExINPUT].soma.gPAS_ExIAF)
fSynSpace_Param.printf("eOFF_ExIAF = %f\n", Ex[ExINPUT].soma.eOFF_ExIAF)
fSynSpace_Param.printf("Inh_diam = %d\n", Inh[0].soma.diam)
fSynSpace_Param.printf("Inh_L = %d\n", Inh[0].soma.L)
fSynSpace_Param.printf("Inh_gpas = %f\n", Inh[0].soma.gPAS_InhIAF)
fSynSpace_Param.printf("WRITE_VOLTAGE_FILE = %d\n", WRITE_VOLTAGE_FILE)
//fSynSpace_Param.printf("WRITE_CONDUCTANCE_FILE = %d\n", WRITE_CONDUCTANCE_FILE)
fSynSpace_Param.printf("GRAPHICS = %d\n", GRAPHICS)
fSynSpace_Param.printf("WRITE_RASTER_FILE = %d\n", WRITE_RASTER_FILE)
//fSynSpace_Param.printf("PLOT_CONDUCTANCES = %d\n", PLOT_CONDUCTANCES)
//fSynSpace_Param.printf("WRITE_IW_FILE = %d\n", WRITE_IW_FILE)
fSynSpace_Param.printf("COMPUTE_SLOPE = %d\n", COMPUTE_SLOPE)
fSynSpace_Param.printf("t_slope_start = %.2f\n", t_slope_start)
fSynSpace_Param.printf("t_slope_window = %.2f\n", t_slope_window)
fSynSpace_Param.printf("dt = %.3f\n", dt)
fSynSpace_Param.printf("tstop = %d\n", tstop)
print "Wrote Synaptic Space Parameters file successsfuly!\n"
fSynSpace_Param.close()
// Calculates how many Inh fired
func get_how_many_Inh_fired() { local i, global_Ca_Inh
global_Ca_Inh = 0
for(i = 0; i < nInh; i = i + 1) {
if (Inh[i].soma.Ca_InhIAF > 1) {
binary_counter = 1
} else {
binary_counter = Inh[i].soma.Ca_InhIAF
}
global_Ca_Inh = global_Ca_Inh + binary_counter
}
return global_Ca_Inh
}
proc InitCond() { local i, j
// ExEx
for(i=ExINPUT; i<nEx; i=i+1) { // ExINPUT CELLS
for(j=0;j<nEx_Ex;j=j+1) {
sExEx[i][j].scale = ScaleExEx
sExEx[i][j].stdp = STDP
} //end nInh_Ex
}
// ExInh
for(i=0; i<nInh; i=i+1) { // ExINPUT CELLS
for(j=0;j<nEx_Inh;j=j+1) {
sExInh[i][j].scale = ScaleExInh
sExInh[i][j].stdp = STDP
} //end nInh_Ex
}
// InhEx
for(i=ExINPUT; i<nEx; i=i+1) {
for(j=0;j<nInh_Ex;j=j+1) {
sInhEx[i][j].scale = ScaleInhEx
sInhEx[i][j].stdp = STDPINH
}
}
} //InitCond()