Desired behaviour in only one cell

Moderator: wwlytton

Post Reply
GTR

Desired behaviour in only one cell

Post by GTR »

Dear Ted,

I have created the following subthalamic network consisting of 4 cells (Sthcells[0],SThcells[1],sThcells[2],SThcells[3]).
My problem is that only the voltage graph in the soma section of the first cell achieves the desired Rhythmic Firing behaviour (SThcells[0].soma.v(0.5)) and the rest of them remain in their resting state
(-65 mV).

Why this happens?I suspect that I have misled some statements in the rest (public,access...) but where?

I thought that as long as I have created 4 templates of the same neuron,I expect the added mechanisms to work for each one :

I made the 4 cells using an array of object variables and the new command in a for loop:

Code: Select all

//***CREATING THE NETWORK****

ndend = 2
nSThcells = 4                                

objectvar SThcells[nSThcells]             

for i = 0, nSThcells-1 {
    SThcells[i] = new SThcell()
}
I have put comments in ***SYNAPSES*** to deactivate the synaptic conections temporarily:

Code: Select all

load_file("nrngui.hoc")

objref cvode

cvode = new CVode(0)
//cvode.active(1)

begintemplate SThcell
public soma, dend0, dend1,nclist

create soma,dend0[1],dend1[1]
objectvar f, nclist

proc init() {local i, me, child1, child2

    create soma

    nclist = new List()

    soma {
      nseg = 1
      diam = 18.8
      L = 18.8
      Ra = 150.224
      
      // channels
       insert Na
       insert NaL
       insert KDR
       insert STh
       insert Kv31
       insert Ih
       insert Cacum
       insert sKCa
       insert CaT
       insert HVA   
      
          }
   


 //THE FIRST TREE OF THE CELL

    f = new File()
    f.ropen("treeA.dat")
    
    ndendA = f.scanvar()
    create dend0[ndendA]

    for i = 0,ndendA-1 {
      me = f.scanvar() - 1
      child1 = f.scanvar() - 1
      child2 = f.scanvar() - 1

      dend0[me] {
        nseg = 1
        diam = f.scanvar()
        L = f.scanvar()
        Ra = 123
        // initialise and clear the 3D information
        pt3dclear()
	pt3dadd(f.scanvar(),f.scanvar(),f.scanvar(),diam)
	pt3dadd(f.scanvar(),f.scanvar(),f.scanvar(),diam)
        
	// channels
   
     insert Na
     insert NaL
     insert KDR
     insert STh
     insert Kv31
     insert Ih
     insert Cacum
     insert sKCa
     insert CaT
     insert HVA

	if (child1 >= 0) {
          printf("connecting tree A dendrite %d (0 end) to parent %d (1 end)\n",child1,me)
          connect dend0[child1](0), 1
        }
        if (child2 >= 0) {
	  printf("connecting tree A dendrite %d (0 end) to parent %d (1 end)\n",child2,me)
          connect dend0[child2](0), 1
        }
      }
    }
    f.close()


//THE SECOND TREE OF THE CELL


    f.ropen("treeB.dat")

    ndendB = f.scanvar()
    create dend1[ndendB]

    
    for i = 0,ndendB-1 {
      me = f.scanvar() - 1
      child1 = f.scanvar() - 1
      child2 = f.scanvar() - 1

      dend1[me] {
        nseg = 1
        diam = f.scanvar()
        L = f.scanvar()
        Ra = 123
        // initialise and clear the 3D information
        pt3dclear()
	pt3dadd(f.scanvar(),f.scanvar(),f.scanvar(),diam)
	pt3dadd(f.scanvar(),f.scanvar(),f.scanvar(),diam)
         // channels
       
     insert Na
     insert NaL
     insert KDR
     insert Kv31
     insert Ih
     insert Cacum
     insert sKCa
     insert CaT
     insert HVA
     insert STh
	
        if (child1 >= 0) {
          printf("connecting tree B dendrite %d (0 end) to parent %d (1 end)\n",child1,me)
          connect dend1[child1](0), 1
        }
        if (child2 >= 0) {
	  printf("connecting tree B dendrite %d (0 end) to parent %d (1 end)\n",child2,me)
          connect dend1[child2](0), 1
        }
      }
    }
    f.close()

    // Connect trees to the soma
    connect dend0[0](0), soma(1)
    connect dend1[0](0), soma(0)
}

