Skip to content

Commit 8508d87

Browse files
authored
Merge pull request #210 from EasyScience/develop
Develop
2 parents df070af + 607a4c4 commit 8508d87

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+2140
-182
lines changed

.github/workflows/documentation-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
- name: Set up Python ${{ matrix.python-version }}
2929
uses: actions/setup-python@v2
3030
with:
31-
python-version: 3.9
31+
python-version: '3.10'
3232
- name: Install EasyReflectometry and dependencies
3333
run: |
3434
sudo apt install pandoc

.github/workflows/macos-windows-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
- name: Setup Python
3333
uses: actions/setup-python@v5
3434
with:
35-
python-version: 3.9
35+
python-version: '3.10'
3636

3737
- name: Upgrade Pip
3838
run: python -m pip install --upgrade pip

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# CHANGELOG
2+
### Changes 0.0.12
3+
4+
- Use the latest version of the lib
5+
26
### Changes 0.0.11
37

48
- Fix to how surfactant table is displayed in GUI

DEPENDENCIES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ The following Open Source projects are used in EasyReflectometry (_if there are
55
## Computational libraries
66

77
* [refnx](https://refnx.readthedocs.io/en/latest/): [BSD-3](https://github.com/refnx/refnx/blob/master/LICENSE)
8+
* [refl1d](https://refl1d.readthedocs.io/en/latest/): [Public Domain](https://github.com/reflectometry/refl1d/blob/master/LICENSE.txt)
89
* [bornagain](https://www.bornagainproject.org): [GNU General Public License (GPL)](http://www.gnu.org/licenses/gpl-3.0.html)
910

1011
## Visualization libraries

EasyReflectometryApp/Gui/Pages/Analysis/SideBarAdvanced.qml

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -54,37 +54,14 @@ EaComponents.SideBarColumn {
5454
EaElements.ComboBox {
5555
id: minimizerSelector
5656

57-
width: (EaStyle.Sizes.sideBarContentWidth - minimizerLabel.width * 2 - EaStyle.Sizes.fontPixelSize * 4) / 2
58-
5957
model: ExGlobals.Constants.proxy.minimizer.minimizerNames
6058
currentIndex: ExGlobals.Constants.proxy.minimizer.currentMinimizerIndex
6159

6260
onCurrentIndexChanged: {
6361
ExGlobals.Constants.proxy.minimizer.currentMinimizerIndex = currentIndex
6462
}
6563
}
66-
67-
// Spacer
68-
Item {}
69-
70-
// Method
71-
EaComponents.TableViewLabel{
72-
horizontalAlignment: Text.AlignRight
73-
width: minimizerLabel.width
74-
text: qsTr("Method:")
75-
}
76-
EaElements.ComboBox {
77-
id: methodSelector
78-
79-
width: minimizerSelector.width
80-
model: ExGlobals.Constants.proxy.minimizer.minimizerMethodNames
81-
currentIndex: ExGlobals.Constants.proxy.minimizer.currentMinimizerMethodIndex
82-
onCurrentIndexChanged: {
83-
ExGlobals.Constants.proxy.currentMinimizerMethodIndex = currentIndex
84-
}
85-
}
8664
}
87-
8865
}
8966

9067
/*

EasyReflectometryApp/Logic/DataStore.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from typing import TypeVar
55

66
import numpy as np
7-
from easyscience.Objects.core import ComponentSerializer
8-
from easyscience.Utils.io.dict import DictSerializer
97
from collections.abc import Sequence
108

9+
from easyscience.Objects.core import ComponentSerializer
10+
from easyscience.Utils.io.dict import DictSerializer
1111
from easyreflectometry.experiment.model import Model
1212

1313
T = TypeVar('T')

EasyReflectometryApp/Logic/Proxies/Calculator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from PySide2.QtCore import Signal
55
from PySide2.QtCore import Property
66

7-
from easyscience.Utils.UndoRedo import property_stack_deco
7+
from easyscience.global_object.undo_redo import property_stack_deco
88

99

1010
class CalculatorProxy(QObject):

EasyReflectometryApp/Logic/Proxies/Data.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
import numpy as np
1212
from easyApp.Logic.Utils.Utils import generalizePath
1313

14-
from EasyReflectometryApp.Logic.DataStore import DataSet1D
15-
from EasyReflectometryApp.Logic.DataStore import DataStore
16-
1714
from easyreflectometry.data import load
1815
from easyreflectometry.experiment import PercentageFhwm
1916

17+
from ..DataStore import DataSet1D
18+
from ..DataStore import DataStore
19+
2020
class DataProxy(QObject):
2121

2222
experimentSkippedChanged = Signal()
@@ -98,7 +98,7 @@ def experimentDataAsObj(self):
9898
dictionary['model_index'] = self.parent._model_proxy._model.index(experiment.model)
9999
dictionary['color'] = self.parent._model_proxy._colors[dictionary['model_index']]
100100
dictionary['model_name'] = self.parent._model_proxy._model[dictionary['model_index']].name
101-
dictionary['background'] = self.parent._model_proxy._model[dictionary['model_index']].background.raw_value
101+
dictionary['background'] = self.parent._model_proxy._model[dictionary['model_index']].background.value
102102
experiment_data_as_obj.append(dictionary)
103103
return experiment_data_as_obj
104104

@@ -110,7 +110,7 @@ def setScaling(self, new_scaling: float):
110110
:param new_scaling: New scaling value
111111
"""
112112
model_index = self.parent._model_proxy._model.index(self._data[self.currentDataIndex].model)
113-
if self.parent._model_proxy._model[model_index].scale.raw_value == new_scaling:
113+
if self.parent._model_proxy._model[model_index].scale.value == new_scaling:
114114
return
115115
self.parent._model_proxy._model[model_index].scale = new_scaling
116116
self.parent.layersChanged.emit()
@@ -137,7 +137,7 @@ def setBackground(self, new_background: float):
137137
:param new_background: New background value
138138
"""
139139
model_index = self.parent._model_proxy._model.index(self._data[self.currentDataIndex].model)
140-
if self.parent._model_proxy._model[model_index].background.raw_value == new_background:
140+
if self.parent._model_proxy._model[model_index].background.value == new_background:
141141
return
142142
self.parent._model_proxy._model[model_index].background = new_background
143143
self.parent.layersChanged.emit()
@@ -146,15 +146,15 @@ def setBackground(self, new_background: float):
146146
def currentScaling(self):
147147
try:
148148
model_index = self.parent._model_proxy._model.index(self._data[self.currentDataIndex].model)
149-
return self.parent._model_proxy._model[model_index].scale.raw_value
149+
return self.parent._model_proxy._model[model_index].scale.value
150150
except IndexError:
151151
return 1
152152

153153
@Property(float, notify=experimentChanged)
154154
def currentBackground(self):
155155
try:
156156
model_index = self.parent._model_proxy._model.index(self._data[self.currentDataIndex].model)
157-
return self.parent._model_proxy._model[model_index].background.raw_value
157+
return self.parent._model_proxy._model[model_index].background.value
158158
except IndexError:
159159
return 0
160160

EasyReflectometryApp/Logic/Proxies/Fitter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from PySide2.QtCore import Property
77
from PySide2.QtCore import Slot
88

9-
from easyscience import borg
9+
from easyscience import global_object
1010

1111
from easyreflectometry.fitting import Fitter as easyFitter
1212

@@ -126,7 +126,7 @@ def fit(self):
126126
# if running, stop the thread
127127
if not self.isFitFinished:
128128
self.onStopFit()
129-
borg.stack.endMacro() # need this to close the undo stack properly
129+
global_object.stack.endMacro() # need this to close the undo stack properly
130130
return
131131
# macos is possibly problematic with MT, skip on this platform
132132
# if 'darwin' in sys.platform:
@@ -146,7 +146,7 @@ def nonthreaded_fit(self):
146146
x = [i.x for i in exp_data]
147147
y = [i.y for i in exp_data]
148148
weights = [1 / i.ye for i in exp_data]
149-
method = self.parent.minimizer._current_minimizer_method_name
149+
method = self.parent.minimizer._current_minimizer.method
150150

151151
res = self.eFitter.easy_f.fit(x, y, weights=weights, method=method)
152152
self._setFitResults(res)

EasyReflectometryApp/Logic/Proxies/Material.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from PySide2.QtCore import Property
99
from PySide2.QtCore import Slot
1010

11-
from easyscience import borg
11+
from easyscience import global_object
1212
from easyscience.Utils.io.xml import XMLSerializer
1313

1414
from easyreflectometry.sample import Material
@@ -116,7 +116,7 @@ def addNewMaterials(self):
116116
"""
117117
Add a new material.
118118
"""
119-
borg.stack.enabled = False
119+
global_object.stack.enabled = False
120120
self._materials.append(
121121
Material(
122122
sld=2.074,
@@ -125,7 +125,7 @@ def addNewMaterials(self):
125125
interface=self.parent._interface
126126
)
127127
)
128-
borg.stack.enabled = True
128+
global_object.stack.enabled = True
129129
self.materialsChanged.emit()
130130
self.parent.layersMaterialsChanged.emit()
131131

@@ -134,21 +134,19 @@ def duplicateSelectedMaterials(self):
134134
"""
135135
Duplicate the currently selected material.
136136
"""
137-
# if borg.stack.enabled:
138-
# borg.stack.beginMacro('Loaded default material')
139-
borg.stack.enabled = False
137+
global_object.stack.enabled = False
140138
# This is a fix until deepcopy is worked out
141139
# Manual duplication instead of creating a copy
142140
to_dup = self._materials[self.currentMaterialsIndex]
143141
self._materials.append(
144142
Material(
145-
sld=to_dup.sld.raw_value,
146-
isld=to_dup.isld.raw_value,
143+
sld=to_dup.sld.value,
144+
isld=to_dup.isld.value,
147145
name=to_dup.name,
148146
interface=self.parent._interface
149147
)
150148
)
151-
borg.stack.enabled = True
149+
global_object.stack.enabled = True
152150
self.materialsChanged.emit()
153151
self.parent.layersMaterialsChanged.emit()
154152

@@ -203,9 +201,9 @@ def setCurrentMaterialsSld(self, sld: float):
203201
204202
:param sld: New SLD value
205203
"""
206-
if self._materials[self.currentMaterialsIndex].sld.raw_value == sld:
204+
if self._materials[self.currentMaterialsIndex].sld.value == sld:
207205
return
208-
self._materials[self.currentMaterialsIndex].sld = sld
206+
self._materials[self.currentMaterialsIndex].sld.value = sld
209207
self.materialsChanged.emit()
210208
self.parent.layersChanged.emit()
211209

@@ -216,9 +214,9 @@ def setCurrentMaterialsISld(self, isld: float):
216214
217215
:param isld: New iSLD value
218216
"""
219-
if self._materials[self.currentMaterialsIndex].isld.raw_value == isld:
217+
if self._materials[self.currentMaterialsIndex].isld.value == isld:
220218
return
221-
self._materials[self.currentMaterialsIndex].isld = isld
219+
self._materials[self.currentMaterialsIndex].isld.value = isld
222220
self.materialsChanged.emit()
223221
self.parent.layersChanged.emit()
224222

EasyReflectometryApp/Logic/Proxies/Minimizer.py

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
from PySide2.QtCore import Signal
55
from PySide2.QtCore import Property
66

7-
from easyscience.Utils.UndoRedo import property_stack_deco
8-
7+
from easyscience.global_object.undo_redo import property_stack_deco
8+
from easyscience.fitting import AvailableMinimizers
99

1010
class MinimizerProxy(QObject):
1111

@@ -17,22 +17,22 @@ def __init__(self, parent=None):
1717
super().__init__(parent)
1818
self.parent = parent
1919

20-
self._current_minimizer_method_index = 0
21-
self._current_minimizer_method_name = self.parent._fitter_proxy.eFitter.easy_f.available_methods(
22-
)[0]
20+
self._current_minimizer = AvailableMinimizers.LMFit_leastsq
2321
self.currentMinimizerChanged.connect(self._onCurrentMinimizerChanged)
22+
self._current_minimizer_method_index = self.currentMinimizerIndex
23+
self._current_minimizer_method_name = self._current_minimizer.name
2424

2525
# # #
2626
# Setters and getters
2727
# # #
2828

2929
@Property('QVariant', notify=dummySignal)
3030
def minimizerNames(self):
31-
return self.parent._fitter_proxy.eFitter.easy_f.available_engines
31+
return [minimizer.name for minimizer in AvailableMinimizers]
3232

3333
@Property(int, notify=currentMinimizerChanged)
3434
def currentMinimizerIndex(self):
35-
current_name = self.parent._fitter_proxy.eFitter.easy_f.current_engine.name
35+
current_name = self.parent._fitter_proxy.eFitter.easy_f.minimizer.name
3636
return self.minimizerNames.index(current_name)
3737

3838
@currentMinimizerIndex.setter
@@ -41,7 +41,7 @@ def currentMinimizerIndex(self, new_index: int):
4141
if self.currentMinimizerIndex == new_index:
4242
return
4343
new_name = self.minimizerNames[new_index]
44-
self.parent._fitter_proxy.eFitter.easy_f.switch_engine(new_name)
44+
self.parent._fitter_proxy.eFitter.easy_f.switch_minimizer(new_name)
4545
self.currentMinimizerChanged.emit()
4646

4747
@Property(int, notify=currentMinimizerMethodChanged)
@@ -57,29 +57,14 @@ def currentMinimizerMethodIndex(self, new_index: int):
5757
self._current_minimizer_method_name = self.minimizerMethodNames[new_index]
5858
self.currentMinimizerMethodChanged.emit()
5959

60-
@Property('QVariant', notify=currentMinimizerChanged)
61-
def minimizerMethodNames(self):
62-
current_minimizer = self.minimizerNames[self.currentMinimizerIndex]
63-
tested_methods = {
64-
'lmfit': ['leastsq', 'powell', 'cobyla'],
65-
'bumps': ['newton', 'lm', 'de'],
66-
'DFO_LS': ['leastsq']
67-
}
68-
return tested_methods[current_minimizer]
69-
7060
# # #
7161
# Actions
7262
# # #
7363

7464
def _onCurrentMinimizerChanged(self):
75-
idx = 0
76-
minimizer_name = self.parent._fitter_proxy.eFitter.easy_f.current_engine.name
77-
if minimizer_name == 'lmfit':
78-
idx = self.minimizerMethodNames.index('leastsq')
79-
elif minimizer_name == 'bumps':
80-
idx = self.minimizerMethodNames.index('lm')
81-
if -1 < idx != self._current_minimizer_method_index:
65+
idx = self.currentMinimizerIndex
66+
if idx != self._current_minimizer_method_index:
8267
# Bypass the property as it would be added to the stack.
8368
self._current_minimizer_method_index = idx
84-
self._current_minimizer_method_name = self.minimizerMethodNames[idx]
85-
self.currentMinimizerMethodChanged.emit()
69+
self._current_minimizer_method_name = self._current_minimizer.name
70+
self.currentMinimizerMethodChanged.emit()

0 commit comments

Comments
 (0)