NEURON {
    POINT_PROCESS syn_ampa_sat
    RANGE tau_o, tau_c, erev, syn_step, ampa_sat, alpha, count
    NONSPECIFIC_CURRENT i
}

UNITS {
    (nA) = (nanoamp)
    (uA) = (microamp)
    (mA) = (milliamp)
    (A) = (amp)
    (mV) = (millivolt)
    (mS) = (millisiemens)
    (uS) = (microsiemens)
    (molar) = (1/liter)
    (kHz) = (kilohertz)
    (mM) = (millimolar)
    (um) = (micrometer)
    (S) = (siemens)
}

PARAMETER {
    tau_o = 0.2 (ms)
    tau_c = 3.0 (ms)
    erev = 0.0 (mV)
    syn_step = 1.25
    ampa_sat = 100 :0.001
    alpha = 0.95
}

ASSIGNED {
    v (mV)
    i (nA)
}

STATE {
    o
    c
}

INITIAL {
    o = 0
    c = 0
}

BREAKPOINT {
    SOLVE states METHOD cnexp
    i = (c - o) * (v-erev)
}

NET_RECEIVE(weight (uS), w, count) {
    w=weight*pow(alpha,count)
    :o = o + syn_step*w
    :c = c + syn_step*w
    o = o + syn_step*(1-(c-o)/ampa_sat)*w
    c = c + syn_step*(1-(c-o)/ampa_sat)*w
    :printf("%g \n", c-o)
    count=count+1
}


DERIVATIVE states {
    o' = -o/tau_o
    c' = -c/tau_c
}