endtemplate SThcell

//***CREATING THE NETWORK****

ndend = 2
nSThcells = 4                                

objectvar SThcells[nSThcells]             

for i = 0, nSThcells-1 {
    SThcells[i] = new SThcell()
}

objectvar stim[nSThcells]                    

i=0
SThcells[i].soma {
    stim[i] = new IClamp(0.5)
    stim[i].del = 0
    stim[i].dur = 0
    stim[i].amp = 0
}
i=1
SThcells[i].soma {
    stim[i] = new IClamp(0.5)
    stim[i].del = 0
    stim[i].dur = 0
    stim[i].amp = 0
}  
i=2
SThcells[i].soma {
    stim[i] = new IClamp(0.5)
    stim[i].del = 0
    stim[i].dur = 0
    stim[i].amp = 0
}  
i=3
SThcells[i].soma {
    stim[i] = new IClamp(0.5)
    stim[i].del = 0
    stim[i].dur = 0
    stim[i].amp = 0
}
 

//***SYNAPSES***

//synapse1 attach source:SThcells[0] -> target: SThcells[1] at point treeA[1]        

//maxsyn = 10                           
//objectvar syn[maxsyn]                 

//SThcells[1].dend0[1] syn[0] = new ExpSyn(0)                                          
//SThcells[0].soma SThcells[1].nclist.append(new NetCon(&v(0), syn[0], -20, 1, 0.5))   

//access SThcells[0].soma

//synapse2 attach source: SThcells[1] -> target:SThcells[2] 
 
//SThcells[2].dend0[0] syn[1] = new ExpSyn(0)                                            
//SThcells[1].dend0[2] SThcells[2].nclist.append(new NetCon(&v(0), syn[1], -18, 1, 0.5))  

//access SThcells[1].soma

//synapse3 attach source: SThcells[0] -> target: SThcells[3] at soma

//SThcells[3].dend1[2] syn[2] = new ExpSyn(0)                                             
//SThcells[0].soma SThcells[3].nclist.append(new NetCon(&v(0), syn[2], -18, 1, 0.5))

//access SThcells[2].soma




//***CHARACTERISTICS***

// *** Setup the maximum conductances over the morphology

   // general support functions
   
   hide = xopen("procedures.hoc")
   
   // uniform conductances...
   // extra var definitions (e.g.  default_*) are used in the set/unset TTX functions.
      
   // Na   
   default_gNa_soma = 1.483419823e-02 
   default_gNa_dend = 1.0e-7
   SThcells[0].soma.gna_Na = default_gNa_soma
   SThcells[1].soma.gna_Na = default_gNa_soma
   SThcells[2].soma.gna_Na = default_gNa_soma
   SThcells[3].soma.gna_Na = default_gNa_soma


   // NaL (can interchange with the Do & Bean model)
   default_gNaL_soma = 1.108670852e-05
   default_gNaL_dend = 0.81e-5
   SThcells[0].soma.gna_NaL = default_gNaL_soma 
   SThcells[1].soma.gna_NaL = default_gNaL_soma 
   SThcells[2].soma.gna_NaL = default_gNaL_soma 
   SThcells[3].soma.gna_NaL = default_gNaL_soma 

   // linear conductances (loaded from files)...
   printf("loading linear+uniform conductances\n")
   
   // KDR
   cset(0,"gk_KDR","")
   // Kv3.1   
   cset(0,"gk_Kv31","")
   // Ih
   cset(0,"gk_Ih","")
   // sKCa
   cset(0,"gk_sKCa","")
   // CaT   
   cset(0,"gcaT_CaT","")
   // CaN
   cset(0,"gcaN_HVA","")
   // CaL
   cset(0,"gcaL_HVA","")
   
   // set the ion styles  
   
   forall ion_style("na_ion",1,2,1,0,1)
   forall ion_style("k_ion",1,2,1,0,1)
   forall ion_style("ca_ion",3,2,1,1,1)   
   
  
