diff --git a/Makefile b/Makefile index 3e25f1e..1398d5f 100644 --- a/Makefile +++ b/Makefile @@ -3,10 +3,10 @@ MAKEFLAGS+="-j 4" ###### EDIT ##################### #Directory with ui and resource files -RESOURCE_DIR = gui +RESOURCE_DIR = ui #Directory for compiled resources -COMPILED_DIR = gui +COMPILED_DIR = ui #UI files to compile UI_FILES = *.ui @@ -30,7 +30,7 @@ ui : $(COMPILED_UI) $(COMPILED_DIR)/%.py : $(RESOURCE_DIR)/%.ui pyuic4 $< -o $@ -$(COMPILED_DIR)/%_rc.py : $(RESOURCE_DIR)/icons/%.qrc +$(COMPILED_DIR)/$(RESOURCE_DIR)/%_rc.py : $(RESOURCE_DIR)/icons/%.qrc pyrcc4 $< -o $@ clean : diff --git a/data/Container.py b/data/Container.py index 5b4a9eb..6db4396 100644 --- a/data/Container.py +++ b/data/Container.py @@ -11,8 +11,6 @@ from container_base import BaseContainer import gui.container_widgets - - __author__ = 'markusro' @@ -44,7 +42,6 @@ class PowerComplex(BaseContainer): self.param_number = 2 def function( self, p, x ): - BaseContainer.function(self, p, x) om = 2*np.pi*x sgma, n = p power = sgma/(om*1j)**n @@ -62,7 +59,6 @@ class Static(BaseContainer): self.param_number = 1 def function( self, p, x ): - BaseContainer.function(self, p, x) eps_inf = p[0] static = np.ones((2, x.size))*eps_inf static[1, :] *= 0 # set imag part zero @@ -82,7 +78,6 @@ class Peak(BaseContainer): self.param_number = 4 def function( self, p, x ): - BaseContainer.function(self, p, x) eps, t, a, b = p om = 2*np.pi*x hn = eps/(1+(1j*om*t)**a)**b @@ -124,7 +119,6 @@ class YAFF(BaseContainer): self.update_data() def function( self, p, x ): - BaseContainer.function(self, p, x) ya = self._libyaff.loss(p, x) cplx = np.array([ya.imag, ya.real]) return cplx \ No newline at end of file diff --git a/data/container_base.py b/data/container_base.py index 6ad0e6c..a2d1e87 100644 --- a/data/container_base.py +++ b/data/container_base.py @@ -3,24 +3,30 @@ from PyQt4.QtGui import QColor import numpy as np import pyqtgraph as pg + __author__ = 'markusro' class BaseContainer(QObject): + """ + This class provides placeholders (or default) methods for "container" objects. + These objects are basically the different fit elements for dielectric spectroscopy. + """ + # TODO generalize the base class so that we can use plugins (self-contained fit functions) changedData = pyqtSignal() removeObj = pyqtSignal(QObject) - def __init__(self, plt_real=None, plt_imag=None, limits=None): + def __init__( self, plt_real=None, plt_imag=None, limits=None ): super(BaseContainer, self).__init__() - myPen = pg.mkPen( style=Qt.DotLine, - width=2.5) + myPen = pg.mkPen(style=Qt.DotLine, + width=2.5) - self.data_curve_real = pg.PlotDataItem(x=np.array([np.nan]),y=np.array([np.nan]), pen=myPen) + self.data_curve_real = pg.PlotDataItem(x=np.array([np.nan]), y=np.array([np.nan]), pen=myPen) self.plt_real = plt_real self.plt_real.addItem(self.data_curve_real) - self.data_curve_imag = pg.PlotDataItem(x=np.array([np.nan]),y=np.array([np.nan]), pen=myPen) + self.data_curve_imag = pg.PlotDataItem(x=np.array([np.nan]), y=np.array([np.nan]), pen=myPen) self.plt_imag = plt_imag self.plt_imag.addItem(self.data_curve_imag) @@ -41,65 +47,63 @@ class BaseContainer(QObject): self._param_number = 0 self._abort = False - def set_limits(self, limits): + def set_limits( self, limits ): self.limits = limits self.update_data() @pyqtSlot(bool) - def abort(self, abort=False): + def abort( self, abort=False ): self._abort = abort @property - def param_number(self): + def param_number( self ): return self._param_number @param_number.setter - def param_number(self, num): + def param_number( self, num ): self._param_number = num @property - def id_string(self): + def id_string( self ): return self._id_string @id_string.setter - def id_string(self, id): - #self._func = self.functions.get_function(id) - self._id_string = id + def id_string( self, id ): + # self._func = self.functions.get_function(id) + self._id_string = id @property - def id_label(self): + def id_label( self ): return self._id_label @id_label.setter - def id_label(self, id): - #self._func = self.functions.get_function(id) - self._func = self.function - self._id_label = id + def id_label( self, id ): + self._id_label = id @property - def color(self): + def color( self ): return self._color @color.setter - def color(self, c): + def color( self, c ): self._color = c self.data_curve_real.setPen(color=c, style=Qt.DotLine, width=2.5) self.data_curve_imag.setPen(color=c, style=Qt.DotLine, width=2.5) @property - def widget(self): + def widget( self ): return self._widget @widget.setter - def widget(self, wdgt): + def widget( self, wdgt ): self._widget = wdgt self._widget.changedTable.connect(self.update_data) # TODO better to use self.setParameter self.removeObj.connect(self._widget.deleteLater) self._widget.removeMe.connect(self.removeMe) def get_parameter( self ): - p = self.widget.getTable() # TODO ugly ... should return self._beta etc ...? + p = self.widget.getTable() # TODO ugly ... should return self._beta etc ...? return p def get_fixed( self ): @@ -107,15 +111,15 @@ class BaseContainer(QObject): return p def set_parameter( self, beta, sd_beta=None ): - self._beta = beta + self._beta = beta self._sd_beta = sd_beta self.widget.update_table(beta, sd_beta) self.update_data() - def get_data(self): + def get_data( self ): return self._frequency, self._data - def removeMe(self): + def removeMe( self ): self.plt_imag.removeItem(self.data_curve_imag) self.plt_real.removeItem(self.data_curve_real) self.removeObj.emit(self) @@ -123,20 +127,27 @@ class BaseContainer(QObject): def update_data( self ): self._frequency = np.logspace(np.log10(self.limits[0]), np.log10(self.limits[1]), 256) - self._data = self._func(self.get_parameter(), self._frequency) + self._data = self.function(self.get_parameter(), self._frequency) self.data_curve_real.setData(x=self._frequency, y=self._data[0]) self.data_curve_imag.setData(x=self._frequency, y=self._data[1]) self.changedData.emit() - def resampleData(self, x): - data = self._func(self.get_parameter(), x) - return np.array([x,data[0],data[1]]).T + def resampleData( self, x ): + data = self.function(self.get_parameter(), x) + return np.array([x, data[0], data[1]]).T + def subtractMe(self, flag): + print "subtract" + self._data = -self._data + self.changedData.emit() def clear_data( self ): self.data_curve_real.setData(x=[np.nan], y=[np.nan]) self.data_curve_imag.setData(x=[np.nan], y=[np.nan]) - def function(self,p,x): - if self._abort: raise StopIteration - #raise NotImplementedError, "This needs to be implemented in your subclass" \ No newline at end of file + def function( self, p, x ): + if self._abort: + raise StopIteration + raise NotImplementedError, "This needs to be implemented in your subclass" + + diff --git a/data/data.py b/data/data.py new file mode 100644 index 0000000..eeac5d7 --- /dev/null +++ b/data/data.py @@ -0,0 +1,21 @@ +from PyQt4.QtCore import QObject, pyqtSignal + +__author__ = 'markusro' + + +class Daten(QObject): + data_changed_signal = pyqtSignal(list, list, list) + + def __init__(self, x=None, y_real=None, y_imag=None): + super(Daten, self).__init__(None) + self._data = (x, y_real, y_imag) + + def get_data(self): + return self._data + + def set_data(self, x, y_real, y_imag): + if len(x) == len(y_real) == len(y_imag): + self._data = (x, y_real, y_imag) + self.data_changed_signal.emit(list(x), list(y_real), list(y_imag)) + else: + raise AttributeError("Inhomogeneous data size x,real,imag: %i,%i,%i"(len(x), len(y_real), len(y_imag))) \ No newline at end of file diff --git a/data/experimental.py b/data/experimental.py index 235cc5c..ded5800 100644 --- a/data/experimental.py +++ b/data/experimental.py @@ -16,7 +16,7 @@ class Data: myPen_real = pg.mkPen(width=2.5, color=(51, 255, 127)) self.experimental_curve_imag = pg.PlotDataItem(x=[np.nan], y=[np.nan], - pen=QColor(0, 0, 0, 0), + pen=None, symbol='o', symbolBrush=(255, 127, 0, 127)) self.experimental_curve_real = pg.PlotDataItem(x=[np.nan], y=[np.nan], diff --git a/gui/container_widgets.py b/gui/container_widgets.py index e6fcf1f..d1383dd 100644 --- a/gui/container_widgets.py +++ b/gui/container_widgets.py @@ -48,7 +48,7 @@ class LogFSpinBox(QDoubleSpinBox): class BaseWidget(QGroupBox): changedTable = pyqtSignal() removeMe = pyqtSignal() - subtract = pyqtSignal() + subtract = pyqtSignal(bool) def __init__(self, parent=None): super(BaseWidget, self).__init__(parent) @@ -56,6 +56,7 @@ class BaseWidget(QGroupBox): self.inputs = [] self.errors = [] self.names = [] + self._subtracted = False self.selector_mask = None # TODO: clean up self.func_type="None" @@ -63,7 +64,9 @@ class BaseWidget(QGroupBox): self.removeMe.emit() def subtract(self): - self.subtract.emit() + self.subtract.emit(self._subtracted) + self._subtracted = not self._subtracted # Toggle state + def change_values( self, num ): self.changedTable.emit() @@ -317,7 +320,8 @@ class ConductivityWidget(BaseWidget, QGroupBox): self.ui.gridLayout.addWidget(self.ui.rSigma,2,1) self.ui.removeButton.clicked.connect(self.remove) - #self.ui.subtractConductivityButton.connect(self.subtract) + self.ui.pushButton_hide.clicked.connect(self.subtract) + self.func_type="Cond." self.names = [ @@ -355,6 +359,7 @@ class PowerLawWidget(BaseWidget): self.ui.doubleSpinBox_2 = LogFSpinBox(self) self.ui.gridLayout.addWidget(self.ui.doubleSpinBox_2,1,1) self.ui.removeButton.clicked.connect(self.remove) + self.ui.pushButton_hide.toggled.connect(self.subtract) self.func_type="Power Law" self.names = ["Amp", "pwrAmp"] diff --git a/gui/graphs.py b/gui/graphs.py new file mode 100644 index 0000000..17fccf5 --- /dev/null +++ b/gui/graphs.py @@ -0,0 +1,83 @@ +# coding=utf-8 +from PyQt4.QtCore import pyqtSignal +from PyQt4.QtGui import QColor +from data.data import Daten +from libmath.function_library import ModelFunction + +__author__ = 'markusro' + + +import pyqtgraph as pg + + +class Graph(object): + def __init__(self,x = None, y = None): + super(Graph, self).__init__(self) + print "Graph" + self._pen = pg.mkPen(color="w", width=2.0, style=3) + self.graph_real = pg.PlotDataItem(x=x, y=y, pen=self._pen) + self.graph_imag = pg.PlotDataItem(x=x, y=y, pen=self._pen) + + @property + def color(self): + return self._pen.color() + + @color.setter + def color(self, c): + self._pen.setColor(c) + + @property + def style(self): + return self._pen.style() + + @style.setter + def style(self, s): + self._pen.setStyle(s) + + @property + def width(self): + return self._pen.width() + + @width.setter + def width(self, w): + self._pen.setWidth(w) + + def set_symbol(self, s): + for gr in self.graph_real, self.graph_imag: + gr.setSymbol(s) + gr.setStyle(0) + + + def update_graph_data(self, x, y_real, y_imag): + """ + Update Graph data. + + @param x: + @param y_real: + @param y_imag: + """ + self.graph_real.setData(x, y_real) + self.graph_imag.setData(x, y_imag) + +class DataGraph(Graph): + def __init__(self): + super(DataGraph, self).__init__() + self._pen = pg.mkPen(QColor(0, 0, 0, 0)) + self.graph_real = pg.PlotDataItem(x=x, y=y, pen=self._pen, symbol="o", symbolBrush=(255, 127, 0, 127)) + self.graph_imag = pg.PlotDataItem(x=x, y=y, pen=self._pen, symbol="o", symbolBrush=(255, 127, 0, 127)) + + +class GraphObject(Graph, Daten, ModelFunction): + parameter_changed_signal = pyqtSignal(list) + def __init__(self): + super(GraphObject, self).__init__(self) + self.data_changed_signal.connect(self.update_graph_data) + + def update(self, x, p): + if self.model is not None: + _x, ry, iy = self.model.calculate(x, p) + self.set_data(_x, ry, iy) + self.parameter_changed_signal.emit(list(p)) + else: + print "doing nothing" + pass \ No newline at end of file diff --git a/libmath/BDSlib.py b/libmath/BDSlib.py index 5bd171f..6f90ad6 100644 --- a/libmath/BDSlib.py +++ b/libmath/BDSlib.py @@ -255,7 +255,7 @@ class Functions(QObject): cplx = np.array([ya.imag, ya.real]) return cplx - def get( self, name ): + def get_name( self, name ): return self.list[name] def get_function( self, name ): diff --git a/libmath/function_library.py b/libmath/function_library.py new file mode 100644 index 0000000..dff9027 --- /dev/null +++ b/libmath/function_library.py @@ -0,0 +1,141 @@ +# coding=utf-8 +import warnings +import numpy as np +import yafflib + +__author__ = 'markusro' + + +class Function(object): + + + def __init__(self): + super(Function, self).__init__() + self._id_string = None + self._num_parameters = None + self._pretty_name = "" + self._function = None + + def get_id_string(cls): + if cls._id_string is None: + raise NotImplementedError("You need to set the id_string") + return cls._id_string + + def set_id_string(cls, s): + cls._id_string = s + + def get_num_paramters(cls): + if cls._num_paramters is None: + raise NotImplementedError("You need to set the num_paramters") + return cls._num_paramters + + def set_num_paramters(cls, s): + cls._num_paramters = s + + def get_function(cls): + if cls._function is None: + raise NotImplementedError("You need to set f") + return cls._function + + def set_function(cls, f): + cls._function = f + + def calculate(self, x, p): + if self._function is None: raise NotImplementedError("You need to set f") + data = self._function(x, p) + return x,data[0],data[1] + + +class HavNegCmplx(Function): + def __init__(self): + super(HavNegCmplx, self).__init__() + self.set_function(hn) + self.set_id_string("hn") + self.set_num_paramters(4) + + +def hn(x, p): + om = 2*np.pi*x + #hn = om*1j + eps, t, a, b = p + h_n = eps/(1+(1j*om*t)**a)**b + cplx = np.array([h_n.real, -h_n.imag]) + return cplx + + +class ConductivityCmplx(Function): + def __init__(self): + super(ConductivityCmplx, self).__init__() + self.set_num_paramters(3) + self.set_function(cond_cmplx) + self.set_id_string("conductivity") + + +def cond_cmplx(p, x ): + om = 2*np.pi*x + sgma, isgma, n = p + cond = sgma/(om**n)+isgma/(1j*om**n) # Jonscher (Universal Dielectric Response: e",e' prop sigma/omega**n + cplx = np.array([cond.real, -cond.imag]) + return cplx + + +class PowerCmplx(Function): + def __init__(self): + super(PowerCmplx, self).__init__() + self.set_function(power_cmplx) + self.set_num_paramters(2) + self.set_id_string("power_law") + + +def power_cmplx( p, x ): + om = 2*np.pi*x + sgma, n = p + power = sgma/(om*1j)**n + cplx = np.array([power.real, -power.imag]) + return cplx + + +class EpsInftyCmplx(Function): + def __init__(self): + super(EpsInftyCmplx, self).__init__() + self.set_function(static_cmplx) + self.set_id_string("e_inf") + self.set_num_paramters(1) + + +def static_cmplx(p, x ): + eps_inf = p[0] + static = np.ones((2, x.size))*eps_inf + static[1, :] *= 0 # set imag part zero + return static + + +class YaffCmplx(Function): + def __init__(self): + super(YaffCmplx, self).__init__() + self.set_function(yaff) + self.set_id_string("yaff") + self.set_num_paramters(8) + + +def yaff( p, x ): + #ya = self.YAFF.yaff(p[:8], x) + ya = yafflib.Yaff.yaff(p[:,0], x) + cplx = np.array([ya.imag, ya.real]) + return cplx + + +class ModelFunction(object): + def __init__(self): + super(ModelFunction, self).__init__(self) + self.model = None + + @classmethod + def select_model(self, model): + self._functions_avail = ", ".join( cls().get_id_string() for cls in Function.__subclasses__()) + for cls in Function.__subclasses__(): + if model == cls().get_id_string(): + self.model = cls() + return True + warnings.warn("Function not found: %s \n(available functions: %s)"%(model, self._functions_avail)) + return False \ No newline at end of file diff --git a/qds.py b/qds.py index 614d4a7..cd61625 100755 --- a/qds.py +++ b/qds.py @@ -76,9 +76,9 @@ class AppWindow(QMainWindow): # fit boundary signals self.fit_boundary_imag.sigRegionChanged.connect(self._update_fit_boundary_imag) - self.fit_boundary_imag.sigRegionChangeFinished.connect(self.updatePlot) + self.fit_boundary_imag.sigRegionChangeFinished.connect(self.update_plot) self.fit_boundary_real.sigRegionChanged.connect(self._update_fit_boundary_real) - self.fit_boundary_real.sigRegionChangeFinished.connect(self.updatePlot) + self.fit_boundary_real.sigRegionChangeFinished.connect(self.update_plot) for pltwidgt in (self.ui.pgPlotWidget_real, self.ui.pgPlotWidget_imag): pltwidgt.setLogMode(x=True, y=True) @@ -157,6 +157,10 @@ class AppWindow(QMainWindow): self.ui.actionShow_Derivative.triggered.connect(self.show_derivative) + self.ui.menuConfiguration.triggered.connect(self.conf) + + def conf(self): + pass def show_derivative( self ): self.xtra_wdgt = ExtraDifferentialWidget.DifferentialWidget() @@ -349,7 +353,7 @@ class AppWindow(QMainWindow): plt_imag=self.ui.pgPlotWidget_imag, limits=self.data.fit_limits) _yaff.blockSignals(True) - _yaff.changedData.connect(self.updatePlot) + _yaff.changedData.connect(self.update_plot) _yaff.removeObj.connect(self.delParamterObject) gg_y = 10**pos.y()*2 gg_x = 1/(10**pos.x()*2*np.pi) @@ -357,7 +361,7 @@ class AppWindow(QMainWindow): _yaff.set_parameter(beta=yaff_par) self.parameterWidget.add(_yaff.widget) self.function_registry.register_function(_yaff) - self.updatePlot() + self.update_plot() _yaff.blockSignals(False) @@ -366,13 +370,13 @@ class AppWindow(QMainWindow): plt_imag=self.ui.pgPlotWidget_imag, limits=self.data.fit_limits) _conductivity.blockSignals(True) - _conductivity.changedData.connect(self.updatePlot) + _conductivity.changedData.connect(self.update_plot) _conductivity.removeObj.connect(self.delParamterObject) cond_par = [0.0, 10**(pos.y()+pos.x())*2*np.pi, 1.0] _conductivity.set_parameter(beta=cond_par) self.parameterWidget.add(_conductivity.widget) self.function_registry.register_function(_conductivity) - self.updatePlot() + self.update_plot() _conductivity.blockSignals(False) @@ -380,29 +384,29 @@ class AppWindow(QMainWindow): _power_complex = PowerComplex(plt_imag=self.ui.pgPlotWidget_imag, plt_real=self.ui.pgPlotWidget_real, limits=self.data.fit_limits) - _power_complex.changedData.connect(self.updatePlot) + _power_complex.changedData.connect(self.update_plot) _power_complex.removeObj.connect(self.delParamterObject) cond_par = [10**(pos.y()+pos.x())*2*np.pi, 1.0] _power_complex.set_parameter(beta=cond_par) self.parameterWidget.add(_power_complex.widget) self.function_registry.register_function(_power_complex) - self.updatePlot() + self.update_plot() def addEpsInfty( self, pos ): _eps_infty = Static(plt_imag=self.ui.pgPlotWidget_imag, plt_real=self.ui.pgPlotWidget_real, limits=self.data.fit_limits) - _eps_infty.changedData.connect(self.updatePlot) + _eps_infty.changedData.connect(self.update_plot) _eps_infty.removeObj.connect(self.delParamterObject) cond_par = [10**pos.y()] _eps_infty.set_parameter(beta=cond_par) self.parameterWidget.add(_eps_infty.widget) self.function_registry.register_function(_eps_infty) - self.updatePlot() + self.update_plot() def delParamterObject( self, obj ): self.function_registry.unregister_function(obj) - self.updatePlot() + self.update_plot() def addPeak( self, pos ): id_list = [key.id_num for key in @@ -417,12 +421,12 @@ class AppWindow(QMainWindow): limits=self.data.fit_limits) self.function_registry.register_function(_peak) - _peak.changedData.connect(self.updatePlot) + _peak.changedData.connect(self.update_plot) _peak.removeObj.connect(self.delParamterObject) new_peak_beta0 = [2*10**pos.y(), 1/(2*np.pi*10**pos.x()), 1, 1] _peak.set_parameter(beta=new_peak_beta0) self.parameterWidget.add(_peak.widget) - self.updatePlot() + self.update_plot() def fitData_start( self, method ): #fit_methods = [fit_odr_cmplx, fit_odr_imag, fit_lbfgsb, fit_anneal] @@ -532,10 +536,11 @@ class AppWindow(QMainWindow): #self.ui.pgPlotWidget_real.setRange(xRange=(_freq.min(), _freq.max()), # yRange=(_die_stor.min(), _die_stor.max()) ) - self.updatePlot() + self.update_plot() - def updatePlot( self ): + def update_plot( self ): + print "redrawing plot" log10fmin, log10fmax = self.fit_boundary_imag.getRegion() self.data.set_fit_xlimits(10**log10fmin, 10**log10fmax) diff --git a/ui/ConductivityGroupBox.py b/ui/ConductivityGroupBox.py index 13f4f23..7cc154a 100644 --- a/ui/ConductivityGroupBox.py +++ b/ui/ConductivityGroupBox.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'ui/ConductivityGroupBox.ui' # -# Created: Wed Sep 24 21:21:48 2014 -# by: PyQt4 UI code generator 4.11.1 +# Created: Tue Dec 16 15:06:22 2014 +# by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! @@ -26,7 +26,7 @@ except AttributeError: class Ui_ConductivityGroupBox(object): def setupUi(self, ConductivityGroupBox): ConductivityGroupBox.setObjectName(_fromUtf8("ConductivityGroupBox")) - ConductivityGroupBox.resize(253, 156) + ConductivityGroupBox.resize(253, 158) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -113,9 +113,10 @@ class Ui_ConductivityGroupBox(object): self.rSigma.setSizePolicy(sizePolicy) self.rSigma.setObjectName(_fromUtf8("rSigma")) self.gridLayout.addWidget(self.rSigma, 2, 1, 1, 1) - self.subtractConductivityButton = QtGui.QPushButton(ConductivityGroupBox) - self.subtractConductivityButton.setObjectName(_fromUtf8("subtractConductivityButton")) - self.gridLayout.addWidget(self.subtractConductivityButton, 0, 2, 1, 1) + self.pushButton_hide = QtGui.QPushButton(ConductivityGroupBox) + self.pushButton_hide.setCheckable(True) + self.pushButton_hide.setObjectName(_fromUtf8("pushButton_hide")) + self.gridLayout.addWidget(self.pushButton_hide, 0, 2, 1, 1) self.label_3 = QtGui.QLabel(ConductivityGroupBox) self.label_3.setObjectName(_fromUtf8("label_3")) self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1, QtCore.Qt.AlignHCenter) @@ -145,7 +146,7 @@ class Ui_ConductivityGroupBox(object): self.label_4.setText(_translate("ConductivityGroupBox", "α", None)) self.rSigma_sd.setText(_translate("ConductivityGroupBox", "TextLabel", None)) self.rSigma.setToolTip(_translate("ConductivityGroupBox", "

