Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between them

Managing anatomically complex model cells with the CellBuilder. Importing morphometric data with NEURON's Import3D tool or Robert Cannon's CVAPP. Where to find detailed morphometric data.
moeskiski

Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between them

Post by moeskiski »

Hello,

I am very new to programming, computation, and mathematics (dynamics and statistics).

I'm currently developing a detailed model of 2 (up to 5) connected neurons that need to have myelinated axons. I will stimulate an axon at a single Node of Ranvier in its center to elicit action potentials in the somas that lie bidirectionally to it. I want to see short and long-term plastic changes (use-dependent plasticity or any other measure) at the synapses and measure the changes.

I've followed the available online tutorials (http://www.kem.org/neuron/prog4.html and http://www.cs.stir.ac.uk/~bpg/Teaching/ ... prog4.html) and looked through the NEURON documentation. I've had lots of trouble getting Python to run NEURON on Windows so I've limited myself to using hoc in Notepad to focus on getting the model to work instead of technical issues.

Based on what I read I've modified the Mcintyre myelinated axon model to include a soma and dendrites, then made a template out of it and replicated it so that I have 3 cells in total. The three cells are connected to one another using NetCon by connecting precell and postsyn. The postsyn uses ExpSyn.

Currently, I have been facing issues getting to where I need to be to see the results I want:

