Skip to content

Commit 9bec05e

Browse files
committed
Merge branch 'develop' of https://github.com/int-brain-lab/iblapps into develop
2 parents b5feac5 + 552ee06 commit 9bec05e

File tree

9 files changed

+1211
-33
lines changed

9 files changed

+1211
-33
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import pyqtgraph as pg
2+
from pyqtgraph import debug as debug
3+
4+
5+
class AdaptedAxisItem(pg.AxisItem):
6+
def __init__(self, orientation, parent=None,):
7+
pg.AxisItem.__init__(self, orientation, parent=parent)
8+
9+
def drawPicture(self, p, axisSpec, tickSpecs, textSpecs):
10+
profiler = debug.Profiler()
11+
12+
p.setRenderHint(p.Antialiasing, False)
13+
p.setRenderHint(p.TextAntialiasing, True)
14+
15+
# draw long line along axis
16+
pen, p1, p2 = axisSpec
17+
p.setPen(pen)
18+
p.drawLine(p1, p2)
19+
p.translate(0.5, 0) # resolves some damn pixel ambiguity
20+
21+
# draw ticks
22+
for pen, p1, p2 in tickSpecs:
23+
p.setPen(pen)
24+
p.drawLine(p1, p2)
25+
profiler('draw ticks')
26+
27+
# Draw all text
28+
if self.style['tickFont'] is not None:
29+
p.setFont(self.style['tickFont'])
30+
p.setPen(self.textPen())
31+
for rect, flags, text in textSpecs:
32+
p.drawText(rect, int(flags), text)
33+
34+
profiler('draw text')
35+
36+
37+
def replace_axis(plot_item, orientation='left', pos=(2, 0)):
38+
39+
new_axis = AdaptedAxisItem(orientation, parent=plot_item)
40+
oldAxis = plot_item.axes[orientation]['item']
41+
plot_item.layout.removeItem(oldAxis)
42+
oldAxis.unlinkFromView()
43+
#
44+
new_axis.linkToView(plot_item.vb)
45+
plot_item.axes[orientation] = {'item': new_axis, 'pos': pos}
46+
plot_item.layout.addItem(new_axis, *pos)
47+
new_axis.setZValue(-1000)
48+
new_axis.setFlag(new_axis.ItemNegativeZStacksBehindParent)

atlaselectrophysiology/ephys_atlas_gui.py

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from atlaselectrophysiology.create_overview_plots import make_overview_plot
1313
from pathlib import Path
1414
import os
15-
15+
import time
1616

1717
class MainWindow(QtWidgets.QMainWindow, ephys_gui.Setup):
1818
def __init__(self, offline=False, probe_id=None, one=None):
@@ -537,6 +537,7 @@ def plot_histology(self, fig, ax='left', movable=True):
537537
axis = fig.getAxis(ax)
538538
axis.setTicks([self.hist_data['axis_label'][self.idx]])
539539
axis.setZValue(10)
540+
self.set_axis(self.fig_hist, 'bottom', pen='w', label='blank')
540541

541542
# Plot each histology region
542543
for ir, reg in enumerate(self.hist_data['region'][self.idx]):
@@ -597,7 +598,7 @@ def plot_histology_ref(self, fig, ax='right', movable=False):
597598
axis = fig.getAxis(ax)
598599
axis.setTicks([self.hist_data_ref['axis_label']])
599600
axis.setZValue(10)
600-
self.set_axis(self.fig_hist_ref, 'bottom', pen='w')
601+
self.set_axis(self.fig_hist_ref, 'bottom', pen='w', label='blank')
601602

602603
# Plot each histology region
603604
for ir, reg in enumerate(self.hist_data_ref['region']):
@@ -753,6 +754,7 @@ def plot_scale_factor(self):
753754

754755
self.fig_scale.setYRange(min=self.probe_tip - self.probe_extra,
755756
max=self.probe_top + self.probe_extra, padding=self.pad)
757+
self.set_axis(self.fig_scale, 'bottom', pen='w', label='blank')
756758
self.fig_scale_cb.addItem(cbar)
757759

