Goldfish Mauthner cell (Medan et al 2017)

 Download zip file   Auto-launch 
Help downloading and running models
" ...In fish, evasion of a diving bird that breaks the water surface depends on integrating visual and auditory stimuli with very different characteristics. How do neurons process such differential sensory inputs at the dendritic level? For that we studied the Mauthner-cells (M-cells) in the goldfish startle circuit, which receive visual and auditory inputs via two separate dendrites, both accessible for in vivo recordings. We asked if electrophysiological membrane properties and dendrite morphology, studied in vivo, play a role in selective sensory processing in the M-cell. Our results show that anatomical and electrophysiological differences between the dendrites combine to produce stronger attenuation of visually evoked post synaptic potentials (PSPs) than to auditory evoked PSPs. Interestingly, our recordings showed also cross-modal dendritic interaction, as auditory evoked PSPs invade the ventral dendrite (VD) as well as the opposite, visual PSPs invade the lateral dendrite (LD). However, these interactions were asymmetrical with auditory PSPs being more prominent in the VD than visual PSPs in the LD. Modelling experiments imply that this asymmetry is caused by active conductances expressed in the proximal segments of the VD. ..."
1 . Medan V, Mäki-Marttunen T, Sztarker J, Preuss T (2018) Differential processing in modality-specific Mauthner cell dendrites. J Physiol 596:667-689 [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: Goldfish;
Cell Type(s): Mauthner cell;
Channel(s): I Sodium; I Potassium;
Gap Junctions:
Simulation Environment: NEURON; Python;
Model Concept(s): Sensory processing;
Implementer(s): Maki-Marttunen, Tuomo [tuomomm at];
Search NeuronDB for information about:  I Sodium; I Potassium;
# Dimension-by-dimension local optimization algorithm
# Tuomo Maki-Marttunen, 2013-2017 (CC-BY 4.0)

from pylab import *
import time

def minimizedimbydim(fcn=lambda x: x[0]**2+x[1]**2,thrs=array([[-1.,-1.],[1.,1.]]),initx=[],powinterval=1./3,Ninterval=40,Niter=10,powintervalstd=[],nhoursmax=inf):

  if len(initx) == 0:
    initx = thrs[0] + (thrs[1]-thrs[0])*rand(1)

  if len(powintervalstd) == 0:
    powintervalstd = powinterval/5

  if len(initx.shape) == 1:
    initx = [initx]
  #if type(initx[0]) is not list:
  #  initx = [initx]
  myx = initx[:]
  Npart = len(myx)
  errs = []
  for j in range(0, Npart):

  errsall = zeros([Niter,Npart])

  timenow = time.time()
  dimord = range(0,len(initx[0]))
  #print str(powintervalstd)

  for iter in range(0,Niter):
    if time.time()-timenow > nhoursmax*3600:
    dimord2 = range(0,len(initx[0])-1)
    dimord = [dimord[0]] + [dimord[1+i] for i in dimord2]

    for iidim in range(0,len(dimord)):
      idim = dimord[iidim]
      thispowinterval = powinterval + powintervalstd*randn(1)
      while thispowinterval <= 0 or thispowinterval >= 1:
        thispowinterval = powinterval + powintervalstd*randn(1)
        k = k+1
        if k > 100000:
          print('try smaller powintervalstd!')
          return [nan,nan]
      parvals = []
      for j in range(0,Npart):
        parvals.append((myx[j][idim] - (myx[j][idim]-thrs[0][idim])*thispowinterval**array(range(1,Ninterval+1))).tolist() +
                       (myx[j][idim] + (thrs[1][idim]-myx[j][idim])*thispowinterval**array(range(1,Ninterval+1))).tolist())

      #print "        parvals[0]="+str(parvals[j][0])+", [end-1]="+str(parvals[j][Ninterval-1])+", val="+str(myx[j][idim])+", [2*end-1]="+str(parvals[j][2*Ninterval-1])+", [end]="+str(parvals[j][Ninterval])
      for j in range(0,Npart):
        these_errs = zeros([2*Ninterval,1])
        for k in range(0,len(parvals[0])):
          if parvals[j][k] == myx[j][idim]:
            these_errs[k] = errs[j]
            thisx = myx[j]
            thisx[idim] = parvals[j][k]
            these_errs[k] = fcn(thisx)

        if any(these_errs < errs[j]):
          ind = argmin(these_errs)
          myx[j][idim] = parvals[j][ind]
          errs[j] = min(these_errs)
    errsall[iter,:] = errs;
    print("minimizedimbydim: iter = "+str(iter)+", err = "+str(min(errs))) #+", x = "+str(myx))
  return [myx[:],errsall[:]]