1. I have a clamp attached to all of the Nodes of Ranvier in all of the cells. This gave me a desirable result since the somas all reached AP. I got that result because I followed the tutorials and therefore attached a clamp to each soma in the template, then simply changed it from "soma" to "node". The problem is that that's not what I need for the experiment I have in mind. I need to have a single clamp attachment at a single node on an axon in between at least two somas. So I changed it from "node" to "node[10]" but I couldn't limit the range of "i" to one of the cells - or remove the for loop and make it work for that matter - so I attached a clamp to the middle node in all 3 axons and the whole stimulation fell apart. Nothing was reaching AP anymore. (I'll attach the code so all of this will make sense).

2. I do not know how to measure plasticity in NEURON. I've looked around and read the part in chapter 10 of the NEURON book on use-dependant plasticity but don't know how to fit that into my model or even how to measure the results form it. I know that I need to change ExpSyn to AlphaSyn, otherwise I don't know where to take it from there.

3. I do not know how biologically viable such a model is. I read the Mcintyre paper and as far as I can tell it seems like there are no objections to its biological viability. Furthermore, I do not know if this model could even exhibit plastic changes by virtue of its design. I've looked at other models but this one seems the most promising (as well as the simplest while maintaining biological integrity).Is there something I'm not seeing that could mean I'm barking up the wrong tree?

Thank you.

P.S. If I'm not being detailed enough or if I'm leaving out important details please let me know and I'll quickly clarify.

Code:

Code: Select all

xopen("$(NEURONHOME)/lib/hoc/noload.hoc")


nrnmainmenu()



tstop = 12          /* Set the time run the simulation */


ncells = 2      /* The number of presynaptic cells */




/* Below we define a template for the Cell.  The template allows us to
 * create multiple instances of the Cell. */
 


begintemplate Cell



/* Make the soma, axon, dendrites, pre- and post-synaptic connections
 * accessible to the rest of the program. */
public soma, axon, dend, presyn, postsyn

public node, MYSA, FLUT, STIN


create soma, axon, dend[1]  
/* Create (actually declare) all of the cell's sections */

create node[1], MYSA[1], FLUT[1], STIN[1]



objectvar postsyn[1]        
/* Declare the object variables for
 the post-synaptic connections on
 the dendrites */



objectvar presyn        
/* Declare the object variable for the
 pre-synaptic connection at the end of the axon */
                 


proc init() {local i
    

ndend = $1          /* Define the number of dendrites */

    

soma_diam = 100     /* Define the diameter of the soma */
    
soma_len = 100      /* Define the length of the soma */
    
soma_nseg = 1       /* Define the # of compartments */

    

axon_diam = 10      /* Define the diameter of the axon */
    
axon_len = 5000     /* Define the length of the axon */
    
axon_nseg = 50      /* Define the # of compartments */

    

dend_diam = 25      /* Define the diameter of the dend */
    
dend_len = 500      /* Define the length of the dend */
    
dend_nseg = 5       /* Define the # of compartments */
    

//topological parameters//	

ndend = 3	
	
    
axonnodes=21  			
	
    
paranodes1=40
	
    
paranodes2=40	
	
    
axoninter=120			
    
axontotal=221		
	 



//morphological parameters//	
	
    

fiberD=10.0	

//choose from 5.7, 7.3, 8.7, 10.0, 11.5, 12.8, 14.0, 15.0, 16.0
	
    
paralength1=3  
	    
    
nodelength=1.0
	    
    
space_p1=0.002  
	    
    
space_p2=0.004
	    
    
space_i=0.004


    

//electrical parameters//		
	    
    

rhoa=0.7e6 //Ohm-um//
	    
    
mycm=0.1 //uF/cm2/lamella membrane//
	    
    
mygm=0.001 //S/cm2/lamella membrane//
    
		
    

if (fiberD==5.7) {g=0.605 axonD=3.4 nodeD=1.9 paraD1=1.9 paraD2=3.4 deltax=500 paralength2=35 nl=80}
		    
    
if (fiberD==7.3) {g=0.630 axonD=4.6 nodeD=2.4 paraD1=2.4 paraD2=4.6 deltax=750 paralength2=38 nl=100}
		    
    
if (fiberD==8.7) {g=0.661 axonD=5.8 nodeD=2.8 paraD1=2.8 paraD2=5.8 deltax=1000 paralength2=40 nl=110}
		    
    
if (fiberD==10.0) {g=0.690 axonD=6.9 nodeD=3.3 paraD1=3.3 paraD2=6.9 deltax=1150 paralength2=46 nl=120}
		    
    
if (fiberD==11.5) {g=0.700 axonD=8.1 nodeD=3.7 paraD1=3.7 paraD2=8.1 deltax=1250 paralength2=50 nl=130}
		    
    
if (fiberD==12.8) {g=0.719 axonD=9.2 nodeD=4.2 paraD1=4.2 paraD2=9.2 deltax=1350 paralength2=54 nl=135}
		    
    
if (fiberD==14.0) {g=0.739 axonD=10.4 nodeD=4.7 paraD1=4.7 paraD2=10.4 deltax=1400 paralength2=56 nl=140}
		    
    
if (fiberD==15.0) {g=0.767 axonD=11.5 nodeD=5.0 paraD1=5.0 paraD2=11.5 deltax=1450 paralength2=58 nl=145}
		    
    
if (fiberD==16.0) {g=0.791 axonD=12.7 nodeD=5.5 paraD1=5.5 paraD2=12.7 deltax=1500 paralength2=60 nl=150}
		    
    

Rpn0=(rhoa*.01)/(PI*((((nodeD/2)+space_p1)^2)-((nodeD/2)^2)))
		    
 
Rpn1=(rhoa*.01)/(PI*((((paraD1/2)+space_p1)^2)-((paraD1/2)^2)))
		    
  
Rpn2=(rhoa*.01)/(PI*((((paraD2/2)+space_p2)^2)-((paraD2/2)^2)))
	    
    
Rpx=(rhoa*.01)/(PI*((((axonD/2)+space_i)^2)-((axonD/2)^2)))
		    
    
interlength=(deltax-nodelength-(2*paralength1)-(2*paralength2))/6
    

    


create soma, dend[ndend] /* Create all of the cell's sections */
    
create node[axonnodes], MYSA[paranodes1], FLUT[paranodes2], STIN[axoninter]

    

objectvar presyn


    
objectvar postsyn[ndend]    
/* Declare the object variables for
 the three post-synaptic connections
 on the dendrites */



/* First set all of the dimensions and insert the channels into each
 section. */
 
soma {
    
nseg = soma_nseg    /* # of compartments */
    
diam = soma_diam    /* Set the diameter of the soma (in um) */
    
L = soma_len        /* Set the length of the soma (in um) */

    

insert hh       /* Insert Hodkin-Huxley type channels
 in the soma */

    

pt3dclear()     /* Clear the 3D position of the cell */
    
pt3dadd($2,$3,0,soma_diam) /* Add the axon-end 3D point */
    
pt3dadd($2+soma_len,$3,0,soma_diam) /* Add the dendrite-end 3D
 point */
    
}

    

for i=0,axonnodes-1 {
			
	
node[i]{					
			    
nseg=1
				    
	    
diam=nodeD
				    
	    
L=nodelength
				    
	    
Ra=rhoa/10000
				    
	    
cm=2
		    
	    
insert axnode		
	    
insert extracellular 
	    
xraxial=Rpn0 
	    
xg=1e10 
	    
xc=0
			
	
}
    
}
    

for i=0, paranodes1-1 {
		
	
MYSA[i]{
				    
	    
nseg=1
				    
	    
diam=fiberD
				    
	    
L=paralength1
				    
	    
Ra=rhoa*(1/(paraD1/fiberD)^2)/10000
				
cm=2*paraD1/fiberD
				    
	    
insert pas
				    
	    
g_pas=0.001*paraD1/fiberD		
				      
e_pas=-80
				    
	    
insert extracellular 
xraxial=Rpn1 
xg=mygm/(nl*2) 
xc=mycm/(nl*2)
	
}
	
    
}
    
    

for i=0, paranodes2-1 {
		
	
FLUT[i]{
				    
	    
nseg=1
				    
	    
diam=fiberD
				    
	    
L=paralength2
				    
	    
Ra=rhoa*(1/(paraD2/fiberD)^2)/10000
				    
	   
cm=2*paraD2/fiberD
				    
	    
insert pas
				    
	   
g_pas=0.0001*paraD2/fiberD		
			    
e_pas=-80
				    
	    
insert extracellular 
xraxial=Rpn2 
xg=mygm/(nl*2) 
xc=mycm/(nl*2)
	
}
    
}
    
    
    

for i=0, axoninter-1 {
		    
	
STIN[i]{
				
	    
nseg=1
				    
	    
diam=fiberD
				    
	    
L=interlength
				    
	    
Ra=rhoa*(1/(axonD/fiberD)^2)/10000
				    
	   
cm=2*axonD/fiberD
				    
	    
insert pas
				    
	    
g_pas=0.0001*axonD/fiberD
				    
	    
e_pas=-80
				    
	    
insert extracellular 
xraxial=Rpx 
xg=mygm/(nl*2) 
xc=mycm/(nl*2)
	
}
	    
    
}
    

for i=0, axonnodes-2 {
		
	
connect MYSA[2*i](0), node[i](1)
			
	
connect FLUT[2*i](0), MYSA[2*i](1)
			
	
connect STIN[6*i](0), FLUT[2*i](1)
			
	
connect STIN[6*i+1](0), STIN[6*i](1)
			
	
connect STIN[6*i+2](0), STIN[6*i+1](1)
			
	
connect STIN[6*i+3](0), STIN[6*i+2](1)
			
	
connect STIN[6*i+4](0), STIN[6*i+3](1)	
			
	
connect STIN[6*i+5](0), STIN[6*i+4](1)	
			
	
connect FLUT[2*i+1](0), STIN[6*i+5](1)
			
	
connect MYSA[2*i+1](0), FLUT[2*i+1](1)
		
	
connect node[i+1](0), MYSA[2*i+1](1)		
    
}
	
    
	
    

for i = 0, ndend-1 dend[i] {
    
nseg = dend_nseg    /* # of compartments */
    
diam = dend_diam    /* Set the diameter of the dentrite
 (in um) */
    
L = dend_len        /* Set the length of the dendrite (in
 um) */

    
insert pas      /* Insert passive type channels in the
 dendrite */

    

pt3dclear()     /* Clear the 3D position of the cell */
                

/* Add the soma-end 3D point */
    
pt3dadd($2+soma_len,$3,0,diam)
                

/* Add the post-synaptic end 3D point */
    
pt3dadd($2+soma_len+dend_len*cos(0.2*PI*(1-2*i/(ndend-1))),$3+dend_len*sin(0.2*PI*(1-2*i/(ndend-1))),0,diam)
    

}



/* Next we construct the topology by connecting each of the sections
 together. */
    

connect node[0](0), soma(0)    /* Connect the axon to the soma */
                
/* Connect the dendrites to the other
 end of the soma */
    
for i = 0, ndend-1 connect dend[i](0), soma(1)



/* Next, we add the post-synaptic connections to the dendrites. */
    
for i = 0, ndend-1 dend[i] {
    
postsyn[i] = new ExpSyn(0.8) /* Create a new synapse 80% of the
 way out on each dendrite. */
    

postsyn[i].tau = 0.1    /* Set the tau of the synapse (in ms) */
    

postsyn[i].e = 15   /* Set the reversal potential of the
 channel associated with the synapse
 (in mV) */
    
}

}



endtemplate Cell




objectvar precells[ncells], cell 

/* Declare the object variables for
 the three cells */



cell = new Cell(3,0,0)      /* Create the post-synaptic cell */


for i = 0,ncells-1 {
                

/* Create the pre-synaptic cell */
    
precells[i] = new Cell(2, 5620,(1-2*i/(ncells-1))*300)
                

/* Connect the pre-synaptic AP trigger
 to the post-synaptic alpha synapse */
    
precells[i].MYSA[20] precells[i].presyn = new NetCon(&v(0), cell.postsyn[i], -20, 1, 20.8)
}



objectvar stim[ncells]      
/* Declare the object variable for the
 pulse stimulus */


for i = 0,ncells-1 precells[i].node {
    /* this is where I changed form soma to node and node [10] */
stim[i] = new IClamp(0.5)   /* Create a pulse synapse in the soma (now node)
 of each pre-synaptic cell */
    
stim[i].dur = 0.1       /* Set the stimulus duration (in ms) */
    
stim[i].amp = 500       /* Set the stimulus amplitude (in nA) */

}



/* We have the stimulus onsets staggered for each pre-synptic cell */

stim[0].del = 0         /* Set the stimulus onset (in ms) */

stim[1].del = 0.5       /* Set the stimulus onset (in ms) */

stim[0].amp = 500   


access cell.soma    /* default section access */



xopen("prog4.ses")      /* Open the session file that contains
 the menus and graphs */
ted
Site Admin
Posts: 6287
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by ted »

I'm currently developing a detailed model of 2 (up to 5) connected neurons that need to have myelinated axons.
Why do they need myelinated axons? Is some aspect of the structure or function of myelinated axons essential for the hypothesis that you plan to evaluate with your model?
I will stimulate an axon at a single Node of Ranvier in its center
This is not the way that spikes are initiated in the wild. Extracellular stimulation is part of your hypothesis?
to elicit action potentials in the somas that lie bidirectionally to it.
What does it mean to say that "somas lie bidirectionally to a node of Ranvier"?
I want to see short and long-term plastic changes (use-dependent plasticity or any other measure) at the synapses and measure the changes.
Exactly what is your conceptual model (mathematical description) of the short and long term plasticities you are interested in?
Adequate, but better examples are available--consider the serial network implementations in

Translating network models to parallel hardware in NEURON.
Hines and Carnevale
Journal of Neuroscience Methods 169:425–455, 2008.
Preprint available from http://www.neuron.yale.edu/neuron/stati ... nm2008.pdf, source code available from ModelDB https://senselab.med.yale.edu/ModelDB/s ... odel=96444

and the on-line NEURON + Python Tutorial
https://www.neuron.yale.edu/neuron/stat ... index.html
I've had lots of trouble getting Python to run NEURON on Windows
That problem should go away very soon.
I've limited myself to using hoc in Notepad
the world's worst throwaway text editor. If you're going to be doing much programming, it's time to get a real programmer's editor. At the very least, NoteTab light https://www.notetab.com/notetab-light (free) or (better) Geany https://www.geany.org/Download/Releases (also free).
I've modified the Mcintyre myelinated axon model
Is that level of axonal detail needed? Or are you just using it because you're stimulating extracellularly?
I need to have a single clamp attachment at a single node on an axon in between at least two somas.
So you're not doing extracellular stimulation of the axon. Question: what makes injecting current into a single node of Ranvier more plausible than injecting a current into the soma? At least the latter is technically feasible.
So I changed it from "node" to "node[10]" but I couldn't limit the range of "i" to one of the cells - or remove the for loop and make it work for that matter - so I attached a clamp to the middle node in all 3 axons and the whole stimulation fell apart. Nothing was reaching AP anymore. (I'll attach the code so all of this will make sense).
You need to step back from all this detail and decide first: what is the purpose of this model? Exactly what hypothesis is it intended to address?
2. I do not know how to measure plasticity in NEURON.
This question is premature. First you need a clear hypothesis that states the problem or phenomenon you want to examine, and lists those aspects of biology that are essential for addressing the problem or responsible for causing the phenomenon.
I know that I need to change ExpSyn to AlphaSyn
And your rationale for that is . . . ? (fill in the blank with a statement that is driven by your hypothesis).
3. I do not know how biologically viable such a model is.
All models involve simplifications and abstractions. Deciding that some X should be omitted can be even more important than deciding that some Y should be included.
I read the Mcintyre paper and as far as I can tell it seems like there are no objections to its biological viability.
Irrelevant. The criterion for deciding how to represent some aspect of biology, or whether that aspect should even be represented in a model, depends on the hypothesis (problem or phenomenon) YOU are studying. So far you haven't stated a hypothesis.
ramcdougal
Posts: 267
Joined: Fri Nov 28, 2008 3:38 pm
Location: Yale School of Public Health

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by ramcdougal »

