You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
4.6 KiB
167 lines
4.6 KiB
""" |
|
These are the graphs that can be used to present certain graphs through the pyqtgraph window |
|
""" |
|
|
|
import pyqtgraph as pg |
|
import numpy as np |
|
import cnmodel.util.pynrnutilities as PU |
|
|
|
|
|
def stimulus_graph(win, stim, row, col): |
|
""" |
|
Presents a graph of |
|
win: pg.GraphicsWindow() |
|
stim:(list) dummy sgc stim results |
|
""" |
|
p1 = win.addPlot( |
|
title="Stimulus", row=row, col=col, labels={"bottom": "T (ms)", "left": "V"} |
|
) |
|
data = zip(stim.time, stim.sound) |
|
time = [] |
|
stim = [] |
|
for x, y in data: |
|
if 0.1 < x < 0.25: |
|
time.append(x * 1000) |
|
stim.append(y) |
|
p1.plot(time, stim, pen=pg.mkPen("k", width=0.75)) |
|
return p1 |
|
|
|
|
|
def an_spike_graph(win, pre_cells, row, col): |
|
""" |
|
Displays the spikes over time as lines with each cell representing a single row a single trial presentation |
|
:param win: pg.GraphicsWindow() |
|
:param pre_cells: (list) spike train time values |
|
:return: exists to allow for further modifications on the pg.GraphicsWindow object |
|
""" |
|
p2 = win.addPlot( |
|
title="AN spikes", |
|
row=row, |
|
col=col, |
|
labels={"bottom": "T (ms)", "left": "AN spikes (first trial)"}, |
|
) |
|
xan = [] |
|
yan = [] |
|
for k in range(len(pre_cells[0])): |
|
r = pre_cells[0][k] |
|
xan.extend(r) |
|
yr = k + np.zeros_like(r) + 0.2 |
|
yan.extend(yr) |
|
c = pg.PlotCurveItem() |
|
xp = np.repeat(np.array(xan), 2) |
|
yp = np.repeat(np.array(yan), 2) |
|
yp[1::2] = yp[::2] + 0.6 |
|
c.setData( |
|
xp.flatten(), |
|
yp.flatten(), |
|
connect="pairs", |
|
width=1.0, |
|
pen=pg.mkPen("k", width=1.5), |
|
) |
|
p2.addItem(c) |
|
return p2 |
|
|
|
|
|
def spike_graph(win, time, vms, row, col, title="cell"): |
|
""" |
|
Displays the spikes over time as lines with each cell representing a single row a single trial presentation |
|
:param win: pg.GraphicsWindow() |
|
:param time: (list) of time that lines up with Vms |
|
:param vms: voltage trace data as a list |
|
:return: exists to allow for further modifications on the pg.GraphicsWindow object |
|
""" |
|
p3 = win.addPlot( |
|
title=f"{title} Spikes", |
|
row=row, |
|
col=col, |
|
labels={"bottom": "T (ms)", "left": "Trial #"}, |
|
) |
|
xcn = [] |
|
ycn = [] |
|
for k in range(len(time)): |
|
bspk = PU.findspikes(time[k], vms[k], -35.0) |
|
xcn.extend(bspk) |
|
yr = k + np.zeros_like(bspk) + 0.2 |
|
ycn.extend(yr) |
|
d = pg.PlotCurveItem() |
|
xp = np.repeat(np.array(xcn), 2) |
|
yp = np.repeat(np.array(ycn), 2) |
|
yp[1::2] = yp[::2] + 0.6 |
|
d.setData(xp.flatten(), yp.flatten(), connect="pairs", pen=pg.mkPen("k", width=1.5)) |
|
p3.addItem(d) |
|
|
|
return p3 |
|
|
|
|
|
def voltage_graph(win, time, vms, row, col): |
|
""" |
|
Actually displays the voltage trace |
|
:param win: pg.GraphicsWindow() |
|
:param time: (list) of time that lines up with Vms |
|
:param vms: voltage trace data as a list |
|
:return: exists to allow for further modifications on the pg.GraphicsWindow object |
|
""" |
|
p4 = win.addPlot( |
|
title="Pyramidal Vm", |
|
row=row, |
|
col=col, |
|
labels={"bottom": "T (ms)", "left": "Vm (mV)"}, |
|
) |
|
nrep = len(time) |
|
if nrep > 3: |
|
display = 3 |
|
else: |
|
display = nrep |
|
for nr in range(display): |
|
p4.plot( |
|
time[nr], vms[nr], pen=pg.mkPen(pg.intColor(nr, nrep), hues=nrep, width=1.0) |
|
) |
|
return p4 |
|
|
|
|
|
def an_psth_graph(win, pre_cells, row, col): |
|
p6 = win.addPlot( |
|
title="AN PSTH", |
|
row=row, |
|
col=col, |
|
labels={"bottom": "T (ms)", "left": "Sp/ms/trial"}, |
|
) |
|
bins = np.arange(100, 250, 1) |
|
all_xan = [] |
|
for x in range(len(pre_cells)): |
|
for y in range(len(pre_cells[x])): |
|
all_xan.extend(pre_cells[x][y]) |
|
(hist, binedges) = np.histogram(all_xan, bins) |
|
curve6 = p6.plot( |
|
binedges, |
|
hist, |
|
stepMode=True, |
|
fillBrush=(0, 0, 0, 255), |
|
brush=pg.mkBrush("k"), |
|
fillLevel=0, |
|
) |
|
return p6 |
|
|
|
|
|
def cell_psth_graph(win, time, vms, row, col, title="cell"): |
|
p7 = win.addPlot( |
|
title=f"{title} PSTH", |
|
row=row, |
|
col=col, |
|
labels={"bottom": "T (ms)", "left": "Sp/ms/trial"}, |
|
) |
|
spike_times = [] |
|
for k in range(len(time)): |
|
bspk = PU.findspikes(time[k], vms[k], -35.0) |
|
spike_times.extend(bspk) |
|
bins = np.arange(100, 250, 0.1) |
|
(hist, binedges) = np.histogram(spike_times, bins) |
|
curve7 = p7.plot( |
|
binedges, |
|
hist, |
|
stepMode=True, |
|
fillBrush=(0, 0, 0, 255), |
|
brush=pg.mkBrush("k"), |
|
fillLevel=0, |
|
) |
|
return p7
|
|
|