TITLE ZAP current

COMMENT
-----------------------------------------------------------------------------

    ZAP current model for membrane impedance analysis
    ==================================================

 IMPLEMENTATION

  This mechanism is implemented as a nonspecific current defined as a
  point process, mimicking a current-clamp stimulation protocol, injecting
  a sinusoidally oscillating waveform I(t), with instantaneous frequency
  changing in time (i.e. chirp or ZAP waveform).
  
  I(t) = A * sin (2 pi (f(t) - Fstart) ( t - ttstart) / 2 )
  
  f(t) = Fstart + (Fstop - Fstart) * ( t - ttstart) / ( ttstop - ttstart)
  A(t) = Astart + (Astop - Astart) * ( t - ttstart) / ( ttstop - ttstart)
 
  Note: Although counterintuitive at a first glance, the above expression of I(t)
        indeed correspond to a sinusoid starting with the initial frequency Fstart
        that is linearly increasing up to Fstop while the time goes from ttstart to
        ttstop.

  Note: 
  Since this is an electrode current, positive values of i depolarize the cell and in the
  presence of the extracellular mechanism there will be a change in vext since i is not a
  transmembrane current but a current injected directly to the inside of the cell.
 
  Refer to: Cali' et al. (2007)

 PARAMETERS

  This mechanism takes the following parameters:

  Ioff      = 0. (nA) : initial current offset.
  Astart    = 0. (nA) : initial value of the (linearly changing) amplitude of the ZAP current.
  Astop     = 0. (nA) : final value of the (linearly changing) amplitude of the ZAP current.
  ttstart   = 0. (ms) : starting time of the stimulation.
  ttstop    = 0. (ms) : final time of the stimulation.
  Fstart    = 0. (Hz) : initial value of the (linearly changing) frequency of the ZAP current.
  Fstop     = 0. (Hz) : final value of the (linearly changing) frequency of the ZAP current.

 Written by M. Giugliano and C. Cali', Brain Mind Institute, EPFL, March 2006

-----------------------------------------------------------------------------
ENDCOMMENT


INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}

NEURON {
    POINT_PROCESS Izap
    RANGE Astart, Astop, ttstart, ttstop, Fstart, Fstop, Ioff
    NONSPECIFIC_CURRENT i
}

UNITS {
    (nA) = (nanoamp) 
    (mV) = (millivolt)
}

PARAMETER {
  Ioff      = 0. (nA) : initial current offset
  Astart    = 0. (nA) : initial value of the (linearly changing) amplitude of the ZAP current
  Astop     = 0. (nA) : final value of the (linearly changing) amplitude of the ZAP current
  ttstart   = 0. (ms) : starting time of the stimulation..
  ttstop    = 0. (ms) : final time of the stimulation..
  Fstart    = 0. (Hz) : initial value of the (linearly changing) frequency of the ZAP current
  Fstop     = 0. (Hz) : final value of the (linearly changing) frequency of the ZAP current
}

ASSIGNED {
    i     (nA)        : fluctuating current
}


BREAKPOINT {
    if ((t < ttstart) || (t > ttstop)) {  i = - Ioff }
    else { 
    i    = - (Ioff + (  ((Astart*(ttstop-t)/(ttstop-ttstart)) + ((t-ttstart)/(ttstop-ttstart)) * Astop)) * sin(  (0.0062831853071795866 * Fstart + ((t-ttstart)/(ttstop-ttstart)) * 0.5 * 0.0062831853071795866 * (Fstop - Fstart) ) * (t-ttstart)))        
    }
}