From 39374ab17aa68cc114b11996fc5ad2fa634a6f46 Mon Sep 17 00:00:00 2001
From: Markus Rosenstihl
Date: Tue, 15 Apr 2014 15:44:15 +0200
Subject: [PATCH] configuration dialog fpr YAFF (tau distrib., time points)
---
ConductivityGroupBox.py | 2 +-
Container.py | 8 +-
ContainerWidgets.py | 96 +++-
Makefile | 1 +
PeakGroupBox.py | 2 +-
PowerLawGroupBox.py | 2 +-
QDS.py | 36 +-
QDSMain.py | 11 +-
QDSMain.ui | 19 +
StaticGroupBox.py | 2 +-
YAFFConfig.py | 107 +++++
YAFFConfig.ui | 168 +++++++
YAFFparameters.py | 8 +-
YAFFparameters.ui | 11 +-
data.py | 3 +-
icons/images.qrc | 1 +
icons/qds_icons.graffle | Bin 51359 -> 51584 bytes
images_rc.py | 1012 ++++++++++++++++++++++++++++++++++++++-
libyaff.py | 69 ++-
19 files changed, 1503 insertions(+), 55 deletions(-)
create mode 100644 YAFFConfig.py
create mode 100644 YAFFConfig.ui
diff --git a/ConductivityGroupBox.py b/ConductivityGroupBox.py
index 9e6742f..0839720 100644
--- a/ConductivityGroupBox.py
+++ b/ConductivityGroupBox.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'ConductivityGroupBox.ui'
#
-# Created: Mon Apr 14 14:36:45 2014
+# Created: Tue Apr 15 15:17:02 2014
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
diff --git a/Container.py b/Container.py
index 429f887..85a3406 100644
--- a/Container.py
+++ b/Container.py
@@ -6,7 +6,7 @@ import numpy as np
import pyqtgraph as pg
import ContainerWidgets
import libyaff
-from mathlib import Functions, id_to_color
+from Mathlib import Functions, id_to_color
__author__ = 'markusro'
@@ -213,6 +213,7 @@ class YAFF(BaseObject):
super(YAFF, self).__init__(plt_real=plt_real, plt_imag=plt_imag, limits=limits)
self.widget = ContainerWidgets.YaffWidget()
self.widget.on_model_changed.connect(self.change_model)
+ self.widget.configuration_changed.connect(self.change_configuration)
self.color = QColor(32, 120, 29, int(255*0.82))
self._libyaff = libyaff.Yaff(self.widget.getYaffType())
self.id_label = self._libyaff.label
@@ -228,6 +229,11 @@ class YAFF(BaseObject):
def param_number(self, num=None):
self._param_number = self._libyaff.params
+ def change_configuration(self, t_list, tau_list):
+ self._libyaff.dist_tau = tau_list
+ self._libyaff.time_points = t_list
+ self.updateData()
+
def change_model(self):
self._libyaff = libyaff.Yaff(self.widget.getYaffType())
self._selector_mask = self.widget.selector_mask
diff --git a/ContainerWidgets.py b/ContainerWidgets.py
index f6b51a0..4366f94 100644
--- a/ContainerWidgets.py
+++ b/ContainerWidgets.py
@@ -7,7 +7,7 @@ import ConductivityGroupBox
import PeakGroupBox
import PowerLawGroupBox
import StaticGroupBox
-import YAFFparameters
+import YAFFparameters, YAFFConfig
from PyQt4.QtGui import *
@@ -115,6 +115,12 @@ class BaseWidget(QGroupBox):
self.errors[i].setStyleSheet(sd_style)
self.errors[i].setText(sd)
+ def replaceDoubleSpinBox(self, layout, widget):
+ ndx = layout.indexOf(widget)
+ row, column, cols, rows = layout.getItemPosition(ndx)
+ widget.setParent(None)
+ widget = LogFSpinBox(self)
+ layout.addWidget(widget, row,column)
@@ -329,10 +335,10 @@ class ConductivityWidget(BaseWidget, QGroupBox):
-class PowerLawWidget(BaseWidget, QGroupBox):
+class PowerLawWidget(BaseWidget):
def __init__(self, parent=None):
- QGroupBox.__init__(self)
+ #QGroupBox.__init__(self)
BaseWidget.__init__(self)
super(PowerLawWidget, self).__init__(parent)
@@ -359,6 +365,7 @@ class PowerLawWidget(BaseWidget, QGroupBox):
class YaffWidget(BaseWidget):
on_model_changed = pyqtSignal()
+ configuration_changed = pyqtSignal(list,list)
def __init__(self, parent=None):
#QGroupBox.__init__(self)
@@ -381,6 +388,7 @@ class YaffWidget(BaseWidget):
self.ui.gridLayout.addWidget(self.ui.doubleSpinBox_9, 12, 1)
self.ui.removeButton.clicked.connect(self.remove)
+ self.ui.configButton.clicked.connect(self.configure)
self.ui.comboBox.currentIndexChanged.connect(self.change_model)
self._names = [
@@ -446,6 +454,17 @@ class YaffWidget(BaseWidget):
for dsb in self.inputs:
dsb.valueChanged.connect(self.changeValues)
self.change_model(0)
+ self._t_list, self._tau_list = None, None
+
+ def configure(self):
+ qd = YaffConfigWidget(t_list = self._t_list, tau_list = self._tau_list)
+ qd.configuration_changed.connect(self._store_config)
+ qd.exec_()
+ #qd.show()
+ def _store_config(self,t_list,tau_list):
+ self._t_list = t_list
+ self._tau_list = tau_list
+ self.configuration_changed.emit(t_list,tau_list)
def getYaffType(self):
return self.ui.comboBox.currentIndex()
@@ -477,3 +496,74 @@ class YaffWidget(BaseWidget):
if mask[ndx][i]==0: self.names.append(self._names[i])
self.selector_mask = [not i for i in mask[ndx] ]
self.on_model_changed.emit()
+
+class YaffConfigWidget(QDialog):
+ configuration_changed = pyqtSignal(list,list)
+
+ def __init__(self, parent=None, t_list=None, tau_list=None):
+ super(YaffConfigWidget,self).__init__(parent)
+
+ self.ui = YAFFConfig.Ui_Dialog()
+ self.ui.setupUi(self)
+
+ # not working; cannot set values
+ #self.replaceDoubleSpinBox(self.ui.gridLayout_time, self.ui.doubleSpinBox_tmin)
+ #self.replaceDoubleSpinBox(self.ui.gridLayout_time, self.ui.doubleSpinBox_tmax)
+ #self.replaceDoubleSpinBox(self.ui.gridLayout_tau, self.ui.doubleSpinBox_taumin)
+ #self.replaceDoubleSpinBox(self.ui.gridLayout_tau, self.ui.doubleSpinBox_taumax)
+
+ ndx = self.ui.gridLayout_time.indexOf(self.ui.doubleSpinBox_tmin)
+ row, column, cols, rows = self.ui.gridLayout_time.getItemPosition(ndx)
+ self.ui.doubleSpinBox_tmin.setParent(None)
+ self.ui.doubleSpinBox_tmin = LogFSpinBox(self)
+ self.ui.gridLayout_time.addWidget(self.ui.doubleSpinBox_tmin, row,column)
+
+ ndx = self.ui.gridLayout_time.indexOf(self.ui.doubleSpinBox_tmax)
+ row, column, cols, rows = self.ui.gridLayout_time.getItemPosition(ndx)
+ self.ui.doubleSpinBox_tmax.setParent(None)
+ self.ui.doubleSpinBox_tmax = LogFSpinBox(self)
+ self.ui.gridLayout_time.addWidget(self.ui.doubleSpinBox_tmax, row,column)
+
+ ndx = self.ui.gridLayout_tau.indexOf(self.ui.doubleSpinBox_taumin)
+ row, column, cols, rows = self.ui.gridLayout_tau.getItemPosition(ndx)
+ self.ui.doubleSpinBox_taumin.setParent(None)
+ self.ui.doubleSpinBox_taumin = LogFSpinBox(self)
+ self.ui.gridLayout_tau.addWidget(self.ui.doubleSpinBox_taumin, row,column)
+
+ ndx = self.ui.gridLayout_tau.indexOf(self.ui.doubleSpinBox_taumax)
+ row, column, cols, rows = self.ui.gridLayout_tau.getItemPosition(ndx)
+ self.ui.doubleSpinBox_taumax.setParent(None)
+ self.ui.doubleSpinBox_taumax = LogFSpinBox(self)
+ self.ui.gridLayout_tau.addWidget(self.ui.doubleSpinBox_taumax, row,column)
+
+ if t_list is not None:
+ self.ui.doubleSpinBox_tmin.setValue(t_list[0])
+ self.ui.doubleSpinBox_tmax.setValue(t_list[1])
+ else:
+ self.ui.doubleSpinBox_tmin.setValue(1e-10)
+ self.ui.doubleSpinBox_tmax.setValue(1e5)
+
+ if tau_list is not None:
+ self.ui.doubleSpinBox_taumin.setValue(tau_list[0])
+ self.ui.doubleSpinBox_taumax.setValue(tau_list[1])
+ else:
+ self.ui.doubleSpinBox_taumin.setValue(1e-10)
+ self.ui.doubleSpinBox_taumax.setValue(1e5)
+
+ values = [self.ui.doubleSpinBox_tmin,
+ self.ui.doubleSpinBox_tmax,
+ self.ui.spinBox_tn,
+ self.ui.doubleSpinBox_taumin,
+ self.ui.doubleSpinBox_taumax,
+ self.ui.spinBox_taun]
+ for val in values: val.valueChanged.connect(self.changedConfiguration)
+
+ def changedConfiguration(self):
+ t_list = [self.ui.doubleSpinBox_tmin.value(),
+ self.ui.doubleSpinBox_tmax.value(),
+ self.ui.spinBox_tn.value()]
+ tau_list = [self.ui.doubleSpinBox_taumin.value(),
+ self.ui.doubleSpinBox_taumax.value(),
+ self.ui.spinBox_taun.value()]
+ self.configuration_changed.emit(t_list,tau_list)
+
diff --git a/Makefile b/Makefile
index 37f5796..875acef 100644
--- a/Makefile
+++ b/Makefile
@@ -6,5 +6,6 @@ all:
pyuic4 PowerLawGroupBox.ui -o PowerLawGroupBox.py
pyuic4 StaticGroupBox.ui -o StaticGroupBox.py
pyuic4 YAFFparameters.ui -o YAFFparameters.py
+ pyuic4 YAFFConfig.ui -o YAFFConfig.py
stats:
wc -l QDS.py ContainerWidgets.py Container.py libyaff.py mathlib.py data.py
diff --git a/PeakGroupBox.py b/PeakGroupBox.py
index 839bf24..d0a92eb 100644
--- a/PeakGroupBox.py
+++ b/PeakGroupBox.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'PeakGroupBox.ui'
#
-# Created: Mon Apr 14 14:36:45 2014
+# Created: Tue Apr 15 15:17:02 2014
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
diff --git a/PowerLawGroupBox.py b/PowerLawGroupBox.py
index 2d26783..8d6f6c1 100644
--- a/PowerLawGroupBox.py
+++ b/PowerLawGroupBox.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'PowerLawGroupBox.ui'
#
-# Created: Mon Apr 14 14:36:45 2014
+# Created: Tue Apr 15 15:17:02 2014
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
diff --git a/QDS.py b/QDS.py
index 679603d..f4e49d4 100755
--- a/QDS.py
+++ b/QDS.py
@@ -1,33 +1,28 @@
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
-import os
-import sys
-import re
-import signal
+_author_ = "Markus Rosenstihl"
+
+import os,sys,re,signal
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
import matplotlib
-from Container import Conductivity, PowerComplex, Static, Peak, YAFF
-
-from mathlib import FunctionRegister, FitRoutine
-
matplotlib.use('agg')
-
-
from matplotlib import pyplot
from matplotlib.colors import hex2color
#matplotlib.rc_file("default.mplrc")
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
import numpy as np
-
-import QDSMain
-
-from data import Data
import pyqtgraph as pg
+from Container import Conductivity, PowerComplex, Static, Peak, YAFF
from ContainerWidgets import ParameterWidget
+from Mathlib import FunctionRegister, FitRoutine
+from Data import Data
+import QDSMain
class AppWindow(QMainWindow):
@@ -141,6 +136,8 @@ class AppWindow(QMainWindow):
fit_annealAction = QAction("&Simulated Annealing", self)
fitMenu.addAction(fit_annealAction)
+ self.ui.actionActionAbortFit.triggered.connect(self.abortFit)
+
self.signalMapper = QSignalMapper(self)
for i, fit_action in enumerate([fit_lmAction, fit_lbfgsbAction, fit_annealAction
]):
@@ -208,6 +205,9 @@ class AppWindow(QMainWindow):
msgBox.exec_()
+ def abortFit(self):
+ self._fit_thread.quit()
+
def saveFitResult(self):
"""
Saving fit parameters to fitresults.log
@@ -505,7 +505,8 @@ class AppWindow(QMainWindow):
self.fit_boundary_imag.setRegion(self.fit_boundary_real.getRegion())
def sigint_handler(*args):
- """Handler for the SIGINT signal (CTRL + C).
+ """
+ Handler for the SIGINT signal (CTRL + C).
"""
sys.stderr.write('\r')
if QMessageBox.question(None, '', "Are you sure you want to quit?",
@@ -513,6 +514,7 @@ def sigint_handler(*args):
QMessageBox.Yes) == QMessageBox.Yes:
QApplication.quit()
+
if __name__ == '__main__':
signal.signal(signal.SIGINT, sigint_handler)
files = sys.argv[1:]
diff --git a/QDSMain.py b/QDSMain.py
index 8c4a36c..dec1a3b 100644
--- a/QDSMain.py
+++ b/QDSMain.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'QDSMain.ui'
#
-# Created: Mon Apr 14 14:36:45 2014
+# Created: Tue Apr 15 15:17:02 2014
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
@@ -70,6 +70,7 @@ class Ui_MainWindow(object):
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.toolBar = QtGui.QToolBar(MainWindow)
+ self.toolBar.setIconSize(QtCore.QSize(48, 48))
self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
self.toolBar.setObjectName(_fromUtf8("toolBar"))
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
@@ -113,6 +114,11 @@ class Ui_MainWindow(object):
icon4.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/add_yaff.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionYAFF.setIcon(icon4)
self.actionYAFF.setObjectName(_fromUtf8("actionYAFF"))
+ self.actionActionAbortFit = QtGui.QAction(MainWindow)
+ icon5 = QtGui.QIcon()
+ icon5.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/qds_fit_abort.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.actionActionAbortFit.setIcon(icon5)
+ self.actionActionAbortFit.setObjectName(_fromUtf8("actionActionAbortFit"))
self.toolBar.addAction(self.actionAdd_Peak)
self.toolBar.addAction(self.actionAdd_Cond)
self.toolBar.addAction(self.actionAdd_PowerLaw)
@@ -121,6 +127,7 @@ class Ui_MainWindow(object):
self.toolBar.addAction(self.actionYAFF)
self.toolBar.addSeparator()
self.toolBar.addAction(self.actionSave_FitResult)
+ self.toolBar.addAction(self.actionActionAbortFit)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
@@ -139,6 +146,8 @@ class Ui_MainWindow(object):
self.actionAdd_Eps_Infty.setToolTip(_translate("MainWindow", "Add eps_infty", None))
self.actionYAFF.setText(_translate("MainWindow", "YAFF", None))
self.actionYAFF.setToolTip(_translate("MainWindow", "Fit with YAFF", None))
+ self.actionActionAbortFit.setText(_translate("MainWindow", "Abort Fit", None))
+ self.actionActionAbortFit.setShortcut(_translate("MainWindow", "Ctrl+C", None))
from pyqtgraph import PlotWidget
import images_rc
diff --git a/QDSMain.ui b/QDSMain.ui
index 3da1287..dd25060 100644
--- a/QDSMain.ui
+++ b/QDSMain.ui
@@ -73,6 +73,12 @@
toolBar
+
+
+ 48
+ 48
+
+
Qt::ToolButtonTextUnderIcon
@@ -90,6 +96,7 @@
+
@@ -184,6 +191,18 @@
Fit with YAFF
+
+
+
+ :/icons/qds_fit_abort.png:/icons/qds_fit_abort.png
+
+
+ Abort Fit
+
+
+ Ctrl+C
+
+
diff --git a/StaticGroupBox.py b/StaticGroupBox.py
index c0e56ed..2e8605d 100644
--- a/StaticGroupBox.py
+++ b/StaticGroupBox.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'StaticGroupBox.ui'
#
-# Created: Mon Apr 14 14:36:45 2014
+# Created: Tue Apr 15 15:17:03 2014
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
diff --git a/YAFFConfig.py b/YAFFConfig.py
new file mode 100644
index 0000000..a2c190b
--- /dev/null
+++ b/YAFFConfig.py
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'YAFFConfig.ui'
+#
+# Created: Tue Apr 15 15:17:03 2014
+# by: PyQt4 UI code generator 4.10.4
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+try:
+ _fromUtf8 = QtCore.QString.fromUtf8
+except AttributeError:
+ def _fromUtf8(s):
+ return s
+
+try:
+ _encoding = QtGui.QApplication.UnicodeUTF8
+ def _translate(context, text, disambig):
+ return QtGui.QApplication.translate(context, text, disambig, _encoding)
+except AttributeError:
+ def _translate(context, text, disambig):
+ return QtGui.QApplication.translate(context, text, disambig)
+
+class Ui_Dialog(object):
+ def setupUi(self, Dialog):
+ Dialog.setObjectName(_fromUtf8("Dialog"))
+ Dialog.resize(250, 229)
+ self.gridLayout_3 = QtGui.QGridLayout(Dialog)
+ self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
+ self.groupBox_time = QtGui.QGroupBox(Dialog)
+ self.groupBox_time.setObjectName(_fromUtf8("groupBox_time"))
+ self.gridLayout_time = QtGui.QGridLayout(self.groupBox_time)
+ self.gridLayout_time.setObjectName(_fromUtf8("gridLayout_time"))
+ self.label = QtGui.QLabel(self.groupBox_time)
+ self.label.setObjectName(_fromUtf8("label"))
+ self.gridLayout_time.addWidget(self.label, 0, 0, 1, 1)
+ self.label_2 = QtGui.QLabel(self.groupBox_time)
+ self.label_2.setObjectName(_fromUtf8("label_2"))
+ self.gridLayout_time.addWidget(self.label_2, 0, 1, 1, 1)
+ self.label_3 = QtGui.QLabel(self.groupBox_time)
+ self.label_3.setObjectName(_fromUtf8("label_3"))
+ self.gridLayout_time.addWidget(self.label_3, 0, 2, 1, 1)
+ self.doubleSpinBox_tmin = QtGui.QDoubleSpinBox(self.groupBox_time)
+ self.doubleSpinBox_tmin.setObjectName(_fromUtf8("doubleSpinBox_tmin"))
+ self.gridLayout_time.addWidget(self.doubleSpinBox_tmin, 1, 0, 1, 1)
+ self.doubleSpinBox_tmax = QtGui.QDoubleSpinBox(self.groupBox_time)
+ self.doubleSpinBox_tmax.setObjectName(_fromUtf8("doubleSpinBox_tmax"))
+ self.gridLayout_time.addWidget(self.doubleSpinBox_tmax, 1, 1, 1, 1)
+ self.spinBox_tn = QtGui.QSpinBox(self.groupBox_time)
+ self.spinBox_tn.setMinimum(256)
+ self.spinBox_tn.setMaximum(8192)
+ self.spinBox_tn.setSingleStep(256)
+ self.spinBox_tn.setProperty("value", 512)
+ self.spinBox_tn.setObjectName(_fromUtf8("spinBox_tn"))
+ self.gridLayout_time.addWidget(self.spinBox_tn, 1, 2, 1, 1)
+ self.gridLayout_3.addWidget(self.groupBox_time, 0, 0, 1, 1)
+ self.groupBox_tau = QtGui.QGroupBox(Dialog)
+ self.groupBox_tau.setObjectName(_fromUtf8("groupBox_tau"))
+ self.gridLayout_tau = QtGui.QGridLayout(self.groupBox_tau)
+ self.gridLayout_tau.setObjectName(_fromUtf8("gridLayout_tau"))
+ self.label_7 = QtGui.QLabel(self.groupBox_tau)
+ self.label_7.setObjectName(_fromUtf8("label_7"))
+ self.gridLayout_tau.addWidget(self.label_7, 0, 0, 1, 1)
+ self.label_8 = QtGui.QLabel(self.groupBox_tau)
+ self.label_8.setObjectName(_fromUtf8("label_8"))
+ self.gridLayout_tau.addWidget(self.label_8, 0, 1, 1, 1)
+ self.label_9 = QtGui.QLabel(self.groupBox_tau)
+ self.label_9.setObjectName(_fromUtf8("label_9"))
+ self.gridLayout_tau.addWidget(self.label_9, 0, 2, 1, 1)
+ self.doubleSpinBox_taumin = QtGui.QDoubleSpinBox(self.groupBox_tau)
+ self.doubleSpinBox_taumin.setObjectName(_fromUtf8("doubleSpinBox_taumin"))
+ self.gridLayout_tau.addWidget(self.doubleSpinBox_taumin, 1, 0, 1, 1)
+ self.doubleSpinBox_taumax = QtGui.QDoubleSpinBox(self.groupBox_tau)
+ self.doubleSpinBox_taumax.setObjectName(_fromUtf8("doubleSpinBox_taumax"))
+ self.gridLayout_tau.addWidget(self.doubleSpinBox_taumax, 1, 1, 1, 1)
+ self.spinBox_taun = QtGui.QSpinBox(self.groupBox_tau)
+ self.spinBox_taun.setMinimum(256)
+ self.spinBox_taun.setMaximum(8192)
+ self.spinBox_taun.setSingleStep(256)
+ self.spinBox_taun.setProperty("value", 512)
+ self.spinBox_taun.setObjectName(_fromUtf8("spinBox_taun"))
+ self.gridLayout_tau.addWidget(self.spinBox_taun, 1, 2, 1, 1)
+ self.gridLayout_3.addWidget(self.groupBox_tau, 1, 0, 1, 1)
+ self.buttonBox = QtGui.QDialogButtonBox(Dialog)
+ self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
+ self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
+ self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
+ self.gridLayout_3.addWidget(self.buttonBox, 2, 0, 1, 1)
+
+ self.retranslateUi(Dialog)
+ QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), Dialog.accept)
+ QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), Dialog.reject)
+ QtCore.QMetaObject.connectSlotsByName(Dialog)
+
+ def retranslateUi(self, Dialog):
+ Dialog.setWindowTitle(_translate("Dialog", "YAFF Configuration", None))
+ self.groupBox_time.setTitle(_translate("Dialog", "Time values (log10[t])", None))
+ self.label.setText(_translate("Dialog", "tmin
", None))
+ self.label_2.setText(_translate("Dialog", "tmax
", None))
+ self.label_3.setText(_translate("Dialog", "N", None))
+ self.groupBox_tau.setTitle(_translate("Dialog", "τ-Distribution (log10[τ])", None))
+ self.label_7.setText(_translate("Dialog", "
tmin
", None))
+ self.label_8.setText(_translate("Dialog", "tmax
", None))
+ self.label_9.setText(_translate("Dialog", "N", None))
+
diff --git a/YAFFConfig.ui b/YAFFConfig.ui
new file mode 100644
index 0000000..1a5c9d7
--- /dev/null
+++ b/YAFFConfig.ui
@@ -0,0 +1,168 @@
+
+
+ Dialog
+
+
+
+ 0
+ 0
+ 250
+ 229
+
+
+
+ YAFF Configuration
+
+
+ -
+
+
+ Time values (log10[t])
+
+
+
-
+
+
+ <html><head/><body><p>t<span style=" vertical-align:sub;">min</span></p></body></html>
+
+
+
+ -
+
+
+ <html><head/><body><p>t<span style=" vertical-align:sub;">max</span></p></body></html>
+
+
+
+ -
+
+
+ N
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ 256
+
+
+ 8192
+
+
+ 256
+
+
+ 512
+
+
+
+
+
+
+ -
+
+
+ τ-Distribution (log10[τ])
+
+
+
-
+
+
+ <html><head/><body><p>t<span style=" vertical-align:sub;">min</span></p></body></html>
+
+
+
+ -
+
+
+ <html><head/><body><p>t<span style=" vertical-align:sub;">max</span></p></body></html>
+
+
+
+ -
+
+
+ N
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ 256
+
+
+ 8192
+
+
+ 256
+
+
+ 512
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ Dialog
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ Dialog
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+
+
diff --git a/YAFFparameters.py b/YAFFparameters.py
index 9e2dda7..6c61bcb 100644
--- a/YAFFparameters.py
+++ b/YAFFparameters.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'YAFFparameters.ui'
#
-# Created: Mon Apr 14 14:36:45 2014
+# Created: Tue Apr 15 15:17:03 2014
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
@@ -26,7 +26,7 @@ except AttributeError:
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
- Form.resize(263, 320)
+ Form.resize(271, 322)
self.gridLayout = QtGui.QGridLayout(Form)
self.gridLayout.setMargin(0)
self.gridLayout.setSpacing(1)
@@ -259,6 +259,9 @@ class Ui_Form(object):
self.removeButton = QtGui.QPushButton(Form)
self.removeButton.setObjectName(_fromUtf8("removeButton"))
self.gridLayout.addWidget(self.removeButton, 0, 2, 1, 1)
+ self.configButton = QtGui.QPushButton(Form)
+ self.configButton.setObjectName(_fromUtf8("configButton"))
+ self.gridLayout.addWidget(self.configButton, 1, 2, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
@@ -293,4 +296,5 @@ class Ui_Form(object):
self.comboBox.setItemText(2, _translate("Form", "GG + b", None))
self.comboBox.setItemText(3, _translate("Form", "GGe + b", None))
self.removeButton.setText(_translate("Form", "Remove", None))
+ self.configButton.setText(_translate("Form", "Configure", None))
diff --git a/YAFFparameters.ui b/YAFFparameters.ui
index f306f84..bb165ec 100644
--- a/YAFFparameters.ui
+++ b/YAFFparameters.ui
@@ -6,8 +6,8 @@
0
0
- 263
- 320
+ 271
+ 322
@@ -460,6 +460,13 @@
+ -
+
+
+ Configure
+
+
+
diff --git a/data.py b/data.py
index 5ff85d6..851f89b 100644
--- a/data.py
+++ b/data.py
@@ -3,7 +3,8 @@ from PyQt4.QtGui import QColor
import numpy as np
import pyqtgraph as pg
-from mathlib import FitFunctionCreator
+from Mathlib import FitFunctionCreator
+
class Data:
diff --git a/icons/images.qrc b/icons/images.qrc
index a4ceff9..311a85a 100644
--- a/icons/images.qrc
+++ b/icons/images.qrc
@@ -3,6 +3,7 @@
add_cond.svg
add_yaff.png
add_eps_infty.png
+ qds_fit_abort.png
add_peak.svg
fit_limits.png
save_fit.png
diff --git a/icons/qds_icons.graffle b/icons/qds_icons.graffle
index 14b45c4413331a17be1ac4c1a6c3e269df70fd98..f3cf4ac95fbec2807310010b4c743300d8579c34 100644
GIT binary patch
literal 51584
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