// File for implementing photocurent input into the photoreceptor layer

load_file("create_Cells.hoc")
load_file("Parameters.hoc")

objref darkinput_PR_upper[PR_total_upper_cells], darkinput_PR_lower[PR_total_lower_cells]
objref brightinput_PR_upper[PR_total_upper_cells], brightinput_PR_lower[PR_total_lower_cells]
objref input_amps, input_times
objref sav_input_amps, sav_input_times

number_pulses = 16
delay = 400

proc create_Input() {

    input_amps = new Vector(number_pulses+1)
    input_times = new Vector(number_pulses+1)

    // 2*RodStimAmp to reach threshold value
    for(i = 0; i < number_pulses; i = i + 2) {
        input_amps.x[i] = (i*0.1*RodStimAmp)/1000
        input_amps.x[i+1] = ((-i*0.1)*RodStimAmp)/1000
        input_times.x[i] = delay + i*500
        input_times.x[i+1] = delay + (i+1)*500
    }
    input_amps.x[number_pulses] = 0
    input_times.x[number_pulses] = input_times.x[number_pulses-1] + 500

    for i = 0, PR_total_upper_cells - 1 {
        if(PR_upper_cell_type.x[i][0] == 1) {
            PR_upper[i].soma darkinput_PR_upper[i] = new IinjLTDim(0.5)
            darkinput_PR_upper[i].amp = 0
            darkinput_PR_upper[i].ssI = 100 // steady state gray value
            darkinput_PR_upper[i].del = 0
            darkinput_PR_upper[i].ton = Simul_Time

            PR_upper[i].soma brightinput_PR_upper[i] = new IClamp(0.5)
            brightinput_PR_upper[i].del = 0
            brightinput_PR_upper[i].dur = 1e9

            input_amps.play(&brightinput_PR_upper[i].amp, input_times, 1)

        }
        if(PR_upper_cell_type.x[i][0] == 2) {
            PR_upper[i].soma darkinput_PR_upper[i] = new IinjLT_cone(0.5)
            darkinput_PR_upper[i].amp = 0
            darkinput_PR_upper[i].ssI = 100
            darkinput_PR_upper[i].del = 0
            darkinput_PR_upper[i].ton = Simul_Time

            PR_upper[i].soma brightinput_PR_upper[i] = new IClamp(0.5)
            brightinput_PR_upper[i].del = 0
            brightinput_PR_upper[i].dur = 1e9

            input_amps.play(&brightinput_PR_upper[i].amp, input_times, 1)

        }
    }

    for i = 0, PR_total_lower_cells - 1 {
        if(PR_lower_cell_type.x[i][0] == 1) {
            PR_lower[i].soma darkinput_PR_lower[i] = new IinjLTDim(0.5)
            darkinput_PR_lower[i].amp = 0
            darkinput_PR_lower[i].ssI = 100
            darkinput_PR_lower[i].del = 0
            darkinput_PR_lower[i].ton = Simul_Time

            PR_lower[i].soma brightinput_PR_lower[i] = new IClamp(0.5)
            brightinput_PR_lower[i].del = 0
            brightinput_PR_lower[i].dur = 1e9

            input_amps.play(&brightinput_PR_lower[i].amp, input_times, 1)

        }
        if(PR_lower_cell_type.x[i][0] == 2) {
            PR_lower[i].soma darkinput_PR_lower[i] = new IinjLT_cone(0.5)
            darkinput_PR_lower[i].amp = 0
            darkinput_PR_lower[i].ssI = 100
            darkinput_PR_lower[i].del = 0
            darkinput_PR_lower[i].ton = Simul_Time

            PR_lower[i].soma brightinput_PR_lower[i] = new IClamp(0.5)
            brightinput_PR_lower[i].del = 0
            brightinput_PR_lower[i].dur = 1e9

            input_amps.play(&brightinput_PR_lower[i].amp, input_times, 1)

        }
    }

    sav_input_amps = new File()
    sav_input_amps.wopen("Matrices/input_amps.csv")
    input_amps.printf(sav_input_amps)
    sav_input_amps.close

    sav_input_times = new File()
    sav_input_times.wopen("Matrices/input_times.csv")
    input_times.printf(sav_input_times)
    sav_input_times.close

}