In addition to the text editors that ted mentioned, consider Visual Studio Code. It's free and runs on all platforms. More importantly for NEURON: the first time you open a HOC or MOD file, it will prompt you to install an extension that provides NEURON syntax highlighting.
moeskiski

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by moeskiski »

First off, thank you for the very quick response!
Why do they need myelinated axons? Is some aspect of the structure or function of myelinated axons essential for the hypothesis that you plan to evaluate with your model?
What I'm doing is making a simulation of fiber tract stimulation. I decided to work at the most basic level, with individual neurons. The hypothesis is this: stimulating the fiber tract using focused ultrasound is a viable neuromodulation modality for altering the functional plasticity between the connected regions. The paper I'm writing includes a large literature review of the topic along this with this model I'm making.
This is not the way that spikes are initiated in the wild. Extracellular stimulation is part of your hypothesis?
Yes, since it's neuromodulation. In the model I posted here I'm using a clamp but a colleague informed me of another method of stimulation available in NEURON that works by stimulating an area of effect instead of a specific section or segment. Not sure what it is but I'm waiting on a paper he'll send me on the topic.
What does it mean to say that "somas lie bidirectionally to a node of Ranvier"?
It means the soma that is a part of the same neuron as the axon the node of Ranvier is on, the presynaptic soma, as well as the soma on the postsynaptic neuron. This means that I want the action potential to go in both directions on the axon. According to the reading I've done this is something that can occur in a real neuron. In this past week, it dawned on me that the issue I'm facing with the code when stimulating a single node is that the action potential only flows in one direction, and not that the whole thing falls apart. I'm not sure if that's reflective of an artifact in the model, reflective of nature, or of the fact that I'm using clamps when I should be using extracellular stimulation.

The above reason is why it is important for me to find an area of effect approach to extracellular stimulation in neuron; in a fiber tract there will be axons who's postsynaptic bodies lie in either direction, which means that I could model two pairs of connected neurons that lie perpendicular but in opposite directions and stimulate the area in the middle of both axons. It may not be crucial since I could just put clamps on both pairs and stimulate them simultaneously, but it would be more true to my hypothesis since that's how focused ultrasound would exert its effect anyway. Not to mention, if I actually stimulate it extracellularly it may end up sending an action potential in both directions of the stimulated region.
Exactly what is your conceptual model (mathematical description) of the short and long term plasticities you are interested in?
To be honest with you I don't know how to answer that question. I've been looking at Chapter 5.8 of Dayan and Abbott where they describe a formula for short-term plasticity based on depression and facilitation, as well as Chapter 8 which discusses Hebbian learning, LTD/LTP, etc. for long-term plasticity. In the latter chapter, they discuss the BCM rule and timing based rules and those seem to be the ones that I may use.
Adequate, but better examples are available--consider the serial network implementations...
Thank you. I'll read the paper ASAP. As for the tutorial, I've looked through it before and it seems to instruct on how to run python in Linux, with not much on Windows. All the things I've found online instructing on how to run NEURON+Python on Windows were outdated.
the world's worst throwaway text editor. If you're going to be doing much programming, it's time to get a real programmer's editor. At the very least, NoteTab light https://www.notetab.com/notetab-light (free) or (better) Geany https://www.geany.org/Download/Releases (also free).
Thank you. I've used Sumlime, Pycharm and Anaconda for python programming before - these were also what I had trouble running NEURON on. I want to stick to using the basic hoc language for my work with this model, will the programming editors you've provided support that?
Is that level of axonal detail needed? Or are you just using it because you're stimulating extracellularly?
Since my model needs to be biologically viable I felt that the level of detail offered there would be a plus. Also, out of all the myelinated axons models I found this one seemed the easiest to modify.
So you're not doing extracellular stimulation of the axon. Question: what makes injecting current into a single node of Ranvier more plausible than injecting a current into the soma? At least the latter is technically feasible.
Yup, got me there. I didn't actually know that up until earlier this week, hence the method I mentioned above that my colleague told me about. The technical feasibility of stimulating (extracellularly) the fiber tract is exactly the topic my hypothesis is tackling.
You need to step back from all this detail and decide first: what is the purpose of this model? Exactly what hypothesis is it intended to address?
...
This question is premature. First you need a clear hypothesis that states the problem or phenomenon you want to examine, and lists those aspects of biology that are essential for addressing the problem or responsible for causing the phenomenon.
I did a good bit of reading on neuromodulation and on focused ultrasound before beginning with the model just so I'd know what I would need to change and what I wouldn't. The learning curve is steep in turning what I learned into code but I feel like I'm getting there.
I know that I need to change ExpSyn to AlphaSyn
And your rationale for that is . . . ? (fill in the blank with a statement that is driven by your hypothesis).
I'm not sure. Isn't Alphasyn useful for measuring accumulated stimulation over a time period? Wouldn't that be useful to measure plastic changes?
All models involve simplifications and abstractions. Deciding that some X should be omitted can be even more important than deciding that some Y should be included.
Yes. I haven't thought of the importance of omitting as much as that of including. I'll keep this in mind.
Irrelevant. The criterion for deciding how to represent some aspect of biology, or whether that aspect should even be represented in a model, depends on the hypothesis (problem or phenomenon) YOU are studying. So far you haven't stated a hypothesis.
Hopefully that should no longer be a problem. Although I could go into more detail still on my hypothesis if you feel that it it lacking.
moeskiski

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by moeskiski »

In addition to the text editors that ted mentioned, consider Visual Studio Code. It's free and runs on all platforms. More importantly for NEURON: the first time you open a HOC or MOD file, it will prompt you to install an extension that provides NEURON syntax highlighting.
I definitely will, Thanks!
moeskiski

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by moeskiski »

