diff --git a/pydsf.py b/pydsf.py
index fd3d699..be9c115 100644
--- a/pydsf.py
+++ b/pydsf.py
@@ -1,14 +1,18 @@
#! /usr/bin/env python2
# -*- coding: utf-8 -*-
import csv
+import random
try:
import matplotlib as mpl
+ #import mpl_toolkits.axes_grid
+ import mpl_toolkits.axes_grid1
mpl.use('Qt5Agg')
+ mpl.interactive(True)
import matplotlib.ticker as ticker
- import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
+ import matplotlib.gridspec as gridspec
except ImportError:
raise ImportError('----- Matplotlib must be installed. -----')
@@ -436,9 +440,6 @@ def update_progress_bar(bar, value):
class PlotResults():
- def __init__(self, experiment):
- self.experiment = experiment
-
def plot_tm_heatmap_single(self, plate, widget):
"""
Plot Tm heatmap (Fig. 1)
@@ -550,35 +551,86 @@ class PlotResults():
"""
canvas = widget.canvas
canvas.clear()
- fig3 = canvas.fig # new figure
- fig3.suptitle('Raw Data (plate #{})'.format(str(plate.id))) # set title
- for plot_num in range(1, plate.wellnum + 1): # iterate over all wells
- well = plate.wells[plot_num - 1] # get single well based on current plot number
- ax = fig3.add_subplot(plate.rows, plate.cols, plot_num) # add new subplot
- ax.autoscale(tight=True) # scale to data
- ax.set_title(well.name, size='xx-small') # set title of current subplot to well identifier
+ im = np.arange(100)
+ im.shape = 10, 10
- if well in plate.denatured_wells:
- ax.patch.set_facecolor('#FFD6D6')
-
- if plot_num == plate.wellnum - plate.cols + 1: # add axis label to the subplot in the bottom left corner of the figure
- ax.set_xlabel(u'T [°C]', size='xx-small')
- ax.set_ylabel('I', size='xx-small')
+ fig = canvas.fig
+ fig.suptitle('Raw Data (plate #{})'.format(str(plate.id)))
+ grid = mpl_toolkits.axes_grid1.Grid(fig, 111, nrows_ncols=(plate.rows, plate.cols), axes_pad=(0.1, 0.25), add_all=True, share_x=True, share_y=True, share_all=True)
+ for i in range(plate.wellnum):
+ well = plate.wells[i]
x = plate.temprange # set values for the x axis to the given temperature range
y = well.raw # grab y values from the raw data of the well
+ ax = grid[i]
+ #ax = fig.add_subplot(plate.rows, plate.cols, i+1)
+ ax.set_title(well.name, size=6) # set title of current subplot to well identifier
+ if well in plate.denatured_wells:
+ ax.patch.set_facecolor('#FFD6D6')
ax.xaxis.set_major_locator(ticker.MaxNLocator(4)) # only show three tickmarks on both axes
ax.yaxis.set_major_locator(ticker.MaxNLocator(4))
ax.axvspan(plate.t1, plate.tm_cutoff_low, facecolor='0.8', alpha=0.5) # shade lower cutoff area
ax.axvspan(plate.tm_cutoff_high, plate.t2, facecolor='0.8', alpha=0.5) # shade higher cutoff area
for label in ax.get_xticklabels() + ax.get_yticklabels(): # set fontsize for all tick labels to xx-small
- label.set_fontsize('xx-small')
-
- cax = ax.plot(x, y) # plot data to the current subplot
+ label.set_fontsize(6)
+ ax.plot(x, y)
+ fig.tight_layout()
canvas.draw()
+ #ax = grid[i]
+ #ax.axhline(color='r')
+ #ax.autoscale(enable=True, axis='y', tight=True)
+ #ax.set_title(well.name, size='xx-small')
+ #ax.plot(x, 1000*np.random.random(76))
+ #ax.set_yscale('log')
+
+ #for plot_num in range(1, plate.wellnum + 1):
+ # well = plate.wells[plot_num - 1]
+ # #ax = fig.add_subplot(plate.rows, plate.cols, plot_num)
+ # ax.autoscale(tight=True)
+ # ax.plot(plate.temprange, well.raw)
+ # ax.set_title(well.name, size='xx-small')
+ # if well in plate.denatured_wells:
+ # ax.patch.set_facecolor('#FFD6D6')
+
+
+
+ #for plot_num in range(1, plate.wellnum + 1):
+ # ax = fig.add_subplot(plate.rows, plate.cols, plot_num)
+ # ax.autoscale(tight=True)
+
+ # fig3 = canvas.fig # new figure
+ # fig3.suptitle('Raw Data (plate #{})'.format(str(plate.id))) # set title
+ #
+ # for plot_num in range(1, plate.wellnum + 1): # iterate over all wells
+ # well = plate.wells[plot_num - 1] # get single well based on current plot number
+ # ax = fig3.add_subplot(plate.rows, plate.cols, plot_num) # add new subplot
+ # ax = fig3.add_axes(plate.rows, plate.cols, plot_num)
+ # ax.autoscale(tight=True) # scale to data
+ # ax.set_title(well.name, size='xx-small') # set title of current subplot to well identifier
+ #
+ # if well in plate.denatured_wells:
+ # ax.patch.set_facecolor('#FFD6D6')
+ #
+ # if plot_num == plate.wellnum - plate.cols + 1: # add axis label to the subplot in the bottom left corner of the figure
+ # ax.set_xlabel(u'T [°C]', size='xx-small')
+ # ax.set_ylabel('I', size='xx-small')
+ #
+ # x = plate.temprange # set values for the x axis to the given temperature range
+ # y = well.raw # grab y values from the raw data of the well
+ #
+ # ax.xaxis.set_major_locator(ticker.MaxNLocator(4)) # only show three tickmarks on both axes
+ # ax.yaxis.set_major_locator(ticker.MaxNLocator(4))
+ # ax.axvspan(plate.t1, plate.tm_cutoff_low, facecolor='0.8', alpha=0.5) # shade lower cutoff area
+ # ax.axvspan(plate.tm_cutoff_high, plate.t2, facecolor='0.8', alpha=0.5) # shade higher cutoff area
+ # for label in ax.get_xticklabels() + ax.get_yticklabels(): # set fontsize for all tick labels to xx-small
+ # label.set_fontsize('xx-small')
+ #
+ # cax = ax.plot(x, y) # plot data to the current subplot
+
+
# def _plot_wrapper(self, plot, plate):
#
diff --git a/ui/Ui_mainwindow.py b/ui/Ui_mainwindow.py
index 9e06a95..679dd05 100644
--- a/ui/Ui_mainwindow.py
+++ b/ui/Ui_mainwindow.py
@@ -202,19 +202,19 @@ class Ui_MainWindow(object):
self.tabWidget.setSizePolicy(sizePolicy)
self.tabWidget.setMinimumSize(QtCore.QSize(300, 300))
self.tabWidget.setObjectName("tabWidget")
- self.tab_raw = MplWidget()
- self.tab_raw.setObjectName("tab_raw")
- self.tabWidget.addTab(self.tab_raw, "")
- self.tab_derivative = MplWidget()
- self.tab_derivative.setObjectName("tab_derivative")
- self.tabWidget.addTab(self.tab_derivative, "")
- self.tab_heatmap = MplWidget()
- self.tab_heatmap.setObjectName("tab_heatmap")
- self.tabWidget.addTab(self.tab_heatmap, "")
- self.tab_heatmap_avg = MplWidget()
- self.tab_heatmap_avg.setEnabled(False)
- self.tab_heatmap_avg.setObjectName("tab_heatmap_avg")
- self.tabWidget.addTab(self.tab_heatmap_avg, "")
+ #self.tab_raw = MplWidget()
+ #self.tab_raw.setObjectName("tab_raw")
+ #self.tabWidget.addTab(self.tab_raw, "")
+ #self.tab_derivative = MplWidget()
+ #self.tab_derivative.setObjectName("tab_derivative")
+ #self.tabWidget.addTab(self.tab_derivative, "")
+ #self.tab_heatmap = MplWidget()
+ #self.tab_heatmap.setObjectName("tab_heatmap")
+ #self.tabWidget.addTab(self.tab_heatmap, "")
+ #self.tab_heatmap_avg = MplWidget()
+ #self.tab_heatmap_avg.setEnabled(False)
+ #self.tab_heatmap_avg.setObjectName("tab_heatmap_avg")
+ #self.tabWidget.addTab(self.tab_heatmap_avg, "")
self.horizontalLayout.addWidget(self.splitter)
MainWindow.setCentralWidget(self.centralWidget)
self.menuBar = QtWidgets.QMenuBar(MainWindow)
@@ -291,10 +291,10 @@ class Ui_MainWindow(object):
self.doubleSpinBox_cbar_start.setSuffix(_translate("MainWindow", " °C"))
self.label_cbar_end.setText(_translate("MainWindow", "En&d"))
self.doubleSpinBox_cbar_end.setSuffix(_translate("MainWindow", " °C"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_raw), _translate("MainWindow", "Raw Data"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_derivative), _translate("MainWindow", "&1st derivative"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_heatmap), _translate("MainWindow", "Heatmap"))
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_heatmap_avg), _translate("MainWindow", "Heatmap average"))
+ #self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_raw), _translate("MainWindow", "Raw Data"))
+ #self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_derivative), _translate("MainWindow", "&2nd derivative"))
+ #self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_heatmap), _translate("MainWindow", "Heatmap"))
+ #self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_heatmap_avg), _translate("MainWindow", "Heatmap average"))
self.menuFile.setTitle(_translate("MainWindow", "Fi&le"))
self.menuHelp.setTitle(_translate("MainWindow", "Hel&p"))
self.actionQuit.setText(_translate("MainWindow", "&Quit"))
diff --git a/ui/mainwindow.py b/ui/mainwindow.py
index 09865ee..4bda9a3 100644
--- a/ui/mainwindow.py
+++ b/ui/mainwindow.py
@@ -6,12 +6,20 @@ Module implementing MainWindow.
VERSION = "1.0"
-from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtCore import pyqtSlot, QObject, pyqtSignal
from PyQt5.QtWidgets import *
from .Ui_mainwindow import Ui_MainWindow
+from .mplwidget import MplWidget
from pydsf import *
+class ProcessData(QObject):
+ finished = pyqtSignal()
+
+ def process(self):
+ raise NotImplementedError
+
+
class MainWindow(QMainWindow, Ui_MainWindow):
"""
@@ -70,6 +78,27 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# self.groupBox_cbar.setEnabled(True)
# self.groupBox_signal_threshold.setEnabled(True)
+ def generate_plot_tab(self, name):
+ tab = MplWidget()
+ tab.setObjectName(name)
+ return tab
+
+ def generate_plate_tabs(self, plate):
+ plotter = PlotResults()
+
+ if id != 'average':
+ tab = self.generate_plot_tab("tab_heatmap_{}".format(id))
+ self.tabWidget.addTab(tab, "Heatmap #{}".format(plate.id))
+ plotter.plot_tm_heatmap_single(plate, tab)
+
+ tab = self.generate_plot_tab("tab_raw_{}".format(id))
+ self.tabWidget.addTab(tab, "Raw Data #{}".format(plate.id))
+ plotter.plot_raw(plate, tab)
+ else:
+ tab = self.generate_plot_tab("tab_heatmap_{}".format(id))
+ self.tabWidget.addTab(tab, "Heatmap ({})".format(plate.id))
+ plotter.plot_tm_heatmap_single(plate, tab)
+
@pyqtSlot()
def on_buttonBox_process_accepted(self):
"""
@@ -128,20 +157,36 @@ class MainWindow(QMainWindow, Ui_MainWindow):
exp.avg_plate.write_avg_tm_table('{}/plate_{}_05_tm_avg.csv'.format(folder, str(exp.avg_plate.id)))
#plot(plate, self)
- plotter = PlotResults(exp)
- for i in range(self.tabWidget.count()):
- for plate in exp.plates:
- if i == 0:
- plotter.plot_raw(plate, self.tabWidget.widget(i))
- elif i == 1:
- plotter.plot_derivative(plate, self.tabWidget.widget(i))
- elif i == 2:
- plotter.plot_tm_heatmap_single(plate, self.tabWidget.widget(i))
- elif exp.avg_plate and i == 3:
- plotter.plot_tm_heatmap_single(exp.avg_plate, self.tabWidget.widget(i))
- self.tabWidget.setTabEnabled(i, True)
- else:
- self.tabWidget.setTabEnabled(i, False)
+ for i in range(len(exp.plates)):
+
+ plate = exp.plates[i]
+ self.generate_plate_tabs(plate)
+
+ if exp.avg_plate:
+
+ plate = exp.avg_plate
+ self.generate_plate_tabs(plate)
+
+
+
+
+
+
+
+ #for i in range(self.tabWidget.count()):
+ # for plate in exp.plates:
+ # if i == 0:
+ # plotter.plot_raw(plate, self.tabWidget.widget(i))
+ # self.tabWidget.setTabText(i, "Raw Data #{}".format(plate.id))
+ #elif i == 1:
+ # plotter.plot_derivative(plate, self.tabWidget.widget(i))
+ #elif i == 2:
+ # plotter.plot_tm_heatmap_single(plate, self.tabWidget.widget(i))
+ #elif exp.avg_plate and i == 3:
+ # plotter.plot_tm_heatmap_single(exp.avg_plate, self.tabWidget.widget(i))
+ # self.tabWidget.setTabEnabled(i, True)
+ #else:
+ # self.tabWidget.setTabEnabled(i, False)
#fig, ax = figures[0]
#self.tabWidget.widget(0).canvas.fig = fig
@@ -190,3 +235,4 @@ class MainWindow(QMainWindow, Ui_MainWindow):
Slot documentation goes here.
"""
QApplication.aboutQt()
+
diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui
index 1883ecf..834b463 100644
--- a/ui/mainwindow.ui
+++ b/ui/mainwindow.ui
@@ -485,7 +485,7 @@
- &1st derivative
+ &2nd derivative
diff --git a/ui/mplwidget.py b/ui/mplwidget.py
index 5698ed5..d2a37ae 100644
--- a/ui/mplwidget.py
+++ b/ui/mplwidget.py
@@ -10,6 +10,7 @@ class MplCanvas(FigureCanvas):
FigureCanvas.__init__(self, self.fig)
FigureCanvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
+ self.setFocusPolicy(QtCore.Qt.StrongFocus)
def clear(self):
self.ax.clear()
@@ -18,7 +19,6 @@ class MplCanvas(FigureCanvas):
class MplWidget(QtWidgets.QWidget):
def __init__(self, parent = None):
QtWidgets.QWidget.__init__(self, parent)
-
self.canvas = MplCanvas()
self.ntb = NavigationToolbar(self.canvas, self)
self.vbl = QtWidgets.QVBoxLayout()