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;
    print "loading clamp routines for experiment ....."

// CLAMP-ROUTINES for EXPERIMENT

proc init() {
  finitialize(v_init)
  fcurrent()
}


proc OLDrun() { local tstepcount
//  while (t<tstop) {       // doesn't work properly for unknown reason
  for tstepcount=1,((tstop-t)/dt) {
    if (DebugOn==2) print "time: ",t," dt:",dt," voltage:",vC.amp1
    if (DebugOn==2) {
      forall print "time: ",t," dt:",dt,"voltage:",vC.amp1, " gkfast:", gkfast_kfast," gbar:", gbar_kfast
    }
    if (DebugOn==2) print "debug run1"
    fadvance()
    if (DebugOn==2) print "debug run2"
    if (DebugOn==2) print "time: ",t,"tstop:",tstop,"tstepcount:",tstepcount," dt:",dt," voltage:",vC.amp1
    if (DebugOn==2) if (t<tstop) print "yes",t,tstop else print "no"
  }
}

proc run() { local tstepcount
  for tstepcount=1,((tstop-t)/dt) {
    if (DebugOn==7) print "time: ",t," dt:",dt," voltage:",vC.vc
    if (DebugOn==2) {
      forall print "time: ",t," dt:",dt,"voltage:",vC.amp1, " gkfast:", gkfast_kfast," gbar:", gbar_kfast
    }
    if (DebugOn==2) print "debug run1"
    fadvance()
    if (DebugOn==2) print "debug run2"
    if (DebugOn==2) print "time: ",t,"tstop:",tstop,"tstepcount:",tstepcount," dt:",dt," voltage:",vC.amp1
    if (DebugOn==2) if (t<tstop) print "yes",t,tstop else print "no"
  }
}


proc CalcLeak() { local VStepCount, TStepCount //m simulating without kinetics
  print " Simulating LeakCurrents (by setting all active gs=0):"  //debug

  for VStepCount=0,NumVSteps-1 {
    VProtocol.x[VProtocolNumSteps-1]  =vclmp[VStepCount]

    
    VProtocol.play(&vC.b.x[4],VProtocolTVector)
    init()

    for VProtCount=0,VProtocolNumSteps-2 {    // pre-pulses
      tstop=VProtocolTstart[VProtCount+1]
      dt=DTSteps[VProtCount]  // adapted dts
      run()
    }

    TStepCount=0
    leak[VStepCount][TStepCount] =vC.ic

                            //starting Measurements:
    dt = DTSteps[VProtocolNumSteps-1]

    for TStepCount=1,NumTSteps {
      tstop=MeasTStart+MeasTimes[TStepCount]
      run()
      leak[VStepCount][TStepCount] =vC.ic
    }// time
  }// voltage
}// proc CalcLeak


proc MeasureCurrents() {local VStepCount, TStepCount, VProtCount
  print "+++++++++++++++++ doing the experiment +++++++++++++"

  for VStepCount=0,NumVSteps-1 {
    VProtocol.x[VProtocolNumSteps-1]  =vclmp[VStepCount]
    print "Voltage: ",VProtocol.x[VProtocolNumSteps-1]
   VProtocol.play(&vC.b.x[4],VProtocolTVector)

    init()

    for VProtCount=0,VProtocolNumSteps-2 {    // pre-pulses
      tstop=VProtocolTstart[VProtCount+1]
      dt=DTSteps[VProtCount]  // adapted dts
      run()
  

   }
    TStepCount=0
    iclmp[VStepCount][TStepCount] =vC.ic
    VClmp[VStepCount][TStepCount] = vC.vc
    dt = DTSteps[VProtocolNumSteps-1]
    for TStepCount=1,NumTSteps {
      tstop=MeasTStart+MeasTimes[TStepCount]
      run()
      iclmp[VStepCount][TStepCount] =vC.ic
      VClmp[VStepCount][TStepCount] = vC.vc  
 
    }// time
  }// voltage
}// proc MeasureCurrents


proc SubtractLeak() { local VStepCount, TStepCount
                       //m decrease IClamp-Entries by simulated
                      //m Leak from CalcLeak()
  print " Subtracting calculated Leak " //debug
  for VStepCount=0,NumVSteps-1 {
    for TStepCount=0,NumTSteps {
      iclmp[VStepCount][TStepCount]-=leak[VStepCount][TStepCount]
    }
  }
}