Plotting M for IntFire4

Anything that doesn't fit elsewhere.
Post Reply
tmazing
Posts: 5
Joined: Wed Feb 06, 2019 7:39 pm

Plotting M for IntFire4

Post by tmazing » Thu May 16, 2019 9:01 pm

Hello!

I was wondering if anyone could let me know how to plot M for IntFire4. Unfortunately, it's not a global or range variable, but a function, so I'm not sure how to plot it with Python. I've tried using:

mvec = h.Vector()
mvec.record(h._ref_M)

with no luck. Thanks!

ted
Site Admin
Posts: 5653
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Plotting M for IntFire4

Post by ted » Fri May 17, 2019 11:23 pm

Example (pertains to all IntFire classes):
if1 = h.IntFire1()
The Python name of the function itself will be if1.M, but you want the numerical value returned by the function, so you need if1.M(). Note that if1.M() will not return a reasonable value unless h.finitialize() was called previously. Indeed, executing if1.M() _before_ initialization will trigger a segmentation fault.

jtg374
Posts: 4
Joined: Tue Jun 25, 2019 5:55 am

Re: Plotting M for IntFire4

Post by jtg374 » Thu Nov 21, 2019 10:46 pm

So how do we plot M-t using if1.M? any examples? Thanks

ted
Site Admin
Posts: 5653
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Plotting M for IntFire4

Post by ted » Fri Nov 22, 2019 12:48 pm

Your first decision is whether to plot M vs. t "on the fly" i.e. while the simulation is executing. If yes, this is most easily done by using NEURON's own plotting features. For example, if your IntFire1 instance was created by this Python statement

if1 = h.IntFire1()

then print will reveal its hoc name, e.g.

print(if1)

would return something like this

IntFire1[0]

and you could create a NEURON graph that will plot if1.M vs. time by executing

g = h.Graph()
g.size(0,h.tstop,0,1) # sets x and y axis ranges
g.addexpr("IntFire1[0].M") # specify hoc name of variable used for y coordinates
h.graphList[2].append(g) # x coordinates are h.t, updated automatically during a run

before you execute h.run() (or h.continuerun() if that's how you're launching simulations). This all assumes that you loaded NEURON's graphical library e.g. by

from neuron import h, gui

before executing any GUI-related statements.


The alternative is to capture the values of M and t during a simulation to a pair of Vectors, using the Vector class's record() method; then after the simulation ends, plot the saved values to a graph. This plot could be generated with either NEURON's own plotting features, or entirely with Python, e.g. using the matplotlib module. Vector.record() is documented in the Programmer's Reference; matplotlib is documented extensively all over the Internet.

Post Reply