File qt_plot.py changed (mode: 100644) (index 2509847..ea911a0) |
... |
... |
class QtGuiPlot2D(QtGui.QMainWindow): |
170 |
170 |
|
|
171 |
171 |
|
|
172 |
172 |
#č graphy už nemusí jít po stm widgetech |
#č graphy už nemusí jít po stm widgetech |
173 |
|
dock = QtGui.QDockWidget("TRI_current estimation graph", self) |
|
174 |
|
dock.setWidget(TriEstimationGraph(self, tri_estimation_name='TRI_current_estimations')) |
|
175 |
|
self.dockables.append(dock) |
|
176 |
|
self.tabifyDockWidget(self.dockables[0], dock) |
|
177 |
|
|
|
178 |
173 |
dock = QtGui.QDockWidget("TRI_overall estimation graph", self) |
dock = QtGui.QDockWidget("TRI_overall estimation graph", self) |
179 |
174 |
dock.setWidget(TriEstimationGraph(self, tri_estimation_name='TRI_overall_estimations')) |
dock.setWidget(TriEstimationGraph(self, tri_estimation_name='TRI_overall_estimations')) |
180 |
175 |
self.dockables.append(dock) |
self.dockables.append(dock) |
|
... |
... |
class BasePlotting: |
371 |
366 |
plot_widget = self.w.central_widget |
plot_widget = self.w.central_widget |
372 |
367 |
#size=self.w.px_size*1.5 |
#size=self.w.px_size*1.5 |
373 |
368 |
pos = () #np.empty((nsim, 4)) |
pos = () #np.empty((nsim, 4)) |
374 |
|
self.failures = plot_widget.plot(pos, pen=None, symbol='x', symbolPen='r', name='Failures') # symbolBrush=0.2, |
|
|
369 |
|
size = self.w.px_size * 2 |
|
370 |
|
self.failures = plot_widget.plot(pos, pen=None, symbol='x', symbolPen='r',\ |
|
371 |
|
symbolSize=size*1.5, name='Failures') # symbolBrush=0.2, |
375 |
372 |
self.failures.setZValue(100) |
self.failures.setZValue(100) |
376 |
373 |
|
|
377 |
|
self.successes = plot_widget.plot(pos, pen=None, symbol='+', symbolPen='g', name='Successes') |
|
|
374 |
|
self.proxy_failures = plot_widget.plot(pos, pen=None, symbol='p', symbolPen=0.5,\ |
|
375 |
|
symbolSize=size, symbolBrush=(217,83,25), name='Proxy failures') |
|
376 |
|
self.proxy_failures.setZValue(95) |
|
377 |
|
|
|
378 |
|
self.successes = plot_widget.plot(pos, pen=None, symbol='+', \ |
|
379 |
|
symbolSize=size*1.5, symbolPen='g', name='Successes') |
378 |
380 |
self.successes.setZValue(90) |
self.successes.setZValue(90) |
379 |
381 |
|
|
|
382 |
|
self.proxy_successes = plot_widget.plot(pos, pen=None, symbol='p', symbolPen=0.5, \ |
|
383 |
|
symbolSize=size, symbolBrush=(119,172,48), name='Proxy successes') |
|
384 |
|
self.proxy_successes.setZValue(85) |
|
385 |
|
|
380 |
386 |
self.plot() |
self.plot() |
381 |
387 |
|
|
382 |
388 |
def plot(self): |
def plot(self): |
|
... |
... |
class BasePlotting: |
384 |
390 |
|
|
385 |
391 |
sample_box = self.w.sample_box[:nsim] |
sample_box = self.w.sample_box[:nsim] |
386 |
392 |
|
|
387 |
|
pos = getattr(sample_box, self.w.space) |
|
|
393 |
|
pos = getattr(sample_box, self.w.space)[:,:2] |
388 |
394 |
failsi = sample_box.failsi |
failsi = sample_box.failsi |
389 |
395 |
|
|
|
396 |
|
try: # proxy denotes to implicitly-known values |
|
397 |
|
proxy = sample_box.proxy |
|
398 |
|
except AttributeError: |
|
399 |
|
proxy = np.full(nsim, False, dtype=np.bool) |
|
400 |
|
|
|
401 |
|
mask = np.all((failsi, ~proxy), axis=0) |
|
402 |
|
self.draw(self.failures, pos[mask]) |
|
403 |
|
|
|
404 |
|
mask = np.all((~failsi, ~proxy), axis=0) |
|
405 |
|
self.draw(self.successes, pos[mask]) |
|
406 |
|
|
|
407 |
|
mask = np.all((failsi, proxy), axis=0) |
|
408 |
|
self.draw(self.proxy_failures, pos[mask]) |
|
409 |
|
|
|
410 |
|
mask = np.all((~failsi, proxy), axis=0) |
|
411 |
|
self.draw(self.proxy_successes, pos[mask]) |
|
412 |
|
|
|
413 |
|
|
|
414 |
|
@staticmethod |
|
415 |
|
def draw(plot_item, data): |
390 |
416 |
#č musím to udělat takhle |
#č musím to udělat takhle |
391 |
417 |
#č jinač to zlobí při posunutích slajderu |
#č jinač to zlobí při posunutích slajderu |
392 |
|
failures = pos[failsi] |
|
393 |
|
if len(failures): |
|
394 |
|
self.failures.setData(failures) |
|
395 |
|
self.failures.show() |
|
396 |
|
else: |
|
397 |
|
self.failures.hide() |
|
398 |
|
|
|
399 |
|
successes = pos[~failsi] |
|
400 |
|
if len(successes): |
|
401 |
|
self.successes.setData(successes) |
|
402 |
|
self.successes.show() |
|
|
418 |
|
if len(data): |
|
419 |
|
plot_item.setData(data) |
|
420 |
|
plot_item.show() |
403 |
421 |
else: |
else: |
404 |
|
self.successes.hide() |
|
|
422 |
|
plot_item.hide() |
405 |
423 |
|
|
406 |
424 |
|
|
407 |
425 |
class UnitCube: |
class UnitCube: |
|
... |
... |
class LastShot: |
482 |
500 |
|
|
483 |
501 |
def plot(self): |
def plot(self): |
484 |
502 |
if self.item.checkState() and (self.w.last_shot is not None): |
if self.item.checkState() and (self.w.last_shot is not None): |
485 |
|
pos = getattr(self.w.last_shot, self.w.space) |
|
|
503 |
|
pos = getattr(self.w.last_shot, self.w.space)[:,:2] |
486 |
504 |
self.last.setData(pos) |
self.last.setData(pos) |
487 |
505 |
self.shot.setData(pos) |
self.shot.setData(pos) |
488 |
506 |
self.last.show() |
self.last.show() |
|
... |
... |
class LastShot: |
498 |
516 |
class Circles: |
class Circles: |
499 |
517 |
def __init__(self, w): |
def __init__(self, w): |
500 |
518 |
self.w = w |
self.w = w |
501 |
|
self.w.space_changed.connect(self.plot) |
|
502 |
|
self.w.redraw_called.connect(self.redraw) |
|
503 |
|
|
|
504 |
|
self.item = QtGui.QListWidgetItem('Circles') |
|
505 |
|
self.item.setFlags(self.item.flags() | QtCore.Qt.ItemIsUserCheckable) |
|
506 |
|
self.item.setCheckState(QtCore.Qt.Checked) |
|
507 |
|
self.w.list_view.addItem(self.item) |
|
508 |
|
self.w.list_view.itemChanged.connect(self.show_slot) |
|
|
519 |
|
if self.w.sample_box.nvar == 2: |
|
520 |
|
self.w.space_changed.connect(self.plot) |
|
521 |
|
self.w.redraw_called.connect(self.redraw) |
|
522 |
|
|
|
523 |
|
self.item = QtGui.QListWidgetItem('Circles') |
|
524 |
|
self.item.setFlags(self.item.flags() | QtCore.Qt.ItemIsUserCheckable) |
|
525 |
|
self.item.setCheckState(QtCore.Qt.Checked) |
|
526 |
|
self.w.list_view.addItem(self.item) |
|
527 |
|
self.w.list_view.itemChanged.connect(self.show_slot) |
509 |
528 |
|
|
510 |
529 |
|
|
511 |
530 |
def redraw(self): |
def redraw(self): |
|
... |
... |
class Triangulation: |
603 |
622 |
def __init__(self, w): |
def __init__(self, w): |
604 |
623 |
|
|
605 |
624 |
self.w = w |
self.w = w |
606 |
|
self.w.box_runned.connect(self.update) |
|
607 |
|
self.w.space_changed.connect(self.replot) |
|
608 |
|
self.w.redraw_called.connect(self.redraw) |
|
609 |
|
|
|
610 |
|
self.item = QtGui.QListWidgetItem('Triangulation') |
|
611 |
|
self.item.setFlags(self.item.flags() | QtCore.Qt.ItemIsUserCheckable) |
|
612 |
|
self.item.setCheckState(QtCore.Qt.Unchecked) |
|
613 |
|
self.w.list_view.addItem(self.item) |
|
614 |
|
|
|
615 |
|
|
|
616 |
|
self.w.list_view.itemChanged.connect(self.show_slot) |
|
|
625 |
|
if self.w.sample_box.nvar == 2: |
|
626 |
|
self.w.box_runned.connect(self.update) |
|
627 |
|
self.w.space_changed.connect(self.replot) |
|
628 |
|
self.w.redraw_called.connect(self.redraw) |
|
629 |
|
|
|
630 |
|
self.item = QtGui.QListWidgetItem('Triangulation') |
|
631 |
|
self.item.setFlags(self.item.flags() | QtCore.Qt.ItemIsUserCheckable) |
|
632 |
|
self.item.setCheckState(QtCore.Qt.Unchecked) |
|
633 |
|
self.w.list_view.addItem(self.item) |
|
634 |
|
|
|
635 |
|
|
|
636 |
|
self.w.list_view.itemChanged.connect(self.show_slot) |
617 |
637 |
|
|
618 |
638 |
|
|
619 |
639 |
|
|
|
... |
... |
class FastSimplexEstimationWidget(QtGui.QSplitter): |
1243 |
1263 |
|
|
1244 |
1264 |
#č teď tečičky |
#č teď tečičky |
1245 |
1265 |
for nodes, plot_item, cell_stats in self.simplices: |
for nodes, plot_item, cell_stats in self.simplices: |
1246 |
|
pos = getattr(nodes, self.sb_item.space) |
|
|
1266 |
|
pos = getattr(nodes, self.sb_item.space)[:,:2] |
1247 |
1267 |
plot_item.setData(pos) |
plot_item.setData(pos) |
1248 |
1268 |
#plot_item.show() |
#plot_item.show() |
1249 |
1269 |
# keep the GUI responsive :) |
# keep the GUI responsive :) |
|
... |
... |
class FastSimplexEstimationWidget(QtGui.QSplitter): |
1358 |
1378 |
# |
# |
1359 |
1379 |
# tečičky |
# tečičky |
1360 |
1380 |
# |
# |
1361 |
|
pos = getattr(nodes, self.sb_item.space) |
|
|
1381 |
|
pos = getattr(nodes, self.sb_item.space)[:,:2] |
1362 |
1382 |
event = cell_stats['event'] |
event = cell_stats['event'] |
1363 |
1383 |
cell_probability = cell_stats['cell_probability'] |
cell_probability = cell_stats['cell_probability'] |
1364 |
1384 |
if event in self.max_simplices: |
if event in self.max_simplices: |
|
... |
... |
class VoronoiEstimationWidget(QtGui.QSplitter): |
1531 |
1551 |
def on_space_changed(self, *args, **kwargs): |
def on_space_changed(self, *args, **kwargs): |
1532 |
1552 |
# teď tečičky |
# teď tečičky |
1533 |
1553 |
for nodes, plot_item, cell_stats in self.cells: |
for nodes, plot_item, cell_stats in self.cells: |
1534 |
|
pos = getattr(nodes, self.sb_item.space) |
|
|
1554 |
|
pos = getattr(nodes, self.sb_item.space)[:,:2] |
1535 |
1555 |
plot_item.setData(pos) |
plot_item.setData(pos) |
1536 |
1556 |
|
|
1537 |
1557 |
|
|
|
... |
... |
class VoronoiEstimationWidget(QtGui.QSplitter): |
1632 |
1652 |
|
|
1633 |
1653 |
|
|
1634 |
1654 |
def node_pf_scatter_plot(self, nodes, cell_stats): |
def node_pf_scatter_plot(self, nodes, cell_stats): |
1635 |
|
pos = getattr(nodes, self.sb_item.space) |
|
|
1655 |
|
pos = getattr(nodes, self.sb_item.space)[:,:2] |
1636 |
1656 |
symbol_size = self.param.getValues()['node (pixel) size'][0] |
symbol_size = self.param.getValues()['node (pixel) size'][0] |
1637 |
1657 |
plot_widget = self.sb_item.central_widget |
plot_widget = self.sb_item.central_widget |
1638 |
1658 |
# zas, нет ножек - нет мультиков |
# zas, нет ножек - нет мультиков |
|
... |
... |
class VoronoiEstimationWidget(QtGui.QSplitter): |
1687 |
1707 |
plot_widget.removeItem(plot_item) |
plot_widget.removeItem(plot_item) |
1688 |
1708 |
|
|
1689 |
1709 |
# draw |
# draw |
1690 |
|
pos = getattr(nodes, self.sb_item.space) |
|
|
1710 |
|
pos = getattr(nodes, self.sb_item.space)[:,:2] |
1691 |
1711 |
#x, y = (*getattr(nodes, self.sb_item.space).T,) |
#x, y = (*getattr(nodes, self.sb_item.space).T,) |
1692 |
1712 |
|
|
1693 |
1713 |
event = cell_stats['event'] |
event = cell_stats['event'] |
|
... |
... |
class VoronoiEstimationWidget(QtGui.QSplitter): |
1701 |
1721 |
else: |
else: |
1702 |
1722 |
# draw tečičky |
# draw tečičky |
1703 |
1723 |
# |
# |
1704 |
|
pos = getattr(nodes, self.sb_item.space) |
|
|
1724 |
|
pos = getattr(nodes, self.sb_item.space)[:,:2] |
1705 |
1725 |
|
|
1706 |
1726 |
event = cell_stats['event'] |
event = cell_stats['event'] |
1707 |
1727 |
color = self.get_color(event) |
color = self.get_color(event) |
|
... |
... |
class VoronoiEstimationWidget(QtGui.QSplitter): |
1742 |
1762 |
for cell in self.cells: |
for cell in self.cells: |
1743 |
1763 |
nodes, plot_item, cell_stats = cell |
nodes, plot_item, cell_stats = cell |
1744 |
1764 |
# draw |
# draw |
1745 |
|
pos = getattr(nodes, self.sb_item.space) |
|
|
1765 |
|
pos = getattr(nodes, self.sb_item.space)[:,:2] |
1746 |
1766 |
#x, y = (*getattr(nodes, self.sb_item.space).T,) |
#x, y = (*getattr(nodes, self.sb_item.space).T,) |
1747 |
1767 |
|
|
1748 |
1768 |
event = cell_stats['event'] |
event = cell_stats['event'] |
|
... |
... |
class VoronoiEstimationWidget(QtGui.QSplitter): |
1781 |
1801 |
|
|
1782 |
1802 |
# draw tečičky |
# draw tečičky |
1783 |
1803 |
# |
# |
1784 |
|
pos = getattr(nodes, self.sb_item.space) |
|
|
1804 |
|
pos = getattr(nodes, self.sb_item.space)[:,:2] |
1785 |
1805 |
#x, y = (*getattr(nodes, self.sb_item.space).T,) |
#x, y = (*getattr(nodes, self.sb_item.space).T,) |
1786 |
1806 |
|
|
1787 |
1807 |
#symbolSize = np.sqrt(nodes.w / min(nodes.w)) # not bad |
#symbolSize = np.sqrt(nodes.w / min(nodes.w)) # not bad |
|
... |
... |
class CandidatesWidget(pg.LayoutWidget): |
1927 |
1947 |
minvalue = mincb |
minvalue = mincb |
1928 |
1948 |
|
|
1929 |
1949 |
#č zvlášť nakreslím maximální hodnotu |
#č zvlášť nakreslím maximální hodnotu |
1930 |
|
pos = getattr(maxitem, self.sb_item.space) |
|
|
1950 |
|
pos = getattr(maxitem, self.sb_item.space)[:,:2] |
1931 |
1951 |
max_item = plot_widget.plot(pos, data=maxvalue, pen=None, symbol='t1',\ |
max_item = plot_widget.plot(pos, data=maxvalue, pen=None, symbol='t1',\ |
1932 |
1952 |
symbolBrush=color_map.mapToQColor(1)) |
symbolBrush=color_map.mapToQColor(1)) |
1933 |
1953 |
max_item.setZValue(130) |
max_item.setZValue(130) |
|
... |
... |
class CandidatesWidget(pg.LayoutWidget): |
1944 |
1964 |
values = array[mask] |
values = array[mask] |
1945 |
1965 |
norm_values = (values - minvalue) / (maxvalue - minvalue) |
norm_values = (values - minvalue) / (maxvalue - minvalue) |
1946 |
1966 |
|
|
1947 |
|
pos = getattr(cb, self.sb_item.space)[mask] |
|
|
1967 |
|
pos = getattr(cb, self.sb_item.space)[mask][:,:2] |
1948 |
1968 |
|
|
1949 |
1969 |
#č sehnal jsem toto ze zdrojaků pyqtgraph |
#č sehnal jsem toto ze zdrojaků pyqtgraph |
1950 |
1970 |
style = dict(pen=None, symbol='o', symbolSize=self.sb_item.px_size, symbolPen=pg.mkPen(None)) |
style = dict(pen=None, symbol='o', symbolSize=self.sb_item.px_size, symbolPen=pg.mkPen(None)) |
|
... |
... |
class BoxTreeWidget(pg.LayoutWidget): |
2007 |
2027 |
self.addWidget(self.btn, row=0, col=0) |
self.addWidget(self.btn, row=0, col=0) |
2008 |
2028 |
self.btn.clicked.connect(self.update) |
self.btn.clicked.connect(self.update) |
2009 |
2029 |
|
|
2010 |
|
self.tree = pg.DataTreeWidget(self, data=self.get_data(samplebox_item)) |
|
|
2030 |
|
#self.tree = pg.DataTreeWidget(self, data=self.get_data(samplebox_item)) |
|
2031 |
|
self.tree = pg.DataTreeWidget(self, data=dict()) |
2011 |
2032 |
self.addWidget(self.tree, row=1, col=0) |
self.addWidget(self.tree, row=1, col=0) |
2012 |
2033 |
|
|
2013 |
2034 |
def update(self, *args, **kwargs): |
def update(self, *args, **kwargs): |
2014 |
|
self.tree.setData(self.get_data(self.sb_item), hideRoot=True) |
|
|
2035 |
|
try: |
|
2036 |
|
self.tree.setData(self.get_data(self.sb_item), hideRoot=True) |
|
2037 |
|
except BaseException as e: |
|
2038 |
|
msg = "" |
|
2039 |
|
error_msg = self.__class__.__name__ + ": " + msg + repr(e) |
|
2040 |
|
print(error_msg) |
2015 |
2041 |
|
|
2016 |
2042 |
@staticmethod |
@staticmethod |
2017 |
2043 |
def get_data(self): #č nenechej si splest tím "self", je to prostě reference na QtGuiPlot2D |
def get_data(self): #č nenechej si splest tím "self", je to prostě reference na QtGuiPlot2D |