758760
def plot_fit(self):
@@ -778,19 +780,19 @@ def plot_slice(self, data, img_type):
778780
self.slice_lines = []
779781
img = pg.ImageItem()
780782
img.setImage(data[img_type])
783+
transform = [data['scale'][0], 0., 0., 0., data['scale'][1], 0., data['offset'][0],
784+
data['offset'][1], 1.]
785+
img.setTransform(QtGui.QTransform(*transform))
781786

782787
if img_type == 'label':
783-
img.translate(data['offset'][0], data['offset'][1])
784-
img.scale(data['scale'][0], data['scale'][1])
785788
self.fig_slice_layout.removeItem(self.slice_item)
786789
self.fig_slice_layout.addItem(self.fig_slice_hist_alt, 0, 1)
787790
self.slice_item = self.fig_slice_hist_alt
788791
else:
789-
img.translate(data['offset'][0], data['offset'][1])
790-
img.scale(data['scale'][0], data['scale'][1])
791792
color_bar = cb.ColorBar('cividis')
792793
lut = color_bar.getColourMap()
793794
img.setLookupTable(lut)
795+
794796
self.fig_slice_layout.removeItem(self.slice_item)
795797
self.fig_slice_hist = pg.HistogramLUTItem()
796798
self.fig_slice_hist.axis.hide()
@@ -867,9 +869,11 @@ def plot_scatter(self, data):
867869
[self.fig_img_cb.removeItem(cbar) for cbar in self.img_cbars]
868870
self.img_plots = []
869871
self.img_cbars = []
870-
connect = np.zeros(data['x'].size, dtype=int)
872+
start = time.time()
871873
size = data['size'].tolist()
872874
symbol = data['symbol'].tolist()
875+
end = time.time()
876+
print(end-start)
873877

