Survey of electrically evoked responses in the retina (Tsai et al 2017)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:262389
"Cones and horizontal cells are interconnected to adjacent cones and horizontal cells, respectively, with gap junctions. In particular, the horizontal cell gap junctional conductance is modulated by exogenous factors. What roles does this conductance play in the electrically evoked responses of horizontal cells? To address this question, we constructed a computational model consisting of the cone and horizontal cell layer..."
Reference:
1 . Tsai D, Morley JW, Suaning GJ, Lovell NH (2017) Survey of electrically evoked responses in the retina - stimulus preferences and oscillation among neurons. Sci Rep 7:13802 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Synapse; Extracellular;
Brain Region(s)/Organism: Retina;
Cell Type(s): Retina photoreceptor cone GLU cell; Retina horizontal cell;
Channel(s):
Gap Junctions: Gap junctions;
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Activity Patterns; Oscillations;
Implementer(s): Tsai, David [d.tsai at unsw.edu.au];
Search NeuronDB for information about:  Retina photoreceptor cone GLU cell;
// Script to set up an environment for testing the synaptic interaction between a 
// pair of identical cells, which could be either cones or photoreceptors.
//
// Network topology:
//      cell1
//       | ^
//  [+]  | |  [-]
//       v |
//      cell2
// 
// Inter-cell displacement x = 0 y = 0 z = -20

// global parameters
SYN_EX_THR     = -47
SYN_EX_SLOPE   = 5.0
SYN_EX_GMAX    = 0.050
SYN_IN_THR     = -47
SYN_IN_SLOPE   = 5.0
SYN_IN_GMAX    = -0.050


/////////////////////////////////////////////////////////////////////

load_file("HzCell.hoc")
load_file("Cone.hoc")
objref cell1, cell2

// construct cells
proc createHzHzPair() {
    cell1 = new HzCell(0, 0, 0)
    cell2 = new HzCell(0, 0, -20)
}
proc createConeConePair() {
    cell1 = new Cone(0, 0, 0)
    cell2 = new Cone(0, 0, -20)
}

objref synEx, pcEx
objref synIn, pcIn
proc createSynapses() {
    // excitatory synapse
    pcEx = new ParallelContext()
    cell2.soma synEx = new Synapse(0.5)
    cell1.soma pcEx.source_var(&v(0.5), 1)
    cell2.soma pcEx.target_var(synEx, &synEx.V_pre, 1)
    synEx.v_th = SYN_EX_THR
    synEx.v_slope = SYN_EX_SLOPE
    synEx.g_max = SYN_EX_GMAX
    { pcEx.setup_transfer() }

    // inhibitory synapse
    pcIn = new ParallelContext()
    cell1.soma synIn = new Synapse(0.5)
    cell2.soma pcIn.source_var(&v(0.5), 2)
    cell1.soma pcIn.target_var(synIn, &synIn.V_pre, 2)
    synIn.v_th = SYN_IN_THR
    synIn.v_slope = SYN_IN_SLOPE
    synIn.g_max = SYN_IN_GMAX
    { pcIn.setup_transfer() }
}


/////////////////////////////////////////////////////////////////////

// intracellular stimulus
objref stim[2]
proc intraStim() { local i
    cell1.soma stim[0] = new IClamp(0.5)
    cell2.soma stim[1] = new IClamp(0.5)
    for i = 0,0 {  //stimulate only one cell of the pair
        stim[i].del = 2500
        stim[i].dur = 0.5
        stim[i].amp = 0.4
    }
    printf("INFO: Using intracellular stimulation\n")
}

// extracellular stimulus
gExtraStimFlag = 0
proc extraStim() {
    forall {
        insert extracellular
        insert xtra
    }
    load_file("interpxyz.hoc")
    load_file("stim.hoc")
    gExtraStimFlag = 1  // note extracellular stim
    printf("INFO: Using extracellular stimulation\n")
}

// depolarizing holding potentials 
objref depCurrent[2]
proc depolHoldingCurrent() {
    cell1.soma depCurrent[0] = new IClamp(0.5)
    cell2.soma depCurrent[1] = new IClamp(0.5)
    for i=0,1 {
        depCurrent[i].del = $1  //PR_DEL_STEADY
        depCurrent[i].dur = $2  //PR_DUR_STEADY
        depCurrent[i].amp = $3  //PR_AMP_STEADY
    }
    depCurrent[0].amp = $3 + $4  //PR_AMP_DELTA
}

/////////////////////////////////////////////////////////////////////

// graphing
objref g1, g2
proc graphing() {
    g1 = new Graph(0)
    addplot(g1, 0)  // GUI to update this graph
    g1.view(0, -57, 4500, 10, 255, 77, 450, 300)  //xmin ymin xlen ylen ...
    g1.addvar("cell1.soma.v(0.5)", 1, 1)
    g1.addvar("cell2.soma.v(0.5)", 2, 1)
    g2 = new Graph(0)
    addplot(g2, 0)  // GUI to update this graph
    g2.view(0, -0.02, 4500, 0.04, 255, 405, 450, 300)  //xmin ymin xlen ylen ...
    g2.addvar("synEx.i", 1, 1)
    g2.addvar("synIn.i", 2, 1)
}

// recording
objref dv[2]
proc recording() {
    dv[0] = new Vector()
    dv[0].record(&cell1.soma.v(0.5))
    dv[1] = new Vector()
    dv[1].record(&cell2.soma.v(0.5))
}
objref f
proc save() {
    f = new File()
    f.wopen("../netConeHz-results/cell1.txt")
    dv[0].printf(f, "%f\n")
    f.close()
    f.wopen("../netConeHz-results/cell2.txt")
    dv[1].printf(f, "%f\n")
    f.close()
    printf("INFO: results saved to ../netConeHz-results/cell[1,2].txt\n")
}