spiceitup 1.3.4__tar.gz → 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {spiceitup-1.3.4/spiceitup.egg-info → spiceitup-2.0.0}/PKG-INFO +7 -10
- {spiceitup-1.3.4 → spiceitup-2.0.0}/README.md +5 -3
- {spiceitup-1.3.4 → spiceitup-2.0.0}/pyproject.toml +0 -0
- {spiceitup-1.3.4 → spiceitup-2.0.0}/setup.py +3 -19
- spiceitup-2.0.0/spiceitup/__main__.py +6 -0
- spiceitup-1.3.4/spiceitup/__main__.py → spiceitup-2.0.0/spiceitup/main_call.py +11 -9
- {spiceitup-1.3.4 → spiceitup-2.0.0}/spiceitup/run.py +43 -33
- {spiceitup-1.3.4 → spiceitup-2.0.0/spiceitup.egg-info}/PKG-INFO +7 -10
- spiceitup-2.0.0/spiceitup.egg-info/SOURCES.txt +12 -0
- spiceitup-2.0.0/spiceitup.egg-info/requires.txt +1 -0
- spiceitup-1.3.4/MANIFEST.in +0 -1
- spiceitup-1.3.4/spiceitup/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/__pycache__/__main__.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/__pycache__/run.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/debug.log +0 -19
- spiceitup-1.3.4/spiceitup/docs/Qt_cursors.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/docs/code_conventions.txt +0 -38
- spiceitup-1.3.4/spiceitup/docs/codimd_backup/2023_06_13.md +0 -112
- spiceitup-1.3.4/spiceitup/docs/codimd_backup/2023_07_07.md +0 -111
- spiceitup-1.3.4/spiceitup/docs/codimd_backup/2023_09_26.md +0 -109
- spiceitup-1.3.4/spiceitup/docs/codimd_backup/2023_11_28.md +0 -114
- spiceitup-1.3.4/spiceitup/docs/codimd_backup/2024_06_26.md +0 -110
- spiceitup-1.3.4/spiceitup/docs/codimd_backup/2024_07_12.md +0 -110
- spiceitup-1.3.4/spiceitup/docs/codimd_backup/2024_08_29_TBC.md +0 -121
- spiceitup-1.3.4/spiceitup/docs/layout.drawio +0 -1
- spiceitup-1.3.4/spiceitup/docs/layout.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/menu_layout.ods +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20240912.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20241002.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20241007.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20241021.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20241102.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20241118.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20241129.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20241209.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20250120.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20250123.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/microsoft365_backup/SPICE_Quicklook_Tasks_20250217.xlsx +0 -0
- spiceitup-1.3.4/spiceitup/docs/plots_layout.ods +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/fit_maps.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/1.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/2.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/3.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/4.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/5.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/6.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/7.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/8.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/9.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/Screenshot 2025-02-13 115310.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/fit_maps.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/footer.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/full.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/full.xcf +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/lambda.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/left_menu.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/3D_1.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/3D_2.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/footer.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/lambda.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/lambda_y.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/left_menu.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/ppt1.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/profile.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/red_bars.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/x.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/x_y.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1/y.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt1.pdf +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/ppt_screenshots.pptx +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/several_x_y.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/x.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/screenshot_2025/y.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/several_x_y.png +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/user_documentation.docx +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/user_documentation.pdf +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/user_manual.pptx +0 -0
- spiceitup-1.3.4/spiceitup/docs/user_manual/~$er_documentation.docx +0 -0
- spiceitup-1.3.4/spiceitup/docs/windows_installation.pdf +0 -0
- spiceitup-1.3.4/spiceitup/images/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/images/icon.png +0 -0
- spiceitup-1.3.4/spiceitup/images/info.png +0 -0
- spiceitup-1.3.4/spiceitup/images/info2.png +0 -0
- spiceitup-1.3.4/spiceitup/images/info_old.png +0 -0
- spiceitup-1.3.4/spiceitup/layout/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/layout/__pycache__/flow_layout.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/layout/flow_layout.py +0 -91
- spiceitup-1.3.4/spiceitup/layout/flow_layout_edited.py +0 -98
- spiceitup-1.3.4/spiceitup/layout/flow_layout_old.py +0 -96
- spiceitup-1.3.4/spiceitup/logs/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/logs/__pycache__/log.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/logs/log.py +0 -41
- spiceitup-1.3.4/spiceitup/logs/show_debug_console.sh +0 -5
- spiceitup-1.3.4/spiceitup/main/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/main/__pycache__/footer.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/main/__pycache__/header.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/main/__pycache__/menu.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/main/__pycache__/menu_bar.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/main/__pycache__/w.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/main/__pycache__/winc.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/main/footer.py +0 -229
- spiceitup-1.3.4/spiceitup/main/header.py +0 -153
- spiceitup-1.3.4/spiceitup/main/menu.py +0 -624
- spiceitup-1.3.4/spiceitup/main/menu_bar.py +0 -183
- spiceitup-1.3.4/spiceitup/main/w.py +0 -28
- spiceitup-1.3.4/spiceitup/main/winc.py +0 -508
- spiceitup-1.3.4/spiceitup/plot/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/plot/__pycache__/plot_line.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/plot/__pycache__/plot_map.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/plot/plot_line.py +0 -182
- spiceitup-1.3.4/spiceitup/plot/plot_map.py +0 -537
- spiceitup-1.3.4/spiceitup/pres_notes.txt +0 -4
- spiceitup-1.3.4/spiceitup/processing/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/processing/__pycache__/dh.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/__pycache__/fit.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/dh.py +0 -376
- spiceitup-1.3.4/spiceitup/processing/fit.py +0 -55
- spiceitup-1.3.4/spiceitup/processing/threads/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/__pycache__/run_thread.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/__pycache__/thread_worker.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/run_thread.py +0 -137
- spiceitup-1.3.4/spiceitup/processing/threads/thread_worker.py +0 -20
- spiceitup-1.3.4/spiceitup/processing/threads/workers/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/workers/__pycache__/compute_average.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/workers/__pycache__/generate_fit_maps.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/workers/__pycache__/load_plot_map.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/workers/__pycache__/make_process_available.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/workers/__pycache__/out_of_sync.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/workers/__pycache__/update_levels.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/workers/__pycache__/update_profile.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/processing/threads/workers/compute_average.py +0 -34
- spiceitup-1.3.4/spiceitup/processing/threads/workers/generate_fit_maps.py +0 -65
- spiceitup-1.3.4/spiceitup/processing/threads/workers/how_to_add_a_worker.txt +0 -26
- spiceitup-1.3.4/spiceitup/processing/threads/workers/load_plot_map.py +0 -21
- spiceitup-1.3.4/spiceitup/processing/threads/workers/make_process_available.py +0 -17
- spiceitup-1.3.4/spiceitup/processing/threads/workers/out_of_sync.py +0 -30
- spiceitup-1.3.4/spiceitup/processing/threads/workers/update_levels.py +0 -37
- spiceitup-1.3.4/spiceitup/processing/threads/workers/update_profile.py +0 -77
- spiceitup-1.3.4/spiceitup/settings/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/settings/__pycache__/const.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/settings/const.py +0 -134
- spiceitup-1.3.4/spiceitup/settings/recent_files.txt +0 -10
- spiceitup-1.3.4/spiceitup/settings/states/.gitkeep +0 -0
- spiceitup-1.3.4/spiceitup/settings/states/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/settings/states/test.json +0 -1
- spiceitup-1.3.4/spiceitup/settings/states/test2.json +0 -1
- spiceitup-1.3.4/spiceitup/settings/states/test3.json +0 -1
- spiceitup-1.3.4/spiceitup/settings/states/weird_state.json +0 -1
- spiceitup-1.3.4/spiceitup/style/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/style/style.css +0 -32
- spiceitup-1.3.4/spiceitup/style/style_debug.css +0 -13
- spiceitup-1.3.4/spiceitup/toolbox/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/toolbox/__pycache__/binning.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/toolbox/__pycache__/clickable_qlabel.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/toolbox/binning.py +0 -60
- spiceitup-1.3.4/spiceitup/toolbox/clickable_qlabel.py +0 -9
- spiceitup-1.3.4/spiceitup/toolbox/filter2D_tests.py +0 -27
- spiceitup-1.3.4/spiceitup/toolbox/icones_claude.png +0 -0
- spiceitup-1.3.4/spiceitup/toolbox/icons.png +0 -0
- spiceitup-1.3.4/spiceitup/toolbox/images/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/toolbox/images/map_x_y.png +0 -0
- spiceitup-1.3.4/spiceitup/toolbox/images/test.jpg +0 -0
- spiceitup-1.3.4/spiceitup/toolbox/level_methods.py +0 -23
- spiceitup-1.3.4/spiceitup/toolbox/multithreading.py +0 -22
- spiceitup-1.3.4/spiceitup/toolbox/pyqtgraph_examples.py +0 -10
- spiceitup-1.3.4/spiceitup/toolbox/pyqtgraph_plot_example.py +0 -104
- spiceitup-1.3.4/spiceitup/toolbox/scipy_fit.py +0 -29
- spiceitup-1.3.4/spiceitup/toolbox/scipy_fit_gaussian.py +0 -39
- spiceitup-1.3.4/spiceitup/toolbox/show_icons.py +0 -29
- spiceitup-1.3.4/spiceitup/toolbox/signal_thread_ex.py +0 -16
- spiceitup-1.3.4/spiceitup/toolbox/small_pyqtgraph.py +0 -91
- spiceitup-1.3.4/spiceitup/toolbox/small_pyqtgraph2.py +0 -94
- spiceitup-1.3.4/spiceitup/toolbox/test.py +0 -63
- spiceitup-1.3.4/spiceitup/utils/__init__.py +0 -0
- spiceitup-1.3.4/spiceitup/utils/__pycache__/internal_utils.cpython-313.pyc +0 -0
- spiceitup-1.3.4/spiceitup/utils/internal_utils.py +0 -188
- spiceitup-1.3.4/spiceitup/utils/special_chars.py +0 -5
- spiceitup-1.3.4/spiceitup.egg-info/SOURCES.txt +0 -179
- spiceitup-1.3.4/spiceitup.egg-info/requires.txt +0 -6
- {spiceitup-1.3.4 → spiceitup-2.0.0}/setup.cfg +0 -0
- {spiceitup-1.3.4 → spiceitup-2.0.0}/spiceitup.egg-info/dependency_links.txt +0 -0
- {spiceitup-1.3.4 → spiceitup-2.0.0}/spiceitup.egg-info/entry_points.txt +0 -0
- {spiceitup-1.3.4 → spiceitup-2.0.0}/spiceitup.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spiceitup
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: Quicklook tool for level 2 SPICE imaging
|
|
5
5
|
Home-page: https://git.ias.u-psud.fr/spice/data_quicklook
|
|
6
6
|
Author: David Picard
|
|
@@ -9,12 +9,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
9
9
|
Classifier: License :: OSI Approved :: MIT License
|
|
10
10
|
Requires-Python: >=3.7
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist: sunraster
|
|
14
|
-
Requires-Dist: pyqtgraph
|
|
15
|
-
Requires-Dist: qdarkgraystyle
|
|
16
|
-
Requires-Dist: scipy
|
|
17
|
-
Requires-Dist: opencv-python-headless
|
|
12
|
+
Requires-Dist: requirements.txt
|
|
18
13
|
Dynamic: author
|
|
19
14
|
Dynamic: author-email
|
|
20
15
|
Dynamic: classifier
|
|
@@ -25,7 +20,7 @@ Dynamic: requires-dist
|
|
|
25
20
|
Dynamic: requires-python
|
|
26
21
|
Dynamic: summary
|
|
27
22
|
|
|
28
|
-
# SPICE data quicklook in
|
|
23
|
+
# SPICE data quicklook in PyQt6 / PyQtGraph
|
|
29
24
|
|
|
30
25
|
This graphical user interface (GUI) allows you to have a quick look in the SPICE data (provide level 2 '.fits' files in input). You will be able to navigate dynamically in the data thanks to sliders which update the maps I(x,y) ; I(lambda,y), the curve I(lambda) and more.
|
|
31
26
|
|
|
@@ -58,7 +53,9 @@ Run with `spiceitup`
|
|
|
58
53
|
`pip install numpy --upgrade`
|
|
59
54
|
|
|
60
55
|
#### B.2) Run the app
|
|
61
|
-
`
|
|
56
|
+
`cd spiceitup`
|
|
57
|
+
`python3 run.py`
|
|
58
|
+
or use an IDE like pycharm (which will install the requirements automatically), open this folder as a project and run `run.py`
|
|
62
59
|
|
|
63
60
|
#### B.3) Troubleshooting
|
|
64
61
|
Error known:
|
|
@@ -68,7 +65,7 @@ In this case, try to do: `sudo apt-get install --reinstall libxcb-xinerama0`
|
|
|
68
65
|
|
|
69
66
|
**spiceitup: command not found**
|
|
70
67
|
In this case check if spiceitup is here: `$(python -m site --user-base)/bin"`
|
|
71
|
-
Then add it to
|
|
68
|
+
Then add it to \$PATH: `export PATH="$PATH:$(python -m site --user-base)/bin"`
|
|
72
69
|
Run again `spiceitup`
|
|
73
70
|
|
|
74
71
|
**No module spiceitup**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPICE data quicklook in
|
|
1
|
+
# SPICE data quicklook in PyQt6 / PyQtGraph
|
|
2
2
|
|
|
3
3
|
This graphical user interface (GUI) allows you to have a quick look in the SPICE data (provide level 2 '.fits' files in input). You will be able to navigate dynamically in the data thanks to sliders which update the maps I(x,y) ; I(lambda,y), the curve I(lambda) and more.
|
|
4
4
|
|
|
@@ -31,7 +31,9 @@ Run with `spiceitup`
|
|
|
31
31
|
`pip install numpy --upgrade`
|
|
32
32
|
|
|
33
33
|
#### B.2) Run the app
|
|
34
|
-
`
|
|
34
|
+
`cd spiceitup`
|
|
35
|
+
`python3 run.py`
|
|
36
|
+
or use an IDE like pycharm (which will install the requirements automatically), open this folder as a project and run `run.py`
|
|
35
37
|
|
|
36
38
|
#### B.3) Troubleshooting
|
|
37
39
|
Error known:
|
|
@@ -41,7 +43,7 @@ In this case, try to do: `sudo apt-get install --reinstall libxcb-xinerama0`
|
|
|
41
43
|
|
|
42
44
|
**spiceitup: command not found**
|
|
43
45
|
In this case check if spiceitup is here: `$(python -m site --user-base)/bin"`
|
|
44
|
-
Then add it to
|
|
46
|
+
Then add it to \$PATH: `export PATH="$PATH:$(python -m site --user-base)/bin"`
|
|
45
47
|
Run again `spiceitup`
|
|
46
48
|
|
|
47
49
|
**No module spiceitup**
|
|
File without changes
|
|
@@ -3,33 +3,17 @@ import os
|
|
|
3
3
|
from importlib_metadata import entry_points
|
|
4
4
|
from setuptools import setup, find_packages
|
|
5
5
|
|
|
6
|
-
def load_requirements(filename):
|
|
7
|
-
with open('/srv/data_quicklook/' + filename, 'r') as f:
|
|
8
|
-
return [
|
|
9
|
-
line.strip()
|
|
10
|
-
for line in f
|
|
11
|
-
if line.strip() and not line.startswith('#')
|
|
12
|
-
]
|
|
13
|
-
|
|
14
6
|
setup(
|
|
15
7
|
name='spiceitup',
|
|
16
|
-
version='
|
|
8
|
+
version='2.0.0',
|
|
17
9
|
description='Quicklook tool for level 2 SPICE imaging',
|
|
18
10
|
long_description=open('README.md').read(),
|
|
19
11
|
long_description_content_type='text/markdown',
|
|
20
12
|
author='David Picard',
|
|
21
13
|
author_email='david.picard@universite-paris-saclay.fr',
|
|
22
14
|
url='https://git.ias.u-psud.fr/spice/data_quicklook',
|
|
23
|
-
packages=
|
|
24
|
-
|
|
25
|
-
install_requires=[
|
|
26
|
-
"PyQt5",
|
|
27
|
-
"sunraster",
|
|
28
|
-
"pyqtgraph",
|
|
29
|
-
"qdarkgraystyle",
|
|
30
|
-
"scipy",
|
|
31
|
-
"opencv-python-headless"
|
|
32
|
-
],
|
|
15
|
+
packages=['spiceitup'],
|
|
16
|
+
install_requires='requirements.txt',
|
|
33
17
|
classifiers=[
|
|
34
18
|
'Programming Language :: Python :: 3',
|
|
35
19
|
'License :: OSI Approved :: MIT License',
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
import warnings
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
from
|
|
6
|
-
from
|
|
7
|
-
from
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
from run import Main
|
|
6
|
+
from settings.const import Const
|
|
7
|
+
from PyQt6.QtGui import *
|
|
8
|
+
from PyQt6.QtWidgets import *
|
|
9
|
+
|
|
8
10
|
|
|
9
11
|
def main():
|
|
12
|
+
project_path = str(Path(__file__).resolve().parent)
|
|
10
13
|
warnings.filterwarnings("ignore")
|
|
11
14
|
# Used to prevent to show All-NaN RuntimeWarning
|
|
12
15
|
# Slices in the data cube can be filled with NaN
|
|
@@ -16,14 +19,13 @@ def main():
|
|
|
16
19
|
app = QApplication(sys.argv)
|
|
17
20
|
else:
|
|
18
21
|
app = QApplication.instance()
|
|
19
|
-
|
|
20
|
-
win = Main()
|
|
22
|
+
win = Main(project_path)
|
|
21
23
|
win.applyStyle(app)
|
|
22
24
|
win.resize(Const.window_width, Const.window_height)
|
|
23
|
-
win.setWindowIcon(QIcon('images/icon.png'))
|
|
25
|
+
win.setWindowIcon(QIcon(win.project_path + '/images/icon.png'))
|
|
24
26
|
win.show()
|
|
25
27
|
|
|
26
28
|
sys.exit(app.exec())
|
|
27
29
|
|
|
28
30
|
if __name__ == '__main__':
|
|
29
|
-
|
|
31
|
+
print('To run the app, run "python run.py"')
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
import os
|
|
1
4
|
import sys
|
|
2
5
|
import warnings
|
|
3
6
|
|
|
4
7
|
from os import path
|
|
5
|
-
from
|
|
6
|
-
|
|
7
|
-
from .
|
|
8
|
-
from .
|
|
9
|
-
from
|
|
10
|
-
from
|
|
11
|
-
from
|
|
12
|
-
from .
|
|
13
|
-
from
|
|
14
|
-
from
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from logs.log import Log
|
|
11
|
+
from plot.plot_map import PlotMap
|
|
12
|
+
from utils.internal_utils import *
|
|
13
|
+
from PyQt6.QtGui import *
|
|
14
|
+
from PyQt6.QtCore import *
|
|
15
|
+
from PyQt6.QtWidgets import *
|
|
16
|
+
from main.footer import Footer
|
|
17
|
+
from main.header import Header
|
|
18
|
+
from main.menu_bar import MenuBar
|
|
15
19
|
import qdarkgraystyle
|
|
16
|
-
from
|
|
17
|
-
from
|
|
20
|
+
from main.menu import Menu
|
|
21
|
+
from main.winc import WindowsContainer
|
|
18
22
|
|
|
19
23
|
class Main(QMainWindow):
|
|
20
24
|
windows = [] # list of Window objects, see Window.py
|
|
@@ -44,12 +48,13 @@ class Main(QMainWindow):
|
|
|
44
48
|
lambda_I_bar_moves = False # avoid recursive behavior when moving I(lambda)'s vertical bar
|
|
45
49
|
updating_levels = [] # contains RunThread instances related to running levels process
|
|
46
50
|
lambda_unit = True # Angstrom otherwise cube index
|
|
47
|
-
qs_fit_label = {}
|
|
51
|
+
qs_fit_label = {} # {'win_key': {'fit_1': QLabel(), 'fit_2': QLabel(), 'fit_3': QLabel()}, ...}
|
|
48
52
|
nb_available_bin = {} # {'win_key': <nb>} in order to hide fit if nb < 4
|
|
49
53
|
python_state = None # when not None, a state is being restored
|
|
50
54
|
|
|
51
|
-
def __init__(self, parent=None):
|
|
55
|
+
def __init__(self, project_path, parent=None):
|
|
52
56
|
super(QMainWindow, self).__init__(parent)
|
|
57
|
+
self.project_path = project_path
|
|
53
58
|
Log.p('------------------------- Application was run')
|
|
54
59
|
self.initialization()
|
|
55
60
|
central_widget = QFrame()
|
|
@@ -64,29 +69,29 @@ class Main(QMainWindow):
|
|
|
64
69
|
self.f_header = Header(self)
|
|
65
70
|
self.m_menu_bar = MenuBar(self)
|
|
66
71
|
|
|
67
|
-
s1 = QSplitter(Qt.Horizontal)
|
|
68
|
-
#
|
|
69
|
-
|
|
72
|
+
s1 = QSplitter(Qt.Orientation.Horizontal)
|
|
73
|
+
#win_label.setStyleSheet("border: 1px solid black;")
|
|
74
|
+
|
|
70
75
|
s1.addWidget(self.f_menu)
|
|
71
76
|
s1.addWidget(self.f_winc)
|
|
72
77
|
s1.setSizes(split_w_pc(0.2))
|
|
73
78
|
|
|
74
|
-
s2 = QSplitter(Qt.Vertical)
|
|
79
|
+
s2 = QSplitter(Qt.Orientation.Vertical)
|
|
75
80
|
s2.addWidget(s1)
|
|
76
81
|
s2.addWidget(self.f_footer)
|
|
77
82
|
s2.setSizes(split_h_pc(0.85))
|
|
78
|
-
|
|
79
|
-
s0 = QSplitter(Qt.Vertical)
|
|
83
|
+
|
|
84
|
+
s0 = QSplitter(Qt.Orientation.Vertical)
|
|
80
85
|
s0.addWidget(self.f_header)
|
|
81
86
|
s0.addWidget(s2)
|
|
82
87
|
s0.setSizes(split_h_pc(0.05))
|
|
83
|
-
|
|
88
|
+
|
|
84
89
|
hbox.addWidget(s0)
|
|
85
90
|
|
|
86
91
|
QApplication.setStyle(QStyleFactory.create('Cleanlooks'))
|
|
87
92
|
|
|
88
|
-
self.setWindowTitle('SPICE-IT Quicklook')
|
|
89
|
-
|
|
93
|
+
self.setWindowTitle('SPICE-IT-UP Quicklook')
|
|
94
|
+
|
|
90
95
|
"""def __del__(self):
|
|
91
96
|
for th in self.th:
|
|
92
97
|
th.quit()"""
|
|
@@ -131,7 +136,7 @@ class Main(QMainWindow):
|
|
|
131
136
|
for plot_key, plot in plot_bloc.items():
|
|
132
137
|
plots.append(plot)
|
|
133
138
|
return plots # list of PlotMap and/or PlotLine
|
|
134
|
-
|
|
139
|
+
|
|
135
140
|
def get_plots(self, given_plot_key):
|
|
136
141
|
plots = []
|
|
137
142
|
for win_key, plot_bloc in self.global_plots.items():
|
|
@@ -139,7 +144,7 @@ class Main(QMainWindow):
|
|
|
139
144
|
if given_plot_key == plot_key:
|
|
140
145
|
plots.append(plot)
|
|
141
146
|
return plots # list of PlotMap or PlotLine
|
|
142
|
-
|
|
147
|
+
|
|
143
148
|
def get_plot_bloc(self, given_plot):
|
|
144
149
|
"""plot_bloc is the parent element from a specific plot, it is a dict
|
|
145
150
|
which is a value-element of global_plots and containing all the PlotMaps
|
|
@@ -156,16 +161,16 @@ class Main(QMainWindow):
|
|
|
156
161
|
for key in keys:
|
|
157
162
|
plot_bloc[key].main_plot_item.setXLink(None)
|
|
158
163
|
plot_bloc[key].main_plot_item.setYLink(None)
|
|
159
|
-
|
|
164
|
+
|
|
160
165
|
def link_axes(self, between_windows=False):
|
|
161
166
|
previous_lambda_y = None
|
|
162
167
|
previous_x_y = None
|
|
163
|
-
|
|
168
|
+
|
|
164
169
|
self.unlink_axes()
|
|
165
170
|
for win_key, plot_bloc in self.global_plots.items():
|
|
166
171
|
# Zoom / Pane link
|
|
167
|
-
#
|
|
168
|
-
#
|
|
172
|
+
#plot_bloc['x_y'].main_plot_item.setYLink(plot_bloc['lambda_y'].main_plot_item)
|
|
173
|
+
#generates zoom issues
|
|
169
174
|
if between_windows:
|
|
170
175
|
if previous_lambda_y is not None: # not the first window
|
|
171
176
|
PlotMap.link_maps(previous_x_y, plot_bloc['x_y'])
|
|
@@ -198,22 +203,27 @@ class Main(QMainWindow):
|
|
|
198
203
|
elif plot_key == 'lambda_y':
|
|
199
204
|
factor = self.f_menu.s_lambda_rescaling.value()
|
|
200
205
|
return float(factor)
|
|
201
|
-
|
|
206
|
+
|
|
202
207
|
def initialization(self):
|
|
203
208
|
if not path.isdir(Const.default_data_path):
|
|
204
209
|
Log.p(Const.default_data_path + ' does not exist.', 'warn')
|
|
205
210
|
Const.default_data_path = ''
|
|
206
|
-
|
|
211
|
+
|
|
207
212
|
def applyStyle(self, app):
|
|
208
213
|
css_content = self.read_css()
|
|
209
214
|
if Const.debug_mode:
|
|
210
215
|
css_content += self.read_css(True)
|
|
211
216
|
qdgs_css = qdarkgraystyle.load_stylesheet().replace('opacity: 100;', '') # Fix tooltip Windows issue
|
|
212
217
|
app.setStyleSheet(qdgs_css + css_content)
|
|
213
|
-
|
|
218
|
+
#app.setStyleSheet(css_content)
|
|
219
|
+
|
|
214
220
|
def read_css(self, debug=False):
|
|
215
221
|
debug_str = '_debug' if debug else ''
|
|
216
|
-
file = open(
|
|
222
|
+
file = open(self.project_path + '/style/style' + debug_str + '.css', mode='r')
|
|
217
223
|
css_content = file.read()
|
|
218
224
|
file.close()
|
|
219
225
|
return css_content
|
|
226
|
+
|
|
227
|
+
if __name__ == '__main__':
|
|
228
|
+
from main_call import main
|
|
229
|
+
main()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spiceitup
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: Quicklook tool for level 2 SPICE imaging
|
|
5
5
|
Home-page: https://git.ias.u-psud.fr/spice/data_quicklook
|
|
6
6
|
Author: David Picard
|
|
@@ -9,12 +9,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
9
9
|
Classifier: License :: OSI Approved :: MIT License
|
|
10
10
|
Requires-Python: >=3.7
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist: sunraster
|
|
14
|
-
Requires-Dist: pyqtgraph
|
|
15
|
-
Requires-Dist: qdarkgraystyle
|
|
16
|
-
Requires-Dist: scipy
|
|
17
|
-
Requires-Dist: opencv-python-headless
|
|
12
|
+
Requires-Dist: requirements.txt
|
|
18
13
|
Dynamic: author
|
|
19
14
|
Dynamic: author-email
|
|
20
15
|
Dynamic: classifier
|
|
@@ -25,7 +20,7 @@ Dynamic: requires-dist
|
|
|
25
20
|
Dynamic: requires-python
|
|
26
21
|
Dynamic: summary
|
|
27
22
|
|
|
28
|
-
# SPICE data quicklook in
|
|
23
|
+
# SPICE data quicklook in PyQt6 / PyQtGraph
|
|
29
24
|
|
|
30
25
|
This graphical user interface (GUI) allows you to have a quick look in the SPICE data (provide level 2 '.fits' files in input). You will be able to navigate dynamically in the data thanks to sliders which update the maps I(x,y) ; I(lambda,y), the curve I(lambda) and more.
|
|
31
26
|
|
|
@@ -58,7 +53,9 @@ Run with `spiceitup`
|
|
|
58
53
|
`pip install numpy --upgrade`
|
|
59
54
|
|
|
60
55
|
#### B.2) Run the app
|
|
61
|
-
`
|
|
56
|
+
`cd spiceitup`
|
|
57
|
+
`python3 run.py`
|
|
58
|
+
or use an IDE like pycharm (which will install the requirements automatically), open this folder as a project and run `run.py`
|
|
62
59
|
|
|
63
60
|
#### B.3) Troubleshooting
|
|
64
61
|
Error known:
|
|
@@ -68,7 +65,7 @@ In this case, try to do: `sudo apt-get install --reinstall libxcb-xinerama0`
|
|
|
68
65
|
|
|
69
66
|
**spiceitup: command not found**
|
|
70
67
|
In this case check if spiceitup is here: `$(python -m site --user-base)/bin"`
|
|
71
|
-
Then add it to
|
|
68
|
+
Then add it to \$PATH: `export PATH="$PATH:$(python -m site --user-base)/bin"`
|
|
72
69
|
Run again `spiceitup`
|
|
73
70
|
|
|
74
71
|
**No module spiceitup**
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
setup.py
|
|
4
|
+
spiceitup/__main__.py
|
|
5
|
+
spiceitup/main_call.py
|
|
6
|
+
spiceitup/run.py
|
|
7
|
+
spiceitup.egg-info/PKG-INFO
|
|
8
|
+
spiceitup.egg-info/SOURCES.txt
|
|
9
|
+
spiceitup.egg-info/dependency_links.txt
|
|
10
|
+
spiceitup.egg-info/entry_points.txt
|
|
11
|
+
spiceitup.egg-info/requires.txt
|
|
12
|
+
spiceitup.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
requirements.txt
|
spiceitup-1.3.4/MANIFEST.in
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
recursive-include spiceitup *.*
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
2025-11-02T16:44:48 INFO: ------------------------- Application was run
|
|
2
|
-
2025-11-02T16:44:48 INFO: /home/dpicard/Documents/fits/ does not exist.
|
|
3
|
-
2025-11-02T16:44:48 INFO: warn
|
|
4
|
-
2025-11-02T16:45:12 INFO: ------------------------- Application was run
|
|
5
|
-
2025-11-02T16:45:12 INFO: /home/dpicard/Documents/fits/ does not exist.
|
|
6
|
-
2025-11-02T16:45:12 INFO: warn
|
|
7
|
-
2025-11-02T16:45:54 INFO: ------------------------- Application was run
|
|
8
|
-
2025-11-02T16:45:54 INFO: /home/dpicard/Documents/fits/ does not exist.
|
|
9
|
-
2025-11-02T16:45:54 INFO: warn
|
|
10
|
-
2025-11-02T16:47:27 INFO: ------------------------- Application was run
|
|
11
|
-
2025-11-02T16:47:27 INFO: /home/dpicard/Documents/fits/ does not exist.
|
|
12
|
-
2025-11-02T16:47:27 INFO: warn
|
|
13
|
-
2025-11-02T16:48:09 INFO: Interrupting OutOfSync (t = -2)...
|
|
14
|
-
2025-11-02T16:51:15 INFO: Interrupting OutOfSync (t = -2)...
|
|
15
|
-
2025-11-02T16:51:23 INFO: Interrupting OutOfSync (t = -2)...
|
|
16
|
-
2025-11-02T16:51:36 INFO: Interrupting OutOfSync (t = -2)...
|
|
17
|
-
2025-11-02T16:51:45 INFO: Interrupting OutOfSync (t = -2)...
|
|
18
|
-
2025-11-10T13:10:16 INFO: ------------------------- Application was run
|
|
19
|
-
2025-11-10T13:10:29 INFO: Interrupting OutOfSync (t = -2)...
|
|
Binary file
|
|
File without changes
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
Variables: each variable which begins by a few letters and _ is a Qt object:
|
|
2
|
-
> w only is a Window object
|
|
3
|
-
> w_something for QWidget
|
|
4
|
-
> a_something for actions (like a process on button click)
|
|
5
|
-
> m_something for QMenu
|
|
6
|
-
> ma_something for a menu action QAction
|
|
7
|
-
> tb_something for a QToolBar
|
|
8
|
-
> f_something for QFrame
|
|
9
|
-
> q_something for any other Qt object like QFile, QLabel, ...
|
|
10
|
-
> k_something is a QCheckbox
|
|
11
|
-
> l_something, layouts (vbox, hbox, grid...)
|
|
12
|
-
> r_something is a QRadioButton
|
|
13
|
-
> wp_something is a PyQtGraph Widget (pg.GraphicsLayoutWidget)
|
|
14
|
-
> iv_something is an ImageView
|
|
15
|
-
> s_something is a QSlider bar
|
|
16
|
-
> c_something is a QComboBox (like html <select> lists)
|
|
17
|
-
> b_something is a QPushButton
|
|
18
|
-
> i_something is a QLineEdit (like html <input type="text" />)
|
|
19
|
-
> g_something is a QGroupBox
|
|
20
|
-
> Thw_something is a custom worker thread
|
|
21
|
-
> img_something is a QLabel containing a QPixmap (for png images)
|
|
22
|
-
> pb_something is a QProgressBar
|
|
23
|
-
> pf_something is a progress function triggered on thread signal, see run_thread.py
|
|
24
|
-
> rt_something is a RunThread object (not needed except if a progress bar must be manually updated)
|
|
25
|
-
|
|
26
|
-
> *s_something is a list (or dict) of * elements
|
|
27
|
-
with * one related letter of the QObjects previously defined
|
|
28
|
-
|
|
29
|
-
> self.something: self is only used when something is needed through the whole class, in
|
|
30
|
-
this case we "declare" it at the top of the class by
|
|
31
|
-
doing something = None (or '', [], {}, ... according to the type)
|
|
32
|
-
|
|
33
|
-
Print / logs:
|
|
34
|
-
from logs.log import Log
|
|
35
|
-
Use Log.p('Your message', msg_type)
|
|
36
|
-
with msg_type: info, warn or error (optional, default is info)
|
|
37
|
-
It will print into debug.log (actually see log_file defined in settings.py)
|
|
38
|
-
You can watch it in real time: watch -n 0.5 tail -n 110 debug.log
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tags: SPICE, Qt, Quicklook
|
|
3
|
-
---
|
|
4
|
-
# 2023-06-13 Quicklook Qt meeting
|
|
5
|
-
Participants: **David, Frédéric, Éric, Alfred**
|
|
6
|
-
* [Next notes](https://codimd.math.cnrs.fr/l4T7u6INTHC3H7CXNMvuaw?both#)
|
|
7
|
-
|
|
8
|
-
## Questions
|
|
9
|
-
(You can answer here :grinning:)
|
|
10
|
-
- Do we want to suggest a **global export option**? This way you could choose which windows, plots, parameters... you want to export in one main popup. :arrow_right: ...
|
|
11
|
-
* question was about exporting all maps.
|
|
12
|
-
* Export button next to graph: call Pyqtgraph dialog (same right click) instead of direct output to PNG file with no option
|
|
13
|
-
- Value scaling
|
|
14
|
-
* Changing percentiles
|
|
15
|
-
- To discuss: **loading** heavy data **files** can show **"Force quit"** for a little while (not critical but not clean either). Data loading were already moved to threads but we can't move "display-related" processes to threads (it must be done in the main process, otherwise blackout display issues come up).
|
|
16
|
-
Pyqtgraph needs 100 ms to display a plot (even empty) which leads to e.g. for 8 windows: $0.100 \times 8 \times 6=4.8s$ :arrow_right: ...
|
|
17
|
-
- Are plots **$I(x)$ and $I(y)$** useful to show somewhere? :arrow_right: ...
|
|
18
|
-
- Could be a choice in the current I(λ) plot
|
|
19
|
-
- Should fit maps be $(t,y)$ for sit and stare? :arrow_right: ...
|
|
20
|
-
- Yes, maps are still 2D (t, y).
|
|
21
|
-
- Intensity **level values and pourcentiles** are still "disconnected", is the current behavior good enough? :arrow_right: ...
|
|
22
|
-
- Do show **"Reset zoom"** buttons for each plot or is a global button enough? :arrow_right: ...
|
|
23
|
-
- No need
|
|
24
|
-
- Is it useful to suggest to **hide processes in the footer** once they are done? :arrow_right: ...
|
|
25
|
-
- Better order them by finished status before ordering them by date
|
|
26
|
-
- Do people see all the buttons in the top menu bar? Claude's system seems to hide some of them. :arrow_right: ...
|
|
27
|
-
- Yes
|
|
28
|
-
- Linking $I(x,y)$ maps' **zoom/pane** with "fit maps" make the slider movements really slow, can we let these disconnected? :arrow_right: ...
|
|
29
|
-
- Not so bad?
|
|
30
|
-
- Next **main feature** to focus on? :arrow_right: ...
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
## Ready to be checked :checkered_flag:
|
|
34
|
-
|
|
35
|
-
- By double-cliking you can aim a $(x,y)$ or $(\lambda,y)$ position in one shot instead of moving horizontal and vertical bars
|
|
36
|
-
- OK
|
|
37
|
-
- Show thread progresses in the footer
|
|
38
|
-
- OK
|
|
39
|
-
- When moving a slider, update everything in real time (i.e. other related sliders, $I(\lambda)$ plot, ...)
|
|
40
|
-
- OK
|
|
41
|
-
- Show mouse coordinates on mouse hover (+ $I$ value)
|
|
42
|
-
- OK
|
|
43
|
-
- Add a button to reset zoom (triggers "View All")
|
|
44
|
-
- OK
|
|
45
|
-
- Fix level option especially for $log$ and $sqrt$ methods (it crashed) and prevent user to click on "Apply" twice
|
|
46
|
-
- OK
|
|
47
|
-
- Automatically reset zoom (View All) on $I(\lambda)$ each time it must be updated
|
|
48
|
-
- OK
|
|
49
|
-
- Find a way to exclude dumbbells in fit maps generation (even better: the user can now select a small region of interest thanks to the grey bars in the $I(x,y)$ map before generating it)
|
|
50
|
-
- Bars are not much visible
|
|
51
|
-
- No need to redisplay the message each time
|
|
52
|
-
- Fix: reload several data files crashed the app
|
|
53
|
-
- Working up to now
|
|
54
|
-
- Abort processes when user loads another data file (--> interrupted progress bar in the footer changes to red)
|
|
55
|
-
- OK
|
|
56
|
-
- Show more study and window details (slit, ...)
|
|
57
|
-
- Change to show all as a list
|
|
58
|
-
- Fix: moving the $y$ horizontal bar worked for the 1st window but didn't correctly for the other ones
|
|
59
|
-
- OK
|
|
60
|
-
- Add an offset $+ K$ in the gaussian fit
|
|
61
|
-
- OK
|
|
62
|
-
- But the NaNs seem to be considered as 0 for the fit and 1D fit plot, they should remain NaN. Also for the 2D map fit.
|
|
63
|
-
- Review the layout of the local level option in order to put side by side a maximum of window blocs, e.g. to view all the $I(x,y)$ maps
|
|
64
|
-
- OK
|
|
65
|
-
- Remove the $y$ slider, the $y$ value is only handled by the horizontal bars
|
|
66
|
-
- OK
|
|
67
|
-
- Show number of current running threads
|
|
68
|
-
- OK
|
|
69
|
-
- Hide ROI and Menu buttons next to maps
|
|
70
|
-
- OK
|
|
71
|
-
- Clarify $x, y, \lambda, t$ next to NAXIS values
|
|
72
|
-
- OK
|
|
73
|
-
- Do not show NaN warnings, no reason to worry, they are in the data
|
|
74
|
-
- OK
|
|
75
|
-
- Sometimes by default, the right part of the $I(x,y)$ map was not visible, "View All" is triggered after loading the maps to fix it
|
|
76
|
-
- OK
|
|
77
|
-
- Moving hardly the 3rd dimension slider of the second map shouldn't freeze the app anymore
|
|
78
|
-
- OK
|
|
79
|
-
- Fix: the fit maps titles were wrong after moving the mouse over one of it
|
|
80
|
-
- OK
|
|
81
|
-
- Add pop-ups to explain what the user can do with fit maps
|
|
82
|
-
- OK
|
|
83
|
-
|
|
84
|
-
## To do next (features)
|
|
85
|
-
- **Keep zoom and pane state after updating the maps** (checkbox, apply average, levels, ...)
|
|
86
|
-
:point_right: *This is solved by restoring ViewBox's state when maps are not "zoom-linked", find a way to make it work with "zoom-linked" maps.*
|
|
87
|
-
- **Global export option**:question:
|
|
88
|
-
- Not needed
|
|
89
|
-
- **Set relevant names in image outputs** (instead of output.png)
|
|
90
|
-
- Yes
|
|
91
|
-
- **Adapt app to Full Spectrum input files**
|
|
92
|
-
- **Show real units instead of cube indexes** (Å, ", ...)
|
|
93
|
-
- There could be a choice
|
|
94
|
-
- **Remove triangles in level histograms**
|
|
95
|
-
- Can be removed
|
|
96
|
-
- **Show a relevant message if the user doesn't load a level 2 fits file**
|
|
97
|
-
- Yes
|
|
98
|
-
- *Cf. Trello board Data quicklook*
|
|
99
|
-
|
|
100
|
-
## To do next (optimization)
|
|
101
|
-
- **Speed up data file loading**
|
|
102
|
-
:point_right: *Still show "Force quit" (for a little while) if there are a lot of windows to display but processings that are updating the display can't be moved to threads in background :warning:*
|
|
103
|
-
- **Double-check memory leak when generating window blocs**
|
|
104
|
-
- Now crashes after loading a few tens of files (in a row; only the last file is open), this is better than before, but should still be improved.
|
|
105
|
-
- **Is it not safe to use `curve_fit` in a thread?**
|
|
106
|
-
- Seems to work.
|
|
107
|
-
- **Secure menu, do not allow to change things while files are loading**
|
|
108
|
-
- **Put "Refresh plots" in a thread to avoid freezes**
|
|
109
|
-
- *Cf. Trello board Data quicklook*
|
|
110
|
-
|
|
111
|
-
## Ideas
|
|
112
|
-
*Cf. Trello board Data quicklook*
|