Correcting space clamp in dendrites (Schaefer et al. 2003 and 2007)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:22203
In voltage-clamp experiments, incomplete space clamp distorts the recorded currents, rendering accurate analysis impossible. Here, we present a simple numerical algorithm that corrects such distortions. The method enabled accurate retrieval of the local densities, kinetics, and density gradients of somatic and dendritic channels. The correction method was applied to two-electrode voltage-clamp recordings of K currents from the apical dendrite of layer 5 neocortical pyramidal neurons. The generality and robustness of the algorithm make it a useful tool for voltage-clamp analysis of voltage-gated currents in structures of any morphology that is amenable to the voltage-clamp technique.
Reference:
1 . Schaefer AT, Helmstaedter M, Sakmann B, Korngreen A (2003) Correction of conductance measurements in non-space-clamped structures: 1. Voltage-gated K+ channels. Biophys J 84:3508-28 [PubMed]
2 . Schaefer AT, Helmstaedter M, Schmitt AC, Bar-Yehuda D, Almog M, Ben-Porat H, Sakmann B, Korngreen A (2007) Dendritic voltage-gated K+ conductance gradient in pyramidal neurones of neocortical layer 5B from rats. J Physiol 579:737-52 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Neocortex M1 L5B pyramidal pyramidal tract GLU cell;
Channel(s): I K; I K,leak; I M; I Potassium;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Parameter Fitting; Influence of Dendritic Geometry; Detailed Neuronal Models;
Implementer(s): Schaefer, Andreas T [andreas.schaefer at crick.ac.uk];
Search NeuronDB for information about:  Neocortex M1 L5B pyramidal pyramidal tract GLU cell; I K; I K,leak; I M; I Potassium;
                                    // Parameters for Fit Routine
                                    // (to be loaded first)


    strdef ExperimentName, CellName, CellFileName, TauFileName, LeakFileName
    objref stimSec,VProtocol,VProtocolTVector

ExperimentName = "cylinder"             // experimental data to fit
LeakFileName = "cylinder"             // for each cell only
CellName  = "cylinder"               // to be included by LoadNInit-Proc from cell.hoc
//TauFileName = "cylinder"           // contains taus for dummy conductance

    print " reading Fit-Parameters from File ",ExperimentName,".fit.par"

                                    // ++++ FILTER PARAMETERS ++++
FilterOn=0
fZero=5000                          // filter corner frequency
numpoles=2                          // number of times the filter will be convoluted with the data

StartTau = 0
EndTau   = 5
                                    // ++++ CELL PARAMETERS ++++
                                    // Cell-Morphology, Passive and active Parameters (for Fit Routine)

                                    // the following is used  first by cell.hoc, then by fit.hoc
ra        = 250
global_ra = ra
rm        = 20000
c_m       = 0.75
v_init    = -110
celsius   = 22
Ek        = -80
Eca       = 60
Epas      = -80

revPot = Ek

//    {xopen("cells/cell.hoc")}       // Mainen-Cell

//    LoadNInit(CellName)             // proc. from cell.hoc; initializes cell: creates basal, apical, axon - Lists

    sprint(CellFileName,"cells/%s.cell",CellName)
    {xopen(CellFileName)}  // Load Cell

ReduceCell=0            // reducing cell model or not in fit.hoc
                                    //++++ VCLAMP- PARAMETERS:

                                    // defining VClamp-location:
load_file("twoclamp.hoc")

somaA stimSec = new SectionRef()
stimPosI=0.5
stimPosV=0.5

                                    // setting duration and amplitude of clamp-protocol:

    VClampSeriesR = 1e-5            // setting it to something like ideal to accopunt for TEVC


VProtocolNumSteps = 4               // including final (fit-) step

    double DTSteps[VProtocolNumSteps]

    double VProtocolTstart[VProtocolNumSteps]

    VProtocol = new Vector(VProtocolNumSteps)

    VProtocolTVector = new Vector(VProtocolNumSteps)


VProtocol.x[0]      = -110
DTSteps[0]          = 100
VProtocolTstart[0]  = 0

VProtocol.x[1]      = -110
DTSteps[1]          = 10
VProtocolTstart[1]  = 8000  // start times!

VProtocol.x[2]      = -110
DTSteps[2]          = 0.1
VProtocolTstart[2]  = 8400

VProtocol.x[3]      = -80
DTSteps[3]          = 0.025
VProtocolTstart[3]  = 8410  // i.e. beginning of measurements

