def onFitfunctionChanged(self, row, newfitname ): """Swap out the fitfunction on the current analysis""" if self.fitfunction: self.currentEvaluation.fitfunctionCache[self.fitfunction.name] = StoredFitFunction.fromFitfunction( self.fitfunction ) self.currentEvaluation.fitfunctionName = newfitname if newfitname in self.currentEvaluation.fitfunctionCache: self.currentEvaluation.fitfunction = self.currentEvaluation.fitfunctionCache[newfitname] self.setFitfunction( self.currentEvaluation.fitfunction.fitfunction() ) else: self.setFitfunction( fitFunctionMap[newfitname]() ) self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction(self.fitfunction) self.pushTableModel.setPushVariables(self.currentEvaluation.pushVariables, self.fitfunction)
def onActiveAnalysisChanged(self, selected, deselected=None): if deselected and self.fitfunction: self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction( self.fitfunction) if selected.row() >= 0: self.currentEvaluation = self.analysisDefinition[ selected.row()] if self.analysisDefinition else None self.currentEvaluationIndex = selected.row( ) if self.analysisDefinition else None self.currentEvaluationLabel.setText( self.currentEvaluation.name if self.currentEvaluation else "") if self.currentEvaluation and self.currentEvaluation.fitfunction: self.setFitfunction( self.currentEvaluation.fitfunction.fitfunction()) else: self.setFitfunction(None) self.pushTableModel.setPushVariables( self.currentEvaluation.pushVariables if self.currentEvaluation else None, self.fitfunction) else: self.currentEvaluation = None self.currentEvaluationIndex = None self.currentEvaluationLabel.setText("") self.setFitfunction(None) self.pushTableModel.setPushVariables(None, self.fitfunction) self.setButtonEnabledState()
def saveable(self): name = str(self.analysisNameComboBox.currentText()) definition = StoredFitFunction.fromFitfunction(self.fitfunction) definition.name = name return name != '' and ( name not in self.analysisDefinitions or not (self.analysisDefinitions[name] == definition))
def onLoadFitFunction(self, name=None): name = str(name) if name is not None else self.currentAnalysisName if name in self.analysisDefinitions: if StoredFitFunction.fromFitfunction( self.fitfunction) != self.analysisDefinitions[name]: self.setFitfunction( self.analysisDefinitions[name].fitfunction())
def saveable(self): if self.currentEvaluation is not None and self.fitfunction is not None: self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction( self.fitfunction) return self.currentAnalysisName != '' and ( self.currentAnalysisName not in self.analysisDefinitionDict or not (self.analysisDefinitionDict[self.currentAnalysisName] == self.analysisDefinition))
def fit(self, evaluation): if self.currentEvaluation is not None and evaluation == self.currentEvaluation: plot = self.plottedTraceDict.get(evaluation.evaluation) self.fitfunction.evaluate(self.globalDict) if plot is not None: sigma = None if plot.hasHeightColumn: sigma = plot.height elif plot.hasTopColumn and plot.hasBottomColumn: sigma = abs(plot.top + plot.bottom) self.fitfunction.leastsq(plot.x, plot.y, sigma=sigma) plot.fitFunction = copy.deepcopy(self.fitfunction) plot.plot(-2) evaluation.fitfunction = StoredFitFunction.fromFitfunction( self.fitfunction) self.fitfunctionTableModel.fitDataChanged() self.fitResultsTableModel.fitDataChanged() replacements = self.fitfunction.replacementDict() replacements.update(self.globalDict) evaluation.updatePushVariables(replacements) self.pushTableModel.fitDataChanged() else: fitfunction = evaluation.fitfunction.fitfunction() fitfunction.evaluate(self.globalDict) plot = self.plottedTraceDict.get(evaluation.evaluation) if plot is not None: sigma = None if plot.hasHeightColumn: sigma = plot.height elif plot.hasTopColumn and plot.hasBottomColumn: sigma = abs(plot.top + plot.bottom) fitfunction.leastsq(plot.x, plot.y, sigma=sigma) plot.fitFunction = fitfunction plot.plot(-2) evaluation.fitfunction = StoredFitFunction.fromFitfunction( fitfunction) self.fitfunctionTableModel.fitDataChanged() self.fitResultsTableModel.fitDataChanged() replacements = fitfunction.replacementDict() replacements.update(self.globalDict) evaluation.updatePushVariables(replacements) names = evaluation.fitfunction.fitfunction().parameterNames vals = evaluation.fitfunction.fitfunction().parameters return dict(list(zip( names, vals))) #Return a dictionary of fit parameters and fitted values
def autoSave(self): if self.parameters.autoSave: if self.currentEvaluation is not None and self.fitfunction is not None: self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction( self.fitfunction ) self.onSave() self.saveButton.setEnabled( False ) else: self.saveButton.setEnabled( self.saveable() )
def autoSave(self): if self.parameters.autoSave: if self.currentEvaluation is not None and self.fitfunction is not None: self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction( self.fitfunction) self.onSave() self.saveButton.setEnabled(False) else: self.saveButton.setEnabled(self.saveable())
def onFitfunctionChanged(self, row, newfitname): """Swap out the fitfunction on the current analysis""" if self.fitfunction: self.currentEvaluation.fitfunctionCache[ self.fitfunction.name] = StoredFitFunction.fromFitfunction( self.fitfunction) self.currentEvaluation.fitfunctionName = newfitname if newfitname in self.currentEvaluation.fitfunctionCache: self.currentEvaluation.fitfunction = self.currentEvaluation.fitfunctionCache[ newfitname] self.setFitfunction( self.currentEvaluation.fitfunction.fitfunction()) else: self.setFitfunction(fitFunctionMap[newfitname]()) self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction( self.fitfunction) self.pushTableModel.setPushVariables( self.currentEvaluation.pushVariables, self.fitfunction)
def fit(self, evaluation): if self.currentEvaluation is not None and evaluation == self.currentEvaluation: plot = self.plottedTraceDict.get( evaluation.evaluation ) self.fitfunction.evaluate( self.globalDict ) if plot is not None: sigma = None if plot.hasHeightColumn: sigma = plot.height elif plot.hasTopColumn and plot.hasBottomColumn: sigma = abs(plot.top + plot.bottom) self.fitfunction.leastsq(plot.x, plot.y, sigma=sigma) plot.fitFunction = copy.deepcopy(self.fitfunction) plot.plot(-2) evaluation.fitfunction = StoredFitFunction.fromFitfunction(self.fitfunction) self.fitfunctionTableModel.fitDataChanged() self.fitResultsTableModel.fitDataChanged() replacements = self.fitfunction.replacementDict() replacements.update( self.globalDict ) evaluation.updatePushVariables( replacements ) self.pushTableModel.fitDataChanged() else: fitfunction = evaluation.fitfunction.fitfunction() fitfunction.evaluate( self.globalDict ) plot = self.plottedTraceDict.get( evaluation.evaluation ) if plot is not None: sigma = None if plot.hasHeightColumn: sigma = plot.height elif plot.hasTopColumn and plot.hasBottomColumn: sigma = abs(plot.top + plot.bottom) fitfunction.leastsq(plot.x, plot.y, sigma=sigma) plot.fitFunction = fitfunction plot.plot(-2) evaluation.fitfunction = StoredFitFunction.fromFitfunction(fitfunction) self.fitfunctionTableModel.fitDataChanged() self.fitResultsTableModel.fitDataChanged() replacements = fitfunction.replacementDict() replacements.update( self.globalDict ) evaluation.updatePushVariables( replacements ) names = evaluation.fitfunction.fitfunction().parameterNames vals = evaluation.fitfunction.fitfunction().parameters return dict(list(zip(names, vals))) #Return a dictionary of fit parameters and fitted values
def onSaveAnalysis(self): name = str(self.analysisNameComboBox.currentText()) if name: definition = StoredFitFunction.fromFitfunction(self.fitfunction) definition.name = name isNew = name not in self.analysisDefinitions self.analysisDefinitions[name] = definition if self.analysisNameComboBox.findText(name)<0: self.analysisNameComboBox.addItem(name) if isNew: self.analysisNamesChanged.emit( list(self.analysisDefinitions.keys()) ) self.saveButton.setEnabled( False )
def onSaveAnalysis(self): name = str(self.analysisNameComboBox.currentText()) if name: definition = StoredFitFunction.fromFitfunction(self.fitfunction) definition.name = name isNew = name not in self.analysisDefinitions self.analysisDefinitions[name] = definition if self.analysisNameComboBox.findText(name) < 0: self.analysisNameComboBox.addItem(name) if isNew: self.analysisNamesChanged.emit( list(self.analysisDefinitions.keys())) self.saveButton.setEnabled(False)
def onActiveAnalysisChanged(self, selected, deselected=None): if deselected and self.fitfunction: self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction(self.fitfunction) if selected.row()>=0: self.currentEvaluation = self.analysisDefinition[selected.row()] if self.analysisDefinition else None self.currentEvaluationIndex = selected.row() if self.analysisDefinition else None self.currentEvaluationLabel.setText( self.currentEvaluation.name if self.currentEvaluation else "" ) if self.currentEvaluation and self.currentEvaluation.fitfunction: self.setFitfunction( self.currentEvaluation.fitfunction.fitfunction() ) else: self.setFitfunction( None ) self.pushTableModel.setPushVariables(self.currentEvaluation.pushVariables if self.currentEvaluation else None, self.fitfunction) else: self.currentEvaluation = None self.currentEvaluationIndex = None self.currentEvaluationLabel.setText( "" ) self.setFitfunction( None ) self.pushTableModel.setPushVariables( None, self.fitfunction) self.setButtonEnabledState()
def onLoadAnalysis(self, name=None): name = str(name) if name is not None else str(self.analysisNameComboBox.currentText()) if name in self.analysisDefinitions: if StoredFitFunction.fromFitfunction(self.fitfunction) != self.analysisDefinitions[name]: self.setFitfunction( self.analysisDefinitions[name].fitfunction() )
def saveable(self): name = str(self.analysisNameComboBox.currentText()) definition = StoredFitFunction.fromFitfunction(self.fitfunction) definition.name = name return name != '' and ( name not in self.analysisDefinitions or not (self.analysisDefinitions[name] == definition) )
def onUseSmartStart(self, state): if self.fitfunction is not None: self.fitfunction.useSmartStartValues = state==QtCore.Qt.Checked self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction(self.fitfunction) self.autoSave()
def saveable(self): if self.currentEvaluation is not None and self.fitfunction is not None: self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction( self.fitfunction ) return self.currentAnalysisName != '' and ( self.currentAnalysisName not in self.analysisDefinitionDict or not (self.analysisDefinitionDict[self.currentAnalysisName] == self.analysisDefinition))
def onUseSmartStart(self, state): if self.fitfunction is not None: self.fitfunction.useSmartStartValues = state == QtCore.Qt.Checked self.currentEvaluation.fitfunction = StoredFitFunction.fromFitfunction( self.fitfunction) self.autoSave()