DC conductivity, should only be seen in the imaginary permitivity. If there is a Jonscher type of Universal Dielectric Response, the ratio of σ"/σ\'(DC) is a constant

", None)) - self.subtractConductivityButton.setText(_translate("ConductivityGroupBox", "Hide", None)) + self.pushButton_hide.setText(_translate("ConductivityGroupBox", "Hide", None)) self.label_3.setText(_translate("ConductivityGroupBox", "

σ"

", None)) self.iSigma.setToolTip(_translate("ConductivityGroupBox", "

If there is a Jonscher type of Universal Dielectric Response, the ratio of σ"/σ\'(DC) is a constant

", None)) self.iSigma_sd.setText(_translate("ConductivityGroupBox", "TextLabel", None)) diff --git a/ui/ConductivityGroupBox.ui b/ui/ConductivityGroupBox.ui index d3a69f8..2986283 100644 --- a/ui/ConductivityGroupBox.ui +++ b/ui/ConductivityGroupBox.ui @@ -7,7 +7,7 @@ 0 0 253 - 156 + 158 @@ -171,10 +171,13 @@ - + Hide + + true + diff --git a/ui/PowerLawGroupBox.py b/ui/PowerLawGroupBox.py index e156058..4db998e 100644 --- a/ui/PowerLawGroupBox.py +++ b/ui/PowerLawGroupBox.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'ui/PowerLawGroupBox.ui' # -# Created: Wed Sep 24 21:21:48 2014 -# by: PyQt4 UI code generator 4.11.1 +# Created: Tue Dec 16 15:03:15 2014 +# by: PyQt4 UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! @@ -26,7 +26,7 @@ except AttributeError: class Ui_PowerLawGroupBox(object): def setupUi(self, PowerLawGroupBox): PowerLawGroupBox.setObjectName(_fromUtf8("PowerLawGroupBox")) - PowerLawGroupBox.resize(206, 129) + PowerLawGroupBox.resize(253, 131) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -113,6 +113,10 @@ class Ui_PowerLawGroupBox(object): self.checkBox_2.setText(_fromUtf8("")) self.checkBox_2.setObjectName(_fromUtf8("checkBox_2")) self.gridLayout.addWidget(self.checkBox_2, 1, 3, 1, 1, QtCore.Qt.AlignHCenter) + self.pushButton_hide = QtGui.QPushButton(PowerLawGroupBox) + self.pushButton_hide.setCheckable(True) + self.pushButton_hide.setObjectName(_fromUtf8("pushButton_hide")) + self.gridLayout.addWidget(self.pushButton_hide, 0, 2, 1, 1) self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1) self.retranslateUi(PowerLawGroupBox) @@ -128,4 +132,5 @@ class Ui_PowerLawGroupBox(object): self.label_5.setText(_translate("PowerLawGroupBox", "TextLabel", None)) self.label_3.setText(_translate("PowerLawGroupBox", "n", None)) self.label_2.setText(_translate("PowerLawGroupBox", "U", None)) + self.pushButton_hide.setText(_translate("PowerLawGroupBox", "Hide", None)) diff --git a/ui/PowerLawGroupBox.ui b/ui/PowerLawGroupBox.ui index 6856cd1..a6fa6cb 100644 --- a/ui/PowerLawGroupBox.ui +++ b/ui/PowerLawGroupBox.ui @@ -6,8 +6,8 @@ 0 0 - 206 - 129 + 253 + 131 @@ -167,6 +167,16 @@ + + + + Hide + + + true + + + diff --git a/ui/QDSMain.py b/ui/QDSMain.py index 53337de..af4966a 100644 --- a/ui/QDSMain.py +++ b/ui/QDSMain.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'ui/QDSMain.ui' # -# Created: Wed Sep 24 21:21:48 2014 -# by: PyQt4 UI code generator 4.11.1 +# Created: Tue Sep 30 15:34:02 2014 +# by: PyQt4 UI code generator 4.11.2 # # WARNING! All changes made in this file will be lost! @@ -67,6 +67,8 @@ class Ui_MainWindow(object): self.menubar.setObjectName(_fromUtf8("menubar")) self.menuExtras = QtGui.QMenu(self.menubar) self.menuExtras.setObjectName(_fromUtf8("menuExtras")) + self.menuConfiguration = QtGui.QMenu(self.menubar) + self.menuConfiguration.setObjectName(_fromUtf8("menuConfiguration")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) @@ -125,6 +127,7 @@ class Ui_MainWindow(object): self.actionShow_Derivative.setObjectName(_fromUtf8("actionShow_Derivative")) self.menuExtras.addAction(self.actionShow_Derivative) self.menubar.addAction(self.menuExtras.menuAction()) + self.menubar.addAction(self.menuConfiguration.menuAction()) self.toolBar.addAction(self.actionAdd_Peak) self.toolBar.addAction(self.actionAdd_Cond) self.toolBar.addAction(self.actionAdd_PowerLaw) @@ -141,6 +144,7 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) self.menuExtras.setTitle(_translate("MainWindow", "Extras", None)) + self.menuConfiguration.setTitle(_translate("MainWindow", "Configuration", None)) self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar", None)) self.actionAdd_Peak.setText(_translate("MainWindow", "Add Peak", None)) self.actionAdd_Cond.setText(_translate("MainWindow", "Add Cond.", None)) diff --git a/ui/QDSMain.ui b/ui/QDSMain.ui index 7e04d17..6198178 100644 --- a/ui/QDSMain.ui +++ b/ui/QDSMain.ui @@ -73,7 +73,13 @@ + + + Configuration + + +