Optical stimulation of a channelrhodopsin-2 positive pyramidal neuron model (Foutz et al 2012)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:153196
A computational tool to explore the underlying principles of optogenetic neural stimulation. This "light-neuron" model consists of theoretical representations of the light dynamics generated by a fiber optic in brain tissue, coupled to a multicompartment cable model of a cortical pyramidal neuron (Hu et al. 2009, ModelDB #123897) embedded with channelrhodopsin-2 (ChR2) membrane dynamics. Simulations predict that the activation threshold is sensitive to many of the properties of ChR2 (density, conductivity, and kinetics), tissue medium (scattering and absorbance), and the fiber-optic light source (diameter and numerical aperture). This model system represents a scientific instrument to characterize the effects of optogenetic neuromodulation, as well as an engineering design tool to help guide future development of optogenetic technology.
Reference:
1 . Foutz TJ, Arlow RL, McIntyre CC (2012) Theoretical principles underlying optical stimulation of a channelrhodopsin-2 positive pyramidal neuron. J Neurophysiol 107:3235-45 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Axon; Channel/Receptor; Dendrite;
Brain Region(s)/Organism:
Cell Type(s): Neocortex V1 L6 pyramidal corticothalamic GLU cell;
Channel(s): I K; I M; I K,Ca; I Sodium; I Calcium; Channelrhodopsin (ChR);
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; Python;
Model Concept(s): Detailed Neuronal Models; Action Potentials; Parameter sensitivity; Intracortical Microstimulation; Neuromodulation;
Implementer(s): MacIntyre, CC [ccm4 at case.edu]; Foutz, Thomas J [tfoutz at uw.edu]; Arlow, Richard L [richard.arlow at case.edu];
Search NeuronDB for information about:  Neocortex V1 L6 pyramidal corticothalamic GLU cell; I K; I M; I K,Ca; I Sodium; I Calcium; Channelrhodopsin (ChR);
: test units: modlunit ostim.mod

TITLE Optical Stimulation

NEURON {
    POINT_PROCESS ostim
    RANGE radius
    RANGE delay, amp, dur
    RANGE pulses, isi, pcount
    POINTER irradiance
    POINTER flux
    POINTER photons
    POINTER tstimon
    POINTER tstimoff
    RANGE wavelength
}

UNITS {
    (mW) = (milliwatt)
    (W)  = (watt)
    PI   = (pi)             (1)

}

PARAMETER {
    radius    = 100             (um)
    delay     = 1               (ms)
    dur       = 5               (ms)
    : Aravanis et al 2007
    :     Psrc = 20 mW
    :     Af = 0.6
    :     r = 0.1 mm
    :     Irradiance = Af * Psrc/(pi * r**2) = 380 mW/mm2 --> 0.38 W/mm2 --> 38 W/cm2
    amp = 38                    (W/cm2)
    wavelength = 4.73e-7        (m)
    h = 6.6260693e-34           (m2 kg/s)  : planck's constant
    c = 299792458.0             (m/s)      : speed of light

    : Number of pulses
    pulses = 1
    isi    = 1                 (ms)        : Inter-spike interval
}

ASSIGNED {
    on
    irradiance (W/cm2)         : W/cm2
    flux      (1/ms cm2)       : photons/ms cm2
    photons   (photons/ms)     : photons/ms
    pcount
    tstimon
    tstimoff
}

INITIAL {
    on          = 0
    pcount      = pulses
    irradiance   = 0
    flux        = 0
    photons     = 0
    net_send(delay,1)          : Sends a packet that should arrive after given initial_delay
    tstimon     = 0
    tstimoff    = 0
}

BEFORE BREAKPOINT {
    if (on==0) {
        irradiance = 0
        photons   = 0
        flux      = 0
    } else if (on==1) {
        calc_irradiance_photons_flux()
    }
}

NET_RECEIVE (w) {
    if (flag==1) {
        on = 1
        tstimon = t
        pcount = pcount - 1
        if (pcount>0) {
            net_send(dur,3)
        } else {
            net_send(dur,2)
        }
    }else if (flag==2) { : stimulus complete
        on = 0
        tstimoff = t
    }else if (flag==3) { : spike train
        on = 0
        net_send(isi,1)
        tstimoff = t
    }

}

FUNCTION calc_irradiance_photons_flux() {
    LOCAL photon_energy, area
    irradiance = amp
    photon_energy = h * c / wavelength : J / photon
    flux = (1 / 1000) * amp / photon_energy : (1 s / 1000 ms) * (W/cm2) * (photons/W s)
                                              :     --> photons/ms cm2
    area = PI * (radius ^ 2) : um2
    photons = 1e-8 * flux * area : (1 cm2/1e8 um2) * (um2) * (photons/ms cm2)
}


Loading data, please wait...