Exactly what hypothesis is it intended to address?
So, I feel it would be useful to show you the abstract of my proposal for a clearer picture. Here it is:

"Neuromodulation is a useful approach in therapeutic as well as experimental applications that require the stimulation or inhibition of nerves1. Ultrasound has been shown to be an effective modality for the stimulation and inhibition of cortical and peripheral neurons in animals2–4. Its use in human subjects has been demonstrated to be effective and safe, but not yet for targeting white matter2,5,6. Targeting fiber tracts could induce simultaneous action potentials in two connected regions, and therefore may prove a valuable approach for propagating plastic changes between brain regions. As a preliminary step towards that, I will review neuronal dynamics and the ultrasound mechanism of action to determine whether this approach is conducive to plasticity changes. After establishing that it is theoretically viable, I will create a computational model of myelinated and unmyelinated axons and simulate their action potentials as they would occur using focused ultrasound. I will then measure changes in plasticity and changes in connection strength to the pre- and post-synaptic neurons to determine whether it is an effective approach."

My original intention was to create two detailed models (myelin and no myelin) and a large population model (in Matlab) but it looks now like a single model with myelinated axons as has been earlier described is what I'm going to be using.
ted
Site Admin
Posts: 6287
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by ted »

What I'm doing is making a simulation of fiber tract stimulation. I decided to work at the most basic level, with individual neurons. The hypothesis is this: stimulating the fiber tract using focused ultrasound is a viable neuromodulation modality for altering the functional plasticity between the connected regions. The paper I'm writing includes a large literature review of the topic
Then you'll know that the mechanism of ultrasound stimulation is yet unknown, but candidates include direct effects on ion channels or some transient alteration of membrane properties. In either case, it isn't going to be electrical extracellular stimulation, so there's no particular reason to reuse McIntyre's model, the complexity of which is a direct consequence of the fact that it was expressly designed for the study of electrical extracellular stimulation). In modeling, unjustified detail is unnecessary detail and is to be avoided.

The simplest model of myelinated axon alternates sections that represent nodes of Ranvier with sections that represent myelinated internodes. The node sections and the internode sections have their appropriate properties (former are short, cm = 1 uf/cm2 or thereabouts, and have gna and gk and maybe leak; latter are long, cm much smaller, and have no ion channels). If necessary, the internodes could have normal cm plus gk and or leak, and extracellular with appropriate values for extracellular's parameters).


A comment: The degree of "focus" with ultrasound is limited to about 1 mm. This means that more than one node may be stimulated, depending on the internode length and the orientation of the fiber relative to the zone of focus.
a colleague informed me of another method of stimulation available in NEURON that works by stimulating an area of effect instead of a specific section or segment.
I'll be curious to know. NEURON comes with current and voltage clamp models, but those are intracellular point sources of current. Some modelers have developed ways to represent extracellular electrical stimulation, which can affect an area, but that's not built into NEURON.
What does it mean to say that "somas lie bidirectionally to a node of Ranvier"?
It means the soma that is a part of the same neuron as the axon the node of Ranvier is on, the presynaptic soma, as well as the soma on the postsynaptic neuron. This means that I want the action potential to go in both directions on the axon. According to the reading I've done this is something that can occur in a real neuron.
So you haven't done wet lab experiments.
In this past week, it dawned on me that the issue I'm facing with the code when stimulating a single node is that the action potential only flows in one direction
You mean, you're stimulating an axon at some point along its length , and you only see the spike propagate in one direction?
Exactly what is your conceptual model (mathematical description) of the short and long term plasticities you are interested in?
To be honest with you I don't know how to answer that question. I've been looking at Chapter 5.8 of Dayan and Abbott where they describe a formula for short-term plasticity based on depression and facilitation, as well as Chapter 8 which discusses Hebbian learning, LTD/LTP, etc. for long-term plasticity. In the latter chapter, they discuss the BCM rule and timing based rules and those seem to be the ones that I may use.
Two key points. First, nothing should be in a computational model that isn't dictated by the hypothesis that the model is intended to address. Second, model development proceeds best when done in an incremental manner. Start simple, then add complexity later after you're sure that simple works correctly. Otherwise you're only complicating debugging and model revision.
Adequate, but better examples are available--consider the serial network implementations...
Thank you. I'll read the paper ASAP. As for the tutorial, I've looked through it before and it seems to instruct on how to run python in Linux, with not much on Windows. All the things I've found online instructing on how to run NEURON+Python on Windows were outdated.
In Windows, start the bash shell, then cd to the directory that contains your hoc or python code. In that directory, run
nrngui filename.hoc
or
nrniv -python filename.py
or
python filename.py
I've used Sumlime, Pycharm and Anaconda for python programming before
Great for working in Python. With appropriate plugins might be suitable for other programming languages, but I wouldn't know.
I know that I need to change ExpSyn to AlphaSyn
And your rationale for that is . . . ? (fill in the blank with a statement that is driven by your hypothesis).
I'm not sure. Isn't Alphasyn useful for measuring accumulated stimulation over a time period? Wouldn't that be useful to measure plastic changes?
It is a point source of current described by a reversal potential and a conductance transient that happens once per run. It represents a synapse that is activated once per simulation at a prespecified time and has no plasticity.
moeskiski

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by moeskiski »

Then you'll know that the mechanism of ultrasound stimulation is yet unknown, but candidates include direct effects on ion channels or some transient alteration of membrane properties. In either case, it isn't going to be electrical extracellular stimulation, so there's no particular reason to reuse McIntyre's model, the complexity of which is a direct consequence of the fact that it was expressly designed for the study of electrical extracellular stimulation). In modeling, unjustified detail is unnecessary detail and is to be avoided.

The simplest model of myelinated axon alternates sections that represent nodes of Ranvier with sections that represent myelinated internodes. The node sections and the internode sections have their appropriate properties (former are short, cm = 1 uf/cm2 or theredabouts, and have gna and gk and maybe leak; latter are long, cm much smaller, and have no ion channels). If necessary, the internodes could have normal cm plus gk and or leak, and extracellular with appropriate values for extracellular's parameters).


A comment: The degree of "focus" with ultrasound is limited to about 1 mm. This means that more than one node may be stimulated, depending on the internode length and the orientation of the fiber relative to the zone of focus.
Yes, I'm aware. My rationale for using electrical stimulation for the model was that since I'm looking for the effect of fiber tract stimulation, whatever the modality, any form of stimulation would do for the model. I mention ultrasound in my paper because it is the only real-world candidate. Ultrasound does seem to elicit effects on ion channels in the same way electrical stimulation does so for the purposes of the paper it shouldn't pose an issue.

It looks like I'll have to redo my model then. I couldn't find anything online on how to make a myelinated neuron, which is why, even though I did try to make one myself, I opted to modify an existing one thinking it would be wiser and more time-saving.
I'll be curious to know. NEURON comes with current and voltage clamp models, but those are intracellular point sources of current. Some modelers have developed ways to represent extracellular electrical stimulation, which can affect an area, but that's not built into NEURON.
I'll be sure to let you know.
So you haven't done wet lab experiments.
You are correct. I went form a background in clinical medicine to computational neuroscience so I skipped that part. Do you say that because neurons don't behave like that in vitro or because I mentioned learning it from reading? :)
You mean, you're stimulating an axon at some point along its length , and you only see the spike propagate in one direction?
Yes, that's correct.
Two key points. First, nothing should be in a computational model that isn't dictated by the hypothesis that the model is intended to address. Second, model development proceeds best when done in an incremental manner. Start simple, then add complexity later after you're sure that simple works correctly. Otherwise you're only complicating debugging and model revision.
I will keep moving incrementally in mind when developing the simpler model. I've learned a few things during the past couple of months trying to create this model so now I have a better idea on how to be a little more methodical. I'll make sure I can make up the model of only components that have a purpose. A question though: is there I direct way in NEURON to express and measure short and long term plasticity using the formulae in Dayan and Abbott, or is that something I need to model in NMODL or use a .mod file for?
It is a point source of current described by a reversal potential and a conductance transient that happens once per run. It represents a synapse that is activated once per simulation at a prespecified time and has no plasticity.
Hm. So then it's useless for my purposes...
ted
Site Admin
Posts: 6287
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by ted »