// *** Default section
    
    access SThcells[0].soma
    access SThcells[1].soma
    access SThcells[2].soma
    access SThcells[3].soma
   
 
 xopen("RhythmicFiring.ses")
 run()
Please comment athing if you find anything strange.

And a second irrelevant query:

What are the NEURONS' default values for the concentrations inside and outside the cell :nai,nao,ki,ko,cli,clo.
Are these below ? Where can I find them?

nai0_na_ion = 10
nao0_na_ion = 140

ki0_k_ion = 54
ko0_k_ion = 2.5


cli0_cl_ion = 0
clo0_cl_ion = 0
}

Thank you in advance!
ted
Site Admin
Posts: 6300
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Post by ted »

The last shall be first.

Code: Select all

What are the NEURONS' default values for the concentrations inside and outside the cell
Default concentrations for na and k are built in; their values are appropriate for squid
axon. To discover the numeric values for na, start nrngui, then at the oc> prompt type
nao0_na_ion
Repeat for nai0_na_ion. The corresponding variables for k are called ko0_k_ion and
ki0_k_ion.

For any other ion, corresponding variables, and default concentrations, don't exist unless
your model has a mechanism that contains a USEION statement for that ion. If such a
mechanism is present, the variables are automatically created and have the value 1 mM
(except for ca, for which cai0_ca_ion is 5e-5 and cao0_ca_ion is 2).

Although these variables are called "default concentrations," they may or may not have
an effect on the actual ionic concentrations and equilibrium potentials that are used in
a simulation. You should read the Programmer's Reference documentation of ion_style().
http://www.neuron.yale.edu/neuron/stati ... #ion_style
Also see chapter 8 of The NEURON Book for more information about initializing ionic
concentrations.


Now, to teach you how to fish.

First, make sure that your code--all of your code--contains only one access statement.
Otherwise you are bound to become confused about the identity of the currently
accessed section, and the default section. Read this
https://www.neuron.yale.edu/phpBB2/viewtopic.php?t=608
only the voltage graph in the soma section of the first cell achieves the desired Rhythmic Firing behaviour (SThcells[0].soma.v(0.5)) and the rest of them remain in their resting state
Were you able to get a net that has just two simple cells to work properly? without all of
the extra code that is contained in this file and the other file(s) that this code is opening
and loading?
Have you checked the cells to make sure that they have identical anatomical and
biophysical properties?
Have you checked the IClamps to verify that they are delivering identical current stimuli?
Have you checked any synaptic inputs to verify that they are delivering identical spike
trains, with identical weights, to identical synaptic targets?
GTR

Post by GTR »

I don't like fishing! I prefer hunting ... problems in the heart of the codes!But it seems I am not a good hunter.
Were you able to get a net that has just two simple cells to work properly? without all of
the extra code that is contained in this file and the other file(s) that this code is opening
and loading?
I have the same net without the code that goes after ***CHARACTERISTICS*** and its embedded files .I only use two .dat files (treeA.dat,treeB.dat) containing the geometrical information, space coordinates and the connectivity form of the cell's dendrites, these ones that are in zipped form in Gillies'-Sterratt's tutorial.

It works properly (all of them make RF in rest state) no matter how many cells I add nsthcells=2,3,4,.....

I am now examining the other cases you advised me and Na/NaL mechanisms in the soma.

I just find strange the fact that 4 same templates created by a for loop performing different behaviour.If there was a problem it would appear in all.

If all the others proved normal then I'll end up that sth goes wrong in the code after ***CHARACTERISTICS*** and its embedded codes:procedures,conductances.

P.S. I believed you would attend Crete's Computational Neuroscience anniversary meeting.I learnt from the local organiser that there will be no NEURON lecture,it's a pitty...
ted
Site Admin
Posts: 6300
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Post by ted »

I believed you would attend Crete's Computational Neuroscience anniversary meeting.I learnt from the local organiser that there will be no NEURON lecture,it's a pitty...
Ars longa, vita brevis. Travel funds brevis, too.

An aside: Can anyone explain why we never see the original Greek version of this aphorism?
Post Reply