コード例 #1
0
ファイル: limits_GUImodel.py プロジェクト: llimeht/refnx
 def __init__(self, params, finite_bounds=False, parent=None):
     super(LimitsModel, self).__init__(parent)
     self.params = params
     self.finite_bounds = finite_bounds
     self.varys = curvefitter.varys(self.params)
     self.fitted_params = np.where(self.varys)[0]
     self.names = curvefitter.names(self.params)
コード例 #2
0
ファイル: UDF_GUImodel.py プロジェクト: llimeht/refnx
    def data(self, index, role=QtCore.Qt.DisplayRole):
        if not index.isValid():
            return False

        row = index.row()
        col = index.column()
        names = curvefitter.names(self.params)

        if row:
            name = names[row - 1]

        if role == QtCore.Qt.DisplayRole:
            if col == 0:
                if row == 0:
                    return str(len(self.params))
                else:
                    return name
            elif col == 1 and row > 0:
                    return str(self.params[name].value)
            elif col == 2 and row > 0:
                return str(self.params[name].min)
            elif col == 3 and row > 0:
                return str(self.params[name].max)
            elif col == 4 and row > 0:
                return str(self.params[name].expr)

        if role == QtCore.Qt.CheckStateRole:
            if row > 0 and col == 1:
                if self.params[name].vary:
                    return QtCore.Qt.Unchecked
                else:
                    return QtCore.Qt.Checked
コード例 #3
0
ファイル: limits_GUImodel.py プロジェクト: llimeht/refnx
 def __init__(self, params, finite_bounds=False, parent=None):
     super(LimitsModel, self).__init__(parent)
     self.params = params
     self.finite_bounds = finite_bounds
     self.varys = curvefitter.varys(self.params)
     self.fitted_params = np.where(self.varys)[0]
     self.names = curvefitter.names(self.params)
コード例 #4
0
    def rowcol_to_name(self, row, col, nlayers):
        if row == 0 and col == 1:
            param = 2
        elif row == 0 and col == 2:
            param = 3
        elif row == nlayers + 1 and col == 1:
            param = 4
        elif row == nlayers + 1 and col == 2:
            param = 5
        elif row == nlayers + 1 and col == 3:
            param = 7
        else:
            param = 4 * (row - 1) + col + 8

        names = curvefitter.names(self.params)
        return names[param]
コード例 #5
0
    def remove_layer(self, which_layer):
        params = self.params
        values = curvefitter.values(params)
        if int(values[0]) == 0:
            return False

        if not reflect.is_proper_abeles_input(values):
            raise ValueError('The size of the parameter array passed'
                             ' to reflectivity should be 4 * coefs[0] + 8')

        oldlayers = int(values[0])

        self.beginRemoveRows(QtCore.QModelIndex(), which_layer, which_layer)

        self.params['nlayers'].value = oldlayers - 1

        startP = 4 * (which_layer - 1) + 8

        #get rid of parameters we don't need anymore
        names_lost = curvefitter.names(self.params)[startP: startP + 4]
        map(self.params.pop, names_lost)

        # but now we need to rejig parameters names
        # the only way to do this is to pop them all and readd
        values = curvefitter.values(self.params)
        varys = curvefitter.varys(self.params)
        bounds = np.array(curvefitter.bounds(self.params))
        names = ReflectivityFitFunction.parameter_names(values.size)
        map(self.params.pop, self.params.keys())

        parlist = zip(names,
                      values,
                      varys,
                      bounds.T[0],
                      bounds.T[1],
                      [None] * values.size)

        for para in parlist:
            self.params.add(*para)

        self.endRemoveRows()
コード例 #6
0
ファイル: UDF_GUImodel.py プロジェクト: llimeht/refnx
    def setData(self, index, value, role=QtCore.Qt.EditRole):
        row = index.row()
        col = index.column()
        names = curvefitter.names(self.params)

        if row:
            name = names[row - 1]

        if role == QtCore.Qt.CheckStateRole:
            if row > 0 and col == 1:
                if value == QtCore.Qt.Checked:
                    self.params[name].vary = False
                else:
                    self.params[name].vary = True

        if role == QtCore.Qt.EditRole:
            if row == 0 and col == 0:
                currentparams = self.rowCount() - 1

                validator = QtGui.QIntValidator()
                voutput = validator.validate(value, 1)
                if voutput[0] is QtGui.QValidator.State.Acceptable and int(voutput[1]) >= 0:
                    newparams = int(voutput[1])

                    if newparams == currentparams:
                        return True

                    if newparams > currentparams:
                        self.beginInsertRows(
                            QtCore.QModelIndex(),
                            currentparams + 1,
                            newparams)
                    if newparams < currentparams:
                        self.beginRemoveRows(
                            QtCore.QModelIndex(),
                            newparams + 1,
                            currentparams)

                    if newparams > currentparams:
                        for i in range(currentparams, newparams):
                            self.params.add('p%d'%i, 0, True, -np.inf, np.inf, None)
                        self.endInsertRows()

                    if newparams < currentparams:
                        remove_names = names[newparams:]
                        map(self.params.pop, remove_names)
                        self.endRemoveRows()

                    self.modelReset.emit()
            if row > 0 and col in [1, 2, 3]:
                validator = QtGui.QDoubleValidator()
                voutput = validator.validate(value, 1)
                if voutput[0] == QtGui.QValidator.State.Acceptable:
                    number = float(voutput[1])
                else:
                    return False

                if col == 1:
                    self.params[name].value = number
                if col == 2:
                    self.params[name].min = number
                if col == 3:
                    self.params[name].max = number
            if row > 0 and col == 0:
                #change a parameter name requires making a new dictionary
                if not valid_symbol_name(value):
                    return False

                p = Parameters()
                param = self.params[name]
                newparam = Parameter(value, param.value, param.vary,
                                     param.min, param.max, param.expr)

                for k, v in self.params.items():
                    if k == name:
                        p[value] = newparam
                    else:
                        p[k] = v

                self.params = p

            if row > 0 and col == 4:
                #set an expression
                param = self.params[name]
                param.expr = value

        self.dataChanged.emit(index, index)
        return True