874878
color_bar = cb.ColorBar(data['cmap'])
875879
cbar = color_bar.makeColourBar(20, 5, self.fig_img_cb, min=np.min(data['levels'][0]),
@@ -878,13 +882,22 @@ def plot_scatter(self, data):
878882
self.img_cbars.append(cbar)
879883

880884
if type(np.any(data['colours'])) == QtGui.QColor:
885+
start = time.time()
881886
brush = data['colours'].tolist()
887+
plot = pg.ScatterPlotItem()
888+
plot.setData(x=data['x'], y=data['y'],
889+
symbol=symbol, size=size, brush=brush, pen=data['pen'])
890+
end = time.time()
891+
print(end-start)
882892
else:
883893
brush = color_bar.map.mapToQColor(data['colours'])
894+
plot = pg.ScatterPlotItem()
895+
start = time.time()
896+
plot.setData(x=data['x'], y=data['y'],
897+
symbol=symbol, size=size, brush=brush, pen=data['pen'])
898+
end = time.time()
899+
print(end - start)
884900

885-
plot = pg.PlotDataItem()
886-
plot.setData(x=data['x'], y=data['y'], connect=connect,
887-
symbol=symbol, symbolSize=size, symbolBrush=brush, symbolPen=data['pen'])
888901
self.fig_img.addItem(plot)
889902
self.fig_img.setXRange(min=data['xrange'][0], max=data['xrange'][1],
890903
padding=0)
@@ -898,7 +911,8 @@ def plot_scatter(self, data):
898911

899912
if data['cluster']:
900913
self.data = data['x']
901-
self.data_plot.sigPointsClicked.connect(self.cluster_clicked)
914+
#self.data_plot.sigPointsClicked.connect(self.cluster_clicked)
915+
self.data_plot.sigClicked.connect(self.cluster_clicked)
902916

903917
def plot_line(self, data):
904918
"""
@@ -957,8 +971,9 @@ def plot_probe(self, data, bounds=None):
957971
for img, scale, offset in zip(data['img'], data['scale'], data['offset']):
958972
image = pg.ImageItem()
959973
image.setImage(img)
960-
image.translate(offset[0], offset[1])
961-
image.scale(scale[0], scale[1])
974+
transform = [scale[0], 0., 0., 0., scale[1], 0., offset[0],
975+
offset[1], 1.]
976+
image.setTransform(QtGui.QTransform(*transform))
962977
image.setLookupTable(lut)
963978
image.setLevels((data['levels'][0], data['levels'][1]))
964979
self.fig_probe.addItem(image)
@@ -972,6 +987,8 @@ def plot_probe(self, data, bounds=None):
972987
self.fig_probe.setXRange(min=data['xrange'][0], max=data['xrange'][1], padding=0)
973988
self.fig_probe.setYRange(min=self.probe_tip - self.probe_extra,
974989
max=self.probe_top + self.probe_extra, padding=self.pad)
990+
# so stupid!!!!!
991+
self.set_axis(self.fig_probe, 'bottom', pen='w', label='blank')
975992
if bounds is not None:
976993
# add some infinite line stuff
977994
for bound in bounds:
@@ -1005,8 +1022,9 @@ def plot_image(self, data):
10051022

10061023
image = pg.ImageItem()
10071024
image.setImage(data['img'])
1008-
image.translate(data['offset'][0], data['offset'][1])
1009-
image.scale(data['scale'][0], data['scale'][1])
1025+
transform = [data['scale'][0], 0., 0., 0., data['scale'][1], 0., data['offset'][0],
1026+
data['offset'][1], 1.]
1027+
image.setTransform(QtGui.QTransform(*transform))
10101028
cmap = data.get('cmap', [])
10111029
if cmap:
10121030
color_bar = cb.ColorBar(data['cmap'])

atlaselectrophysiology/ephys_gui_setup.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pyqtgraph.exporters
44
import numpy as np
55
from random import randrange
6+
from atlaselectrophysiology.AdaptedAxisItem import replace_axis
67
pg.setConfigOption('background', 'w')
78
pg.setConfigOption('foreground', 'k')
89

@@ -643,7 +644,8 @@ def init_figures(self):
643644
self.fig_hist.setMouseEnabled(x=False)
644645
self.fig_hist.setYRange(min=self.probe_tip - self.probe_extra, max=self.probe_top +
645646
self.probe_extra, padding=self.pad)
646-
self.set_axis(self.fig_hist, 'bottom', pen='w', ticks=False)
647+
self.set_axis(self.fig_hist, 'bottom', pen='w')
648+
replace_axis(self.fig_hist)
647649
self.ax_hist = self.set_axis(self.fig_hist, 'left', pen=None)
648650
self.ax_hist.setWidth(0)
649651
self.ax_hist.setStyle(tickTextOffset=-70)
@@ -652,7 +654,7 @@ def init_figures(self):
652654
self.fig_scale.setMaximumWidth(50)
653655
self.fig_scale.setMouseEnabled(x=False)
654656
self.scale_label = pg.LabelItem(color='k')
655-
self.set_axis(self.fig_scale, 'bottom', pen='w', ticks=False)
657+
self.set_axis(self.fig_scale, 'bottom', pen='w')
656658
self.set_axis(self.fig_scale, 'left', show=False)
657659
(self.fig_scale).setYLink(self.fig_hist)
658660

@@ -672,6 +674,7 @@ def init_figures(self):
672674
self.probe_extra, padding=self.pad)
673675
self.set_axis(self.fig_hist_ref, 'bottom', pen='w')
674676
self.set_axis(self.fig_hist_ref, 'left', show=False)
677+
replace_axis(self.fig_hist_ref, orientation='right', pos=(2, 2))
675678
self.ax_hist_ref = self.set_axis(self.fig_hist_ref, 'right', pen=None)
676679
self.ax_hist_ref.setWidth(0)
677680
self.ax_hist_ref.setStyle(tickTextOffset=-70)

data_exploration_gui/data_class.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ def compute_depth_and_amplitudes(self):
104104
self.amps = []
105105
self.nspikes = []
106106
for clu in self.ids:
107-
self.depths = np.append(self.depths, np.mean(units_b.depths[str(clu)]))
108-
self.amps = np.append(self.amps, np.mean(units_b.amps[str(clu)]) * 1e6)
107+
self.depths = np.append(self.depths, np.nanmean(units_b.depths[str(clu)]))
108+
self.amps = np.append(self.amps, np.nanmean(units_b.amps[str(clu)]) * 1e6)
109109
self.nspikes = np.append(self.nspikes, len(units_b.amps[str(clu)]))
110110

111111
np.save((self.gui_path + '/cluster_depths'), self.depths)

0 commit comments

Comments
 (0)