Good questions.
Corinne wrote:Method 1:
Code: Select all
// kv delayed rectifier channels
iseg { insert kv gbar_kv = gkv_axon }
hill { insert kv gbar_kv = gkv_axon }
soma { insert kv gbar_kv = gkv_soma }
dendritic { insert kv gbar_kv = 0 } //I ADDED THIS LINE
This tries to treat dendritic as if it were the name of a section. However, dendritic is a SectionList, so the attempt to change the currently accessed section fails. So instead of inserting kv into all of the sections in the dendritic SectionList, the statement
dendritic { insert kv gbar_kv = 0 }
does something else.
"But what else?"
Well,
dendritic { print secname() }
returns
soma
So
dendritic { insert kv gbar_kv = 0 }
changes somatic gbar_kv from a nonzero value to 0. You can verify this by executing
soma print gbar_kv
right after model setup, then execute
dendritic { insert kv gbar_kv = 0 }
and finally
soma print gbar_kv
And that could make the simulation results quite different.
Method 2:
Code: Select all
// dendritic channels
forsec dendritic {
insert km gbar_km = gkm_dend
insert kca gbar_kca = gkca_dend
insert ca gbar_ca = gca_dend
insert kv gbar_kv = 0 //I ADDED THIS LINE
insert cad
}
Sorry, I don't see any variables called gkm_dend, gkca_dend, or gca_dend in these files. However, let's suppose you meant
Code: Select all
// dendritic channels
forsec dendritic {
insert km gbar_km = gkm
insert kca gbar_kca = gkca
insert ca gbar_ca = gca
insert kv gbar_kv = 0 //I ADDED THIS LINE
insert cad
}
Well, I happened to notice that this change produced a simulation result identical to what happened with your Method 1, and we know what Method 1 did (set soma gbar_kv to 0). So let's see if the dendritic SectionList just happens to include . . . soma.
In principle I could iterate through the names of all sections in dendritic and look for one called soma, but then I'd have to write a bit of clever code to do that. Instead, is there some other attribute of soma that we could use to see if soma is in dendritic? How about its diameter? At the oc> prompt, type
soma psection()
and note, among other things, that soma diameter is 23.6... um, which seems likely to be larger than any dendrite's diameter.
So at the oc> prompt I enter
forsec dendritic if (diam>20) print secname()
and sure enough hoc prints
soma
Well, then, exit NEURON and restart, select figure 1 again, choose one of the cell morphologies, and execute (type at the oc> prompt)
soma print gbar_kv
Note that gbar_kv is 200 in the soma.
Now execute
forsec dendritic { insert kv gbar_kv = 0 }
and then
soma print gbar_kv
and guess what happened to soma's gbar_kv.
Lessons:
1. Sanity checks are good. Do them often. That's how to learn stuff.
2. Mismatch between expectations and simulation results is often due to mismatch between the model in one's head and the model in the computer.
3. When disagreements occur, the computer is always right.
4. Names don't always mean what one expects them to mean. I certainly didn't expect soma to be a member of the dendritic SectionList. Looking at demofig1.hoc, I now see this telltale bit:
Code: Select all
dendritic_only = new SectionList()
forsec dendritic dendritic_only.append()
soma dendritic_only.remove()
which only goes to prove the old saying "It ain't what you don't know that gets you into trouble. It's what you know for sure that just ain't so." Variously rendered and variously attributed.