dtAdapt=1

MeasTStart = VProtocolTstart[VProtocolNumSteps-1]  // beginning of measurements, i.e. also  beginning of kinetics in gDK.mod

for VProtCount=1,VProtocolNumSteps-1 {     // make sure that voltage will be = VProtocol[x] for TStart[x] <= t < TStart[x+1]
  VProtocolTVector.x[VProtCount]=VProtocolTstart[VProtCount]-DTSteps[VProtCount]
}

Experimental_dt = 0.025             // basic integration time step

                                    // scaled dts for t>MeasTStart (i.e. within measurements):
DTRes = 1/100                       // "dt=measTime*DTRes" -scaling
DTmin = 0.025                       // minimal dt; all dts will be n*dtmin



                                    // Voltage - Steps:  (must match exp. data)

NumVSteps = 16
VStep = 10                          // height of VStep
FirstVStep = 1                     // VStep to start Fit Routine at
LastVStep = NumVSteps-1
VStepDirection = 1                  // for toggling backward/forward calculation

    double vclmp[NumVSteps]         // Voltages starting at COUNT=0!!

                                    // Initializing VClamp- Array:
for VStepCount=0,NumVSteps-1 {      // array starts at 0
  vclmp[VStepCount] =-80+VStepCount*VStep}


double org_taus[NumVSteps]		// array to store original taus


                                    // ++++ TIMES ++++



                                    // Time - Steps:
                                    // timescale in experimental data:

MaxMeasTime = 50                   // unit is ms!!
ExpTRes =  10                        // steps per ms
NumTSteps = ExpTRes*MaxMeasTime     // i.e. number of timepoints at which experimental data is available

    double MeasTimes[NumTSteps+1]   // including time ZERO

                                    // Initialize ExpMeasTimepoint-Array (must match timescale in *.iCl:
for TStepCount=0, NumTSteps  MeasTimes[TStepCount]=TStepCount* 1/ExpTRes
                                    // times in [ms]!!


                                    // Time - Steps:
                                    // Time-Points out of  ExpMeasTimes-array from Exp. at which fit is supposed to be done:
NumFitTPoints = 100

    double FitTPoints[NumFitTPoints+1]

                                    // Initialize FitTPoints:
for FitTStepCount=0, NumFitTPoints  FitTPoints[FitTStepCount] =FitTStepCount
                                    // i.e. fit at all meas.points





                                    // ++++ CURRENTS AND CONDUCTANCES ++++

                                    // IClamp-Array for exp. data:
    double iclmp[NumVSteps][NumTSteps+1]

                                    // corresponding Ileak-Array:
    double leak[NumVSteps][NumTSteps+1]

                                    // (both filled later by ReadICandLeak)

                                    // temporal resolution of gbar[voltage][gbarTRes * MaxMeasTime] -Array:
gbarTRes  =   10                     // steps per ms
gbarNumTSteps = gbarTRes*MaxMeasTime
                                    // MaxMeasTime is the same for experimental data and max g(t)

gDKVmin = -120
gDKVmax = 180
gDKVRange = gDKVmax-gDKVmin         // caution: has to match gv[] in gDK.mod
                                    // VRange is relevant both for gv[] and tau[] in gDK.mod
OutputVScale = 5                    // print gbar[v] to file in .. mV steps
gDKVOffset = 120.5                  // voltage Offset in gDK.mod, used by fit.hoc
    gDKVPointerConverter = gDKVOffset - 0.5
                                    // must simply be added to convert real voltages->Pointer, subtracted for vice versa

    double gbar[gDKVRange+1][gbarTRes*(MaxMeasTime+1)]


    double InitialTaus[gDKVRange+1] // estimated taus read from file



                                    // ++++ FIT - PARAMETERS ++++

Tolerance=0.001                     // tolerance of squr deviation of deltaI in Algorithm

startG  = -3                        // logbase2of lastg (initial Value of Dummy conductance)
numRun  = 40                        // number of iterations
PrintVerbose = 0

                                    // Offset configuration for Fit routine:(i.e. voltage attenuation)

NumVOffsets = 1

    double VOffset[NumVOffsets*2]   // entry pairs: from voltage $1 use offset $2

VOffset[0]=revPot+70                // scheme: if v>Voffset[0] offset=VOffset[1]
VOffset[1]=2
                                    // array must be filled in increasing order! no "else" used in Algorithm.fit
UseOffset = 1

DebugOn = 0