My rationale for using electrical stimulation for the model was that since I'm looking for the effect of fiber tract stimulation, whatever the modality, any form of stimulation would do for the model.
Good rationale.

A brief current pulse of sufficient amplitude applied to a single node of Ranvier should be able to elicit a spike in a myelinated axon model. This could be implemented with an ExpSyn that has a large positive reversal potential and a small maximum conductance (thus emulating a current source). The advantage of doing this is that ExpSyn is built into NEURON, and can be driven by events generated by a NetStim.
I couldn't find anything online on how to make a myelinated neuron
You mean a myelinated axon? Very easy. Just create and connect a bunch of node and internode sections with appropriate physical dimensions and membrane properties. The literature is full of them. Have you looked in ModelDB?
So you haven't done wet lab experiments.
. . . I went form a background in clinical medicine to computational neuroscience
Interesting transition. It may be useful to collaborate closely with an experimentalist, or to gain some experience doing experiments, or both.
You mean, you're stimulating an axon at some point along its length , and you only see the spike propagate in one direction?
Yes, that's correct.
I'm from Missouri. Show me.
is there I direct way in NEURON to express and measure short and long term plasticity using the formulae in Dayan and Abbott
NEURON has no built-in plasticity mechanisms. Why? Because mechanisms of plasticity, and even phenomenological descriptions of plasticity, are still topics of active research. None has achieved a level of universal acceptance parallel to that of, say, the Hodgkin-Huxley squid action potential mechanism (not that HH is perfect--it's just the quintessential example of excitable membrane and spike propagation). That being the case, it wouldn't be appropriate to appear to endorse any particular mechanism of plasticity by building it into NEURON.

However, all things are possible with programming--there are many published modeling papers that involve one form or another of plasticity. Currently ModelDB has more than 160, many of which were implemented with NEURON.
moeskiski

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by moeskiski »

You mean a myelinated axon? Very easy. Just create and connect a bunch of node and internode sections with appropriate physical dimensions and membrane properties. The literature is full of them. Have you looked in ModelDB?
Yup. I found a lot of different models in modelDB but had trouble understanding the common constituents of a myelinated axon in order to make my own. That's why I opted to modify one.
A brief current pulse of sufficient amplitude applied to a single node of Ranvier should be able to elicit a spike in a myelinated axon model. This could be implemented with an ExpSyn that has a large positive reversal potential and a small maximum conductance (thus emulating a current source). The advantage of doing this is that ExpSyn is built into NEURON, and can be driven by events generated by a NetStim.
So in my model I'd put an ExpSyn with those parameters on one of the node sections and use a NetStim instead of IClamp?
NEURON has no built-in plasticity mechanisms. Why? Because mechanisms of plasticity, and even phenomenological descriptions of plasticity, are still topics of active research. None has achieved a level of universal acceptance parallel to that of, say, the Hodgkin-Huxley squid action potential mechanism (not that HH is perfect--it's just the quintessential example of excitable membrane and spike propagation). That being the case, it wouldn't be appropriate to appear to endorse any particular mechanism of plasticity by building it into NEURON.

However, all things are possible with programming--there are many published modeling papers that involve one form or another of plasticity. Currently, ModelDB has more than 160, many of which were implemented with NEURON.
Alright, that makes sense. Thanks for clearing that up. I've tried to use a mod file from modelDB and I had some trouble compiling the file and couldn't incorporate it (it was a Frankenhaeuser-Huxley Channel). Where can I find the best instructions for doing that?
I'm from Missouri. Show me.
Haha. I had to look up that idiom. It's a good thing I took another look at it now; it's not that the spike propagates in one direction on the presynaptic axon, but that it propagates in both directions and doesn't reach threshold voltage at the presynaptic soma or the axon node attached to the soma (the part acting like an axon hillock) unless I stimulate the presynaptic axon on that very node.

https://1drv.ms/u/s!Au3SszB0HqkpiWE4G7kZ0tJllwQd

The above screenshot is of the stimulus being given at node 10 (out of 20) of the presynaptic cells. On the right, you can see the postsynaptic cell (cell 0) reaching threshold and the spike propagating along the axon. On the left, you can see the that while the site of the stimulation (node 10) and a node down the axon (node 19) show a spike reaching threshold, the node up the axon (node 1) shows a subthreshold spike and the presynaptic soma shows no activity. Not shown here is that the node attached directly to the soma also shows no activity.

https://1drv.ms/u/s!Au3SszB0HqkpiWK9qKT627OYxBB9

This one shows what happens with the stimulus given at the node directly attached to the soma, node 0 (axon hillock). You can see that the soma reaches past threshold but I don't know what to make of the way the spike happens (the rise and dip then rise above threshold). I also show nodes 2 and 20 (blue and green) as well as the postsynaptic soma spike (in black).
ted
Site Admin
Posts: 6287
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by ted »

I found a lot of different models in modelDB but had trouble understanding the common constituents of a myelinated axon in order to make my own. That's why I opted to modify one.
Model code developed by others is useful for learning programming by example, and can be a source of reusable components for new model development. It can also be a good starting point if your aim is to pursue a hypothesis that is similar to the one that the model's authors addressed. However, there is a limit to the "reusability" of any given model: the degree to which it imposes the assumptions, constraints, and purposes of the original authors on those who would reuse it. This limit is seldom mentioned or even explicitly considered, but it emerges as soon as one tries to reuse an existing model to address a hypothesis which differs from that which motivated its creators.
A brief current pulse of sufficient amplitude applied to a single node of Ranvier should be able to elicit a spike in a myelinated axon model. This could be implemented with an ExpSyn that has a large positive reversal potential and a small maximum conductance (thus emulating a current source). The advantage of doing this is that ExpSyn is built into NEURON, and can be driven by events generated by a NetStim.
So in my model I'd put an ExpSyn with those parameters on one of the node sections and use a NetStim instead of IClamp?
An unambiguous statement would be "replace the IClamp with an ExpSyn driven by a NetStim."
I've tried to use a mod file from modelDB and I had some trouble compiling the file and couldn't incorporate it . . . Where can I find the best instructions for doing that?
At NEURON's web site www.neuron.yale.edu look on the Documentation page for a link to the FAQ list.
it's not that the spike propagates in one direction on the presynaptic axon, but that it propagates in both directions and doesn't reach threshold voltage at the presynaptic soma or the axon node attached to the soma (the part acting like an axon hillock) unless I stimulate the presynaptic axon on that very node.
Before addressing this, here are some comments.
1. Clearly the model is not initialized to steady state. This can affect excitability, which in turn can affect spike propagation. Run a simulation with no stimulus to discover the resting potential of the model cell. Let it run for as long as it takes for v to settle. If steady state v is identical everywhere i.e. uniform throughout the model cell, lucky you--just change v_init to this value. If it isn't, we should discuss what needs to be done.
2. The stimulus applied to node 10 looks rather long in duration. This allows time for stimulus current to escape to adjacent nodes, which in turn can alter spike initiation and propagation. Can you elicit a spike with a 0.1 ms duration current?
3. It is always a good idea to wait at least 1 ms before starting a stimulus. This allows the user to see whether or not the model is in a resting state. Experimentalists do the same when observing the effects of injected current pulses on real cells, for the same reason.
4. The complete absence of even a bump in cell 1's soma.v(0.5) is peculiar, especially since node 1 has a substantial depolarization. That's not going to happen if the axon is intact, and it's difficult to reconcile with successful orthodromic propagation demonstrated in your other figure.
I don't know what to make of the way the spike happens (the rise and dip then rise above threshold).
That's what the response to a brief injected suprathreshold current should look like. To understand why, you should study a toy model (single compartment, no axon) with just NEURON's built-in hh mechanism. Drive it with an IClamp that delivers a 0.1 ms duration current pulse that starts at 1 ms. Make t_stop no longer than 5 ms. Make 3 graphs that display the following variables plotted vs. t:
v
ina, ik and il_hh(0.5) individually
ina+ik+il_hh(0.5) (i.e. the actual algebraic expression)
moeskiski

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by moeskiski »

ted wrote: Sun Jun 24, 2018 1:44 pm Model code developed by others is useful for learning programming by example, and can be a source of reusable components for new model development. It can also be a good starting point if your aim is to pursue a hypothesis that is similar to the one that the model's authors addressed. However, there is a limit to the "reusability" of any given model: the degree to which it imposes the assumptions, constraints, and purposes of the original authors on those who would reuse it. This limit is seldom mentioned or even explicitly considered, but it emerges as soon as one tries to reuse an existing model to address a hypothesis which differs from that which motivated its creators.
I see. Currently, there are two models that seem to be possibly useful for my purposes. One is this Mcintyre et al '02 and the other is the Moore et al '78. The former was used to model antidromic propagation (https://link.springer.com/article/10.10 ... 007-0043-9), so it is possible, although my purposes are to ultimately measure plasticity so this may be too complex a model as you alluded to. The latter model is quite simple and seems to be promising in that I could possibly easily attach a soma and dendrites along with the use of the expsyn/netstim method to stimulate a node and have it's signal propagate between two neurons. Afterward I'd use the stdp.mod file to measure the plasticity changes between the cells. Correct?
ted wrote: Sun Jun 24, 2018 1:44 pm Before addressing this, here are some comments.
1. Clearly the model is not initialized to steady state. This can affect excitability, which in turn can affect spike propagation. Run a simulation with no stimulus to discover the resting potential of the model cell. Let it run for as long as it takes for v to settle. If steady state v is identical everywhere i.e. uniform throughout the model cell, lucky you--just change v_init to this value. If it isn't, we should discuss what needs to be done.
2. The stimulus applied to node 10 looks rather long in duration. This allows time for stimulus current to escape to adjacent nodes, which in turn can alter spike initiation and propagation. Can you elicit a spike with a 0.1 ms duration current?
3. It is always a good idea to wait at least 1 ms before starting a stimulus. This allows the user to see whether or not the model is in a resting state. Experimentalists do the same when observing the effects of injected current pulses on real cells, for the same reason.
4. The complete absence of even a bump in cell 1's soma.v(0.5) is peculiar, especially since node 1 has a substantial depolarization. That's not going to happen if the axon is intact, and it's difficult to reconcile with successful orthodromic propagation demonstrated in your other figure.
1. I did exactly that and the result was chaos. What next? https://1drv.ms/u/s!Au3SszB0HqkpiWRGIdnq0qvmSzgR
2.The stimulus is in fact 0.1ms
3. I did that here to no difference but I guess that's expected.
4. Isn't it? I think I might have figured it out...
(https://1drv.ms/u/s!Au3SszB0HqkpiWXZvO3_B8D_YKBN - cell 1 is presynaptic where the soma doesn't fire, cell 0 is postsynaptic where it does - the axon is constructed in this order [node][MYSA][FLUT][STIM][FLUT][MYSA][node]...etc. with the smaller numbers more proximal to the soma.
I was looking at the activity of all the points and It looks like the last propagating section antidromically in the presynaptic axon is FLUT[1] MYSA[0], FLUT[0] and node[0] all don't fire. Now, if the issue lies in the FLUT section, what I'm thinking is that maybe this model is designed in a way that makes it so that the propagation of AP requires a signal to be carried to FLUT[0] orthodromically. In this link https://1drv.ms/u/s!Au3SszB0HqkpiWYfADORQ-Yg8C8D I have the FLUTs plotted with the postsynaptic soma and last node for reference. The orange and yellow are presynaptic. You can see that the last FLUTs "[39]" in both cells behave the same wheras the second "[1]" do not. It isn't obvious to me that the reason for this has something to do with the signal being propagated through the dendrite and soma first.
Whether or not that's at all accurate, I do think that something about how the model terminates is the issue but that it's remediable. In the paper I linked above, they add an "initial segment" to the model which seems to allow them to propagate a signal antidromically. In the schematic, it looks just like a Ranvier node so I'm not sure what's being done there.
moeskiski

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by moeskiski »

ted wrote: Sun Jun 17, 2018 4:41 pm I'll be curious to know. NEURON comes with current and voltage clamp models, but those are intracellular point sources of current. Some modelers have developed ways to represent extracellular electrical stimulation, which can affect an area, but that's not built into NEURON.
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3928616/ Here's the paper where the area of effect mod is described.
ted wrote: Wed Jun 20, 2018 1:25 am A brief current pulse of sufficient amplitude applied to a single node of Ranvier should be able to elicit a spike in a myelinated axon model. This could be implemented with an ExpSyn that has a large positive reversal potential and a small maximum conductance (thus emulating a current source). The advantage of doing this is that ExpSyn is built into NEURON, and can be driven by events generated by a NetStim.
So I made some changes to my model as suggested above. I also used the STDP mod - I put expsynSTDP at the dendrites as well as at node[0] (the axon hillock). Now that I've done those things I don't know how to measure the change in plasticity. From looking at the command promp while running the simulation it doesn't look like there's much happening in weight change. I'll show you the code below.

This is the where I use netstim as you suggested (it worked)

Code: Select all

objectvar precell, cell /* Declare the object variables for the  cells */

cell = new Cell(3,0,0)      /* Create the post-synaptic cell */

    
precell = new Cell(3,0,0)                

precell.node[20] precell.presyn = new NetCon(&v(0), cell.postsyn, -20, 1, 20.8)



objectvar stim, target, connection      
/* Declare the object variable for the
 pulse stimulus and for target of stimulation that ill use expsyn for, and the connection */

/*assign parameters for connection for netstim*/
thresh = -20
delay = 1
weight = 20.8

precell.node[10] {

stim = new NetStim(0.5)   
stim.interval = 10    
stim.number = 10    
stim.start = 0
stim.noise = 0

target = new Exp2Syn(0.5) 
target.tau1 = 0.1
target.tau2 = 0.2
target.e = 150

connection = new NetCon(stim,target,thresh,delay,weight)
}


And here is the part of the cell template that I changed to include ExpSynSTDP:

Code: Select all

...

/* Next we construct the topology by connecting each of the sections
 together. */
connect node[0](0), soma(0)    /* Connect the axon to the soma */
                
/* Connect the dendrites to the other end of the soma */  
for i = 0, ndend-1 connect dend[i](0), soma(1)

/* Next, we add the post-synaptic connections to the dendrites. */    
for i = 0, ndend-1 dend[i] {    
postsyn[i] = new ExpSynSTDP(0.8) /* Create a new synapse 80% of the way out on each dendrite. */    
postsyn[i].d = 1    /* Set LTD to 1 */
postsyn[i].p = 1   /* Set LTP to 1 */
}

/*next we create a point at the axon hillock to measure weight changes in the presynaptic soma from*/
objectvar hillock

node[0] {
hillock = new ExpSynSTDP(0.2) 
hillock.d = 1
hillock.p = 1
}
Does it all seem sound?

The main problem still that the presynaptic cell doesn't reach action potential, so maybe it just makes sense that the weight isn't changing and I've not touched the main issue with the model yet despite the changes.
ted
Site Admin
Posts: 6287
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by ted »

Currently, there are two models that seem to be possibly useful for my purposes. One is this Mcintyre et al '02 and the other is the Moore et al '78.
If the plasticity of interest to you is synaptic plasticity, why reuse the McIntyre model, which was designed to be used in studies that focus on axonal stimulation? "Yes, you could go rock climbing in a suit and wear wing tips, but why?"
1. Clearly the model is not initialized to steady state. This can affect excitability, which in turn can affect spike propagation. Run a simulation with no stimulus to discover the resting potential of the model cell. Let it run for as long as it takes for v to settle. If steady state v is identical everywhere i.e. uniform throughout the model cell, lucky you--just change v_init to this value. If it isn't, we should discuss what needs to be done.
1. I did exactly that and the result was chaos.
Hardly chaos. But the model is definitely not initialized to steady state. Its initialization is probably fixable, but if the primary focus of your study is on effects of synaptic plasticity, why take on an unnecessary project (ensuring correct initialization of a model that needlessly involves many irrelevant complexities)?
2. The stimulus applied to node 10 looks rather long in duration. This allows time for stimulus current to escape to adjacent nodes, which in turn can alter spike initiation and propagation. Can you elicit a spike with a 0.1 ms duration current?
2.The stimulus is in fact 0.1ms
Good.
4. The complete absence of even a bump in cell 1's soma.v(0.5) is peculiar, especially since node 1 has a substantial depolarization. That's not going to happen if the axon is intact, and it's difficult to reconcile with successful orthodromic propagation demonstrated in your other figure.
4. Isn't it? I think I might have figured it out . . . what I'm thinking is that maybe this model is designed in a way that
Unconvincing. Nobody designs models that way. Your latest plots don't show v in cell 1's soma, and words are no substitute for results. If cell 1 is going to have synapses with stdp, it's important that those synapses "know" when the cell spikes. There's a problem with cell 1 and it needs to be diagnosed and fixed. The first step, however, might be to abandon the McIntyre axon model.

Two comments about the graphs:
1. It is impossible to read tiny yellow letters surrounded by compression artifact. Avoid yellow.
2. It is sufficient to see v at the somas and the nodes of Ranvier. The FLUT and MYSA results add little (of course they'll go away if you abandon the McIntyre model).
moeskiski

Re: Making whole cells out of Mcintyre myelinated axon model (2002) and testing short and long-term plasticity between t

Post by moeskiski »

ted wrote: Thu Jun 28, 2018 2:44 pm Unconvincing. Nobody designs models that way. Your latest plots don't show v in cell 1's soma, and words are no substitute for results. If cell 1 is going to have synapses with stdp, it's important that those synapses "know" when the cell spikes. There's a problem with cell 1 and it needs to be diagnosed and fixed. The first step, however, might be to abandon the McIntyre axon model.

Two comments about the graphs:
1. It is impossible to read tiny yellow letters surrounded by compression artifact. Avoid yellow.
2. It is sufficient to see v at the somas and the nodes of Ranvier. The FLUT and MYSA results add little (of course they'll go away if you abandon the McIntyre model).
Alright, I understand that I may have to abandon the Mcintyre model, but I managed to get the model to work today and got both cells to fire! The problem was somewhere in the connection between node0 and node1. I inserted an ExpSynSTDP into node 0 and used NetCon to connect node 1 to it. When I ran it the presynaptic soma fired every other time the postsynaptic soma fired. https://1drv.ms/u/s!Au3SszB0HqkpiWfQ6XMCvUO_jD3m I had also changed my stimulation method to use NetStim on an ExpSyn like you said. I'll attach the code.

Code: Select all

xopen("$(NEURONHOME)/lib/hoc/noload.hoc")


nrnmainmenu()



tstop = 20          /* Set the time run the simulation */


ncells = 1      /* PREVIOUSLY The number of presynaptic cells */




/* Below we define a template for our Cell.  The template allows us to
 * create multiple instances of the Cell. */
 


begintemplate Cell



/* Make the soma, axon, dendrites, pre- and post-synaptic connections
 * accessible to the rest of the program. */
public soma, dend, presyn, postsyn, hillock, prehill

public node, MYSA, FLUT, STIN


create soma, dend[1]  
/* Create (actually declare) all of the cell's sections */

create node[1], MYSA[1], FLUT[1], STIN[1]


objectvar postsyn[1]        
/* Declare the object variables for
 the post-synaptic connections on
 the dendrites */

objectvar presyn        
/* Declare the object variable for the
 pre-synaptic connection at the end of the axon */
 
objectvar hillock, prehill
/* declare the hillock which will be at node 0 and prehillock which will be node 1 */


proc init() {local i
    
ndend = $1          /* Define the number of dendrites */    
soma_diam = 100     /* Define the diameter of the soma */    
soma_len = 100      /* Define the length of the soma */    
soma_nseg = 1       /* Define the # of compartments */    
   
dend_diam = 25      /* Define the diameter of the dend */    
dend_len = 500      /* Define the length of the dend */    
dend_nseg = 5       /* Define the # of compartments */
    

//topological parameters//	

axonnodes=21  				    
paranodes1=40	    
paranodes2=40		    
axoninter=120			
axontotal=221		
	 



//morphological parameters//	
	   
fiberD=10.0	
//choose from 5.7, 7.3, 8.7, 10.0, 11.5, 12.8, 14.0, 15.0, 16.0   
paralength1=3   
nodelength=1.0      
space_p1=0.002      
space_p2=0.004   
space_i=0.004
    
//electrical parameters//		
	       
rhoa=0.7e6 //Ohm-um//	        
mycm=0.1 //uF/cm2/lamella membrane//	       
mygm=0.001 //S/cm2/lamella membrane//
    		    
if (fiberD==5.7) {g=0.605 axonD=3.4 nodeD=1.9 paraD1=1.9 paraD2=3.4 deltax=500 paralength2=35 nl=80}		      
if (fiberD==7.3) {g=0.630 axonD=4.6 nodeD=2.4 paraD1=2.4 paraD2=4.6 deltax=750 paralength2=38 nl=100}		      
if (fiberD==8.7) {g=0.661 axonD=5.8 nodeD=2.8 paraD1=2.8 paraD2=5.8 deltax=1000 paralength2=40 nl=110}		       
if (fiberD==10.0) {g=0.690 axonD=6.9 nodeD=3.3 paraD1=3.3 paraD2=6.9 deltax=1150 paralength2=46 nl=120}		       
if (fiberD==11.5) {g=0.700 axonD=8.1 nodeD=3.7 paraD1=3.7 paraD2=8.1 deltax=1250 paralength2=50 nl=130}		        
if (fiberD==12.8) {g=0.719 axonD=9.2 nodeD=4.2 paraD1=4.2 paraD2=9.2 deltax=1350 paralength2=54 nl=135}		       
if (fiberD==14.0) {g=0.739 axonD=10.4 nodeD=4.7 paraD1=4.7 paraD2=10.4 deltax=1400 paralength2=56 nl=140}		       
if (fiberD==15.0) {g=0.767 axonD=11.5 nodeD=5.0 paraD1=5.0 paraD2=11.5 deltax=1450 paralength2=58 nl=145}		       
if (fiberD==16.0) {g=0.791 axonD=12.7 nodeD=5.5 paraD1=5.5 paraD2=12.7 deltax=1500 paralength2=60 nl=150}
		    
    

Rpn0=(rhoa*.01)/(PI*((((nodeD/2)+space_p1)^2)-((nodeD/2)^2)))
Rpn1=(rhoa*.01)/(PI*((((paraD1/2)+space_p1)^2)-((paraD1/2)^2))) 
Rpn2=(rhoa*.01)/(PI*((((paraD2/2)+space_p2)^2)-((paraD2/2)^2)))    
Rpx=(rhoa*.01)/(PI*((((axonD/2)+space_i)^2)-((axonD/2)^2)))   
interlength=(deltax-nodelength-(2*paralength1)-(2*paralength2))/6
  

create soma, dend[ndend] /* Create all of the cell's sections */
    
create node[axonnodes], MYSA[paranodes1], FLUT[paranodes2], STIN[axoninter]

    

objectvar presyn, prehill
    
objectvar postsyn[ndend]    
/* Declare the object variables for
 the three post-synaptic connections
 on the dendrites */


/* First set all of the dimensions and insert the channels into each
 section. */
 
soma {   
nseg = soma_nseg    /* # of compartments */  
diam = soma_diam    /* Set the diameter of the soma (in um) */  
L = soma_len        /* Set the length of the soma (in um) */  
insert hh       /* Insert Hodkin-Huxley type channels
 in the soma */   
pt3dclear()     /* Clear the 3D position of the cell */    
pt3dadd($2,$3,0,soma_diam) /* Add the axon-end 3D point */  
pt3dadd($2+soma_len,$3,0,soma_diam) /* Add the dendrite-end 3D
 point */

}

    
for i=0,axonnodes-1 {				
node[i]{								    
nseg=1				    	    
diam=nodeD				    	    
L=nodelength				    	    
Ra=rhoa/10000				    	    
cm=2		    	    
insert axnode			    
insert extracellular 	    
xraxial=Rpn0 	    
xg=1e10 	    
xc=0				
}   
}
    

for i=0, paranodes1-1 {			
MYSA[i]{				    	    
nseg=1				    	    
diam=fiberD				    	    
L=paralength1				    	    
Ra=rhoa*(1/(paraD1/fiberD)^2)/10000				
cm=2*paraD1/fiberD				    	    
insert pas				    	    
g_pas=0.001*paraD1/fiberD						      
e_pas=-80				    	    
insert extracellular 
xraxial=Rpn1 
xg=mygm/(nl*2) 
xc=mycm/(nl*2)	
}	   
}
    
    

for i=0, paranodes2-1 {	
FLUT[i]{			        
nseg=1			        
diam=fiberD			        
L=paralength2			        
Ra=rhoa*(1/(paraD2/fiberD)^2)/10000			       
cm=2*paraD2/fiberD			        
insert pas	    	 
g_pas=0.0001*paraD2/fiberD				    
e_pas=-80			        
insert extracellular 
xraxial=Rpn2 
xg=mygm/(nl*2) 
xc=mycm/(nl*2)
}  
}
    
    
    

for i=0, axoninter-1 {	    
STIN[i]{					    
nseg=1				    	    
diam=fiberD				    	    
L=interlength				    	    
Ra=rhoa*(1/(axonD/fiberD)^2)/10000				    	   
cm=2*axonD/fiberD				    	    
insert pas	    
g_pas=0.0001*axonD/fiberD				    	    
e_pas=-80				    	    
insert extracellular 
xraxial=Rpx 
xg=mygm/(nl*2) 
xc=mycm/(nl*2)	
}  
}
    

for i=0, axonnodes-2 {			
connect MYSA[2*i](0), node[i](1)				
connect FLUT[2*i](0), MYSA[2*i](1)				
connect STIN[6*i](0), FLUT[2*i](1)	
connect STIN[6*i+1](0), STIN[6*i](1)				
connect STIN[6*i+2](0), STIN[6*i+1](1)		
connect STIN[6*i+3](0), STIN[6*i+2](1)		
connect STIN[6*i+4](0), STIN[6*i+3](1)					
connect STIN[6*i+5](0), STIN[6*i+4](1)					
connect FLUT[2*i+1](0), STIN[6*i+5](1)				
connect MYSA[2*i+1](0), FLUT[2*i+1](1)			
connect node[i+1](0), MYSA[2*i+1](1)		    
}
	
    
	
    

for i = 0, ndend-1 dend[i] {    
nseg = dend_nseg    /* # of compartments */   
diam = dend_diam    /* Set the diameter of the dentrite
 (in um) */    
L = dend_len        /* Set the length of the dendrite (in
 um) */   
insert pas      /* Insert passive type channels in the
 dendrite */   
pt3dclear()     /* Clear the 3D position of the cell */         
      
/* Add the soma-end 3D point */    
pt3dadd($2+soma_len,$3,0,diam)       
         
/* Add the post-synaptic end 3D point */    
pt3dadd($2+soma_len+dend_len*cos(0.2*PI*(1-2*i/(ndend-1))),$3+dend_len*sin(0.2*PI*(1-2*i/(ndend-1))),0,diam)   
}



/* Next we construct the topology by connecting each of the sections
 together. */
    

connect node[0](0), soma(0)    /* Connect the axon to the soma */
                
/* Connect the dendrites to the other end of the soma */  
for i = 0, ndend-1 connect dend[i](0), soma(1)


/* Next, we add the post-synaptic connections to the dendrites. */    
for i = 0, ndend-1 dend[i] {    
postsyn[i] = new ExpSynSTDP(0.8) /* Create a new synapse 80% of the way out on each dendrite. */    
postsyn[i].tau = 0.1    /* Set LTD to 1 */
postsyn[i].e = 15   /* Set LTP to 1 */
}

/*next we create a point at the axon hillock to measure weight changes in the presynaptic soma from*/
objectvar hillock

node[0] {
hillock = new ExpSynSTDP(0.2) 
hillock.tau = 0.1
hillock.e = 15
}

}



endtemplate Cell




objectvar precell, cell /* Declare the object variables for the  cells */

cell = new Cell(3,0,0)      /* Create the post-synaptic cell */

    
precell = new Cell(3,0,0)                

/* Connect the pre-synaptic AP trigger to the post-synaptic alpha synapse */    
precell.node[20] precell.presyn = new NetCon(&v(0), cell.postsyn, -20, 1, 20.8)

/* a connection between the axon hillock node (node 0) and the node after it (node 1) where node 0 acts like a postsynapse and node 1 acts like a presynapse */
precell.node[1] precell.prehill = new NetCon(&v(0), precell.hillock, -20, 1, 20.8)


objectvar stim, target, connection      
/* Declare the object variable for the
 pulse stimulus and for target of stimulation that ill use expsyn for, and the connection */

/*assign parameters for connection for netstim*/
thresh = -20
delay = 1
weight = 20.8

precell.node[10] {
    /* this is where I changed point of stimulation form soma to node and to node[10] */
stim = new NetStim(0.5)   /* Create a pulse synapse in the soma (now node)
 of each pre-synaptic cell */
stim.interval = 10       /* Set the stimulus duration (in ms) */
stim.number = 10      /* Set the stimulus amplitude (in nA) */
stim.start = 0
stim.noise = 0

target = new ExpSyn(0.5) 
target.tau = 0.1
target.e = 15

connection = new NetCon(stim,target,thresh,delay,weight)
}


access precell.node[10]    /* default section access */

xopen("prog4.ses")      /* Open the session file that contains
 the menus and graphs */
Now I'm trying to figure out how to measure short term plasticity using one of these three
1. ExpSynSTDP
2. https://senselab.med.yale.edu/ModelDB/s ... hoc#tabs-2
3. https://senselab.med.yale.edu/ModelDB/s ... 815#tabs-2

Using the first currently and my code works, but how do I extract results? How do I know what the weight changes that arise are using these mods?

The other thing I'm doing is modifying the moore model to suit my needs. I will attempt to modify it in the same way I did the mcintyre model and see what results I get.
ted wrote: Thu Jun 28, 2018 2:44 pm If the plasticity of interest to you is synaptic plasticity, why reuse the McIntyre model, which was designed to be used in studies that focus on axonal stimulation? "Yes, you could go rock climbing in a suit and wear wing tips, but why?"
The thing that attracts me to the McIntyre model is that my study is trying to see both if axonal stimulation is a viable approach as well as the changes in synaptic plasticity that arise, so a highly detailed axonal stimulation model where I have plenty of parameters at my disposal seems convenient. For now, I'll put it on hold and see if the Moore model could provide whats necesary.
Post Reply