arpes-viewer 1.2.1__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.
- arpes_viewer-1.2.1/LICENSE.md +75 -0
- arpes_viewer-1.2.1/NOTICE +43 -0
- arpes_viewer-1.2.1/PKG-INFO +246 -0
- arpes_viewer-1.2.1/README.md +218 -0
- arpes_viewer-1.2.1/arpes_viewer/__init__.py +11 -0
- arpes_viewer-1.2.1/arpes_viewer/__main__.py +6 -0
- arpes_viewer-1.2.1/arpes_viewer/app.py +2867 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/README.md +405 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/__init__.py +13 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/__init__.py +6 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/alba.py +212 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/ape.py +57 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/bessy.py +87 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/cassiopee.py +1196 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/cassiopee_spin.py +541 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/diamond.py +280 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/maestro.py +1032 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/maxiv.py +33 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/sgm4.py +300 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/solaris.py +60 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/beamlines/soleil.py +79 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/cubecache.py +273 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/formats/__init__.py +6 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/formats/nexus_arpes.py +605 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/formats/ses.py +790 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/native.py +87 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/nxs_file.py +2096 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/registry.py +342 -0
- arpes_viewer-1.2.1/arpes_viewer/loader/session.py +531 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/README.md +131 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/__init__.py +16 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/__init__.py +8 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/bandfiles.py +1286 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/bands.py +615 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/bz2d.py +282 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/bz3d.py +557 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/cleavage.py +207 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/compare.py +279 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/fermisurface.py +254 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/highsym.py +370 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/last_crystal.py +83 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/lattice.py +379 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/moire.py +192 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/planecut.py +151 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/spacegroups.py +744 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/structure.py +578 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/crystal/tightbinding.py +327 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/momentum/README.md +97 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/momentum/__init__.py +6 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/momentum/cutk.py +292 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/momentum/kspace.py +550 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/momentum/kzconv.py +440 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/momentum/kzmap.py +343 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/momentum/rebin.py +129 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/output/README.md +94 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/output/__init__.py +6 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/output/colormaps.py +68 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/output/explog.py +826 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/output/export.py +486 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/output/figfile.py +429 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/output/figure.py +1089 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/output/igor.py +378 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/README.md +125 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/__init__.py +8 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/analysis.py +199 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/combine.py +276 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/cutops.py +508 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/dataops.py +262 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/degrid.py +626 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/detector.py +371 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/process.py +924 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/repeats.py +343 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/ridge.py +167 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/stackcuts.py +120 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/processing/volume.py +793 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/runtime/__init__.py +6 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/runtime/console.py +89 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/runtime/errorlog.py +183 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/runtime/memory.py +151 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/runtime/remembered.py +72 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/runtime/system.py +100 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/README.md +184 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/__init__.py +7 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/corelevel.py +1175 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/corelevel_table.py +207 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/curves.py +254 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/dispersion.py +478 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/fermi.py +495 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/peaks.py +683 -0
- arpes_viewer-1.2.1/arpes_viewer/tools/spectra/spin.py +380 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/README.md +229 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/__init__.py +12 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/__init__.py +8 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/crashguard.py +68 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/enterkeys.py +80 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/gcguard.py +79 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/jobs.py +426 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/notify.py +23 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/platform_style.py +55 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/remember.py +143 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/screen.py +161 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/common/stepper.py +310 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/launcher/__init__.py +6 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/launcher/list_actions.py +162 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/launcher/loader_dialog.py +307 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/launcher/main_window.py +665 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/__init__.py +8 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/bandfinder.py +216 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/bands.py +2377 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/corelevel.py +1623 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/crystal.py +1428 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/cutops.py +543 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/degrid.py +530 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/detector.py +410 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/explog.py +732 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/figure.py +4275 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/fit.py +1637 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/fsview.py +469 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/kzconv.py +851 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/kzmap.py +365 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/process.py +1537 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/repeats.py +392 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/ridge.py +354 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/stackcuts.py +413 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/tightbinding.py +733 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/panels/volume.py +2321 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/viewers/__init__.py +7 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/viewers/cursorlink.py +226 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/viewers/curves.py +1407 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/viewers/functions_menu.py +139 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/viewers/plot_tools.py +762 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/viewers/widgets.py +4967 -0
- arpes_viewer-1.2.1/arpes_viewer/ui/viewers/windows.py +6711 -0
- arpes_viewer-1.2.1/arpes_viewer/version.py +19 -0
- arpes_viewer-1.2.1/arpes_viewer.egg-info/PKG-INFO +246 -0
- arpes_viewer-1.2.1/arpes_viewer.egg-info/SOURCES.txt +145 -0
- arpes_viewer-1.2.1/arpes_viewer.egg-info/dependency_links.txt +1 -0
- arpes_viewer-1.2.1/arpes_viewer.egg-info/entry_points.txt +2 -0
- arpes_viewer-1.2.1/arpes_viewer.egg-info/requires.txt +5 -0
- arpes_viewer-1.2.1/arpes_viewer.egg-info/top_level.txt +1 -0
- arpes_viewer-1.2.1/pyproject.toml +47 -0
- arpes_viewer-1.2.1/setup.cfg +4 -0
- arpes_viewer-1.2.1/test/test_imports.py +231 -0
- arpes_viewer-1.2.1/test/test_mac_launcher.py +55 -0
- arpes_viewer-1.2.1/test/test_pypi_readme.py +16 -0
- arpes_viewer-1.2.1/test/test_version_consistency.py +36 -0
- arpes_viewer-1.2.1/test/test_windows_launch.py +111 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
Required Notice: Copyright (c) 2026 Ding Pei (https://github.com/DingPei1995/ARPES-data-browser)
|
|
2
|
+
|
|
3
|
+
# PolyForm Noncommercial License 1.0.0
|
|
4
|
+
|
|
5
|
+
<https://polyformproject.org/licenses/noncommercial/1.0.0>
|
|
6
|
+
|
|
7
|
+
## Acceptance
|
|
8
|
+
|
|
9
|
+
In order to get any license under these terms, you must agree to them as both strict obligations and conditions to all your licenses.
|
|
10
|
+
|
|
11
|
+
## Copyright License
|
|
12
|
+
|
|
13
|
+
The licensor grants you a copyright license for the software to do everything you might do with the software that would otherwise infringe the licensor's copyright in it for any permitted purpose. However, you may only distribute the software according to [Distribution License](#distribution-license) and make changes or new works based on the software according to [Changes and New Works License](#changes-and-new-works-license).
|
|
14
|
+
|
|
15
|
+
## Distribution License
|
|
16
|
+
|
|
17
|
+
The licensor grants you an additional copyright license to distribute copies of the software. Your license to distribute covers distributing the software with changes and new works permitted by [Changes and New Works License](#changes-and-new-works-license).
|
|
18
|
+
|
|
19
|
+
## Notices
|
|
20
|
+
|
|
21
|
+
You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms or the URL for them above, as well as copies of any plain-text lines beginning with `Required Notice:` that the licensor provided with the software. For example:
|
|
22
|
+
|
|
23
|
+
> Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
|
|
24
|
+
|
|
25
|
+
## Changes and New Works License
|
|
26
|
+
|
|
27
|
+
The licensor grants you an additional copyright license to make changes and new works based on the software for any permitted purpose.
|
|
28
|
+
|
|
29
|
+
## Patent License
|
|
30
|
+
|
|
31
|
+
The licensor grants you a patent license for the software that covers patent claims the licensor can license, or becomes able to license, that you would infringe by using the software.
|
|
32
|
+
|
|
33
|
+
## Noncommercial Purposes
|
|
34
|
+
|
|
35
|
+
Any noncommercial purpose is a permitted purpose.
|
|
36
|
+
|
|
37
|
+
## Personal Uses
|
|
38
|
+
|
|
39
|
+
Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, is use for a permitted purpose.
|
|
40
|
+
|
|
41
|
+
## Noncommercial Organizations
|
|
42
|
+
|
|
43
|
+
Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution is use for a permitted purpose regardless of the source of funding or obligations resulting from the funding.
|
|
44
|
+
|
|
45
|
+
## Fair Use
|
|
46
|
+
|
|
47
|
+
You may have "fair use" rights for the software under the law. These terms do not limit them.
|
|
48
|
+
|
|
49
|
+
## No Other Rights
|
|
50
|
+
|
|
51
|
+
These terms do not allow you to sublicense or transfer any of your licenses to anyone else, or prevent the licensor from granting licenses to anyone else. These terms do not imply any other licenses.
|
|
52
|
+
|
|
53
|
+
## Patent Defense
|
|
54
|
+
|
|
55
|
+
If you make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
|
|
56
|
+
|
|
57
|
+
## Violations
|
|
58
|
+
|
|
59
|
+
The first time you are notified in writing that you have violated any of these terms, or done anything with the software not covered by your licenses, your licenses can nonetheless continue if you come into full compliance with these terms, and take practical steps to correct past violations, within 32 days of receiving notice. Otherwise, all your licenses end immediately.
|
|
60
|
+
|
|
61
|
+
## No Liability
|
|
62
|
+
|
|
63
|
+
***As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.***
|
|
64
|
+
|
|
65
|
+
## Definitions
|
|
66
|
+
|
|
67
|
+
The **licensor** is the individual or entity offering these terms, and the **software** is the software the licensor makes available under these terms.
|
|
68
|
+
|
|
69
|
+
**You** refers to the individual or entity agreeing to these terms.
|
|
70
|
+
|
|
71
|
+
**Your company** is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. **Control** means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
|
|
72
|
+
|
|
73
|
+
**Your licenses** are all the licenses granted to you for the software under these terms.
|
|
74
|
+
|
|
75
|
+
**Use** means anything you do with the software requiring one of your licenses.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
ARPES viewer
|
|
2
|
+
Copyright (c) 2026 Ding Pei
|
|
3
|
+
https://github.com/DingPei1995/ARPES-data-browser
|
|
4
|
+
|
|
5
|
+
Licensed under the PolyForm Noncommercial License 1.0.0 (see LICENSE.md):
|
|
6
|
+
free for any noncommercial purpose -- research, teaching, personal use --
|
|
7
|
+
and not for commercial use.
|
|
8
|
+
|
|
9
|
+
Authorship
|
|
10
|
+
----------
|
|
11
|
+
ARPES viewer is the work of Ding Pei. It began as Ding Pei's own earlier
|
|
12
|
+
code for ARPES data and was developed from it independently: it is not a
|
|
13
|
+
work made for hire, and no institution funded or commissioned it.
|
|
14
|
+
|
|
15
|
+
The requirements, the design decisions and their trade-offs, the choice of
|
|
16
|
+
what to build and what not to, the physics, the testing on real
|
|
17
|
+
experimental data and the feedback from it, and the review and acceptance
|
|
18
|
+
of every change are Ding Pei's. The real-data tests drew on the
|
|
19
|
+
measurements and calculations of these papers:
|
|
20
|
+
- Phys. Rev. B 103, 245121 (2021), https://doi.org/10.1103/PhysRevB.103.245121
|
|
21
|
+
- Phys. Rev. B 95, 125126 (2017), https://doi.org/10.1103/PhysRevB.95.125126
|
|
22
|
+
|
|
23
|
+
The implementation was carried out with the assistance of Claude, an AI
|
|
24
|
+
model by Anthropic, as a coding assistant working under Ding Pei's
|
|
25
|
+
direction; the commits it helped write name it as a
|
|
26
|
+
co-author ("Co-Authored-By: Claude").
|
|
27
|
+
|
|
28
|
+
Third-party data
|
|
29
|
+
----------------
|
|
30
|
+
The X-ray line energies in the synthetic demo data, and the core-level
|
|
31
|
+
binding energies of the core-level check, are standard tabulated values
|
|
32
|
+
(the X-ray Data Booklet, Lawrence Berkeley National Laboratory; core levels
|
|
33
|
+
from its Table 1-1, J. A. Bearden & A. F. Burr).
|
|
34
|
+
|
|
35
|
+
The space-group tables (arpes_viewer/tools/crystal/spacegroups.py) were
|
|
36
|
+
generated once from the database of spglib (devtools/gen_spacegroups.py),
|
|
37
|
+
Copyright (c) Atsushi Togo, distributed under the BSD 3-Clause licence.
|
|
38
|
+
|
|
39
|
+
The colour tables (arpes_viewer/tools/output/colormaps.py) were converted
|
|
40
|
+
from a laboratory file, Colormap.mat, together with re-creations of
|
|
41
|
+
MATLAB's gray, jet, hsv, hot and copper (devtools/gen_colormaps.py). Several
|
|
42
|
+
of them carry the names of Igor Pro's colour tables; where they reproduce
|
|
43
|
+
those, they remain WaveMetrics' and are not covered by the licence above.
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: arpes-viewer
|
|
3
|
+
Version: 1.2.1
|
|
4
|
+
Summary: Browse, convert, analyse and compare ARPES data with calculations, and lay the results out as publication figures.
|
|
5
|
+
Author: Ding Pei
|
|
6
|
+
License-Expression: PolyForm-Noncommercial-1.0.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/DingPei1995/ARPES-data-browser
|
|
8
|
+
Project-URL: Documentation, https://github.com/DingPei1995/ARPES-data-browser/blob/main/docs/USER_GUIDE_en.md
|
|
9
|
+
Project-URL: Issues, https://github.com/DingPei1995/ARPES-data-browser/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/DingPei1995/ARPES-data-browser/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: ARPES,photoemission,synchrotron,band structure,Fermi surface
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
18
|
+
Requires-Python: >=3.9
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE.md
|
|
21
|
+
License-File: NOTICE
|
|
22
|
+
Requires-Dist: PyQt5>=5.12
|
|
23
|
+
Requires-Dist: pyqtgraph>=0.12
|
|
24
|
+
Requires-Dist: numpy>=1.20
|
|
25
|
+
Requires-Dist: scipy>=1.6
|
|
26
|
+
Requires-Dist: h5py>=3.0
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# ARPES viewer
|
|
30
|
+
|
|
31
|
+
**Version 1.2.1** (last modified 29 October 2026) — see
|
|
32
|
+
[CHANGELOG.md](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/CHANGELOG.md) for what changed. The version is in
|
|
33
|
+
`arpes_viewer/version.py` and is shown in the main window's title bar and at its foot,
|
|
34
|
+
with a link to this repository for bug reports and the latest version
|
|
35
|
+
(<https://github.com/DingPei1995/ARPES-data-browser>). Please quote it when
|
|
36
|
+
reporting a bug, and upload the error log with the report ([below](#bug-reports)).
|
|
37
|
+
|
|
38
|
+
> **Terms of use.** This program is for **non-commercial use only**
|
|
39
|
+
> (academic research and teaching); any commercial use is not permitted.
|
|
40
|
+
> New and updated loaders cover data from **public large-scale facilities**
|
|
41
|
+
> (synchrotrons and similar user facilities) only -- formats of individual
|
|
42
|
+
> laboratories' own set-ups are not supported. If you use this program for
|
|
43
|
+
> a paper on ARPES experiments, please cite this repository in its
|
|
44
|
+
> references (<https://github.com/DingPei1995/ARPES-data-browser>). A paper
|
|
45
|
+
> related to AI that uses this program or its code **must** first be
|
|
46
|
+
> discussed with the author by e-mail. For collaborations, or
|
|
47
|
+
> questions about the details, contact
|
|
48
|
+
> [ding.pei@synchrotron-soleil.fr](mailto:ding.pei@synchrotron-soleil.fr).
|
|
49
|
+
>
|
|
50
|
+
> **Licence and authorship.** Copyright (c) 2026 Ding Pei. Licensed under
|
|
51
|
+
> the [PolyForm Noncommercial License 1.0.0](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/LICENSE.md); see also
|
|
52
|
+
> [NOTICE](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/NOTICE). This is the author's personal work, developed from the
|
|
53
|
+
> author's own earlier code; no institution funded it. The requirements, design
|
|
54
|
+
> decisions, trade-offs, physics, the testing on real experimental data
|
|
55
|
+
> and the feedback from it (drawing on
|
|
56
|
+
> [Phys. Rev. B 103, 245121 (2021)](https://doi.org/10.1103/PhysRevB.103.245121) and
|
|
57
|
+
> [Phys. Rev. B 95, 125126 (2017)](https://doi.org/10.1103/PhysRevB.95.125126)),
|
|
58
|
+
> and the review and acceptance of every change are Ding Pei's; the
|
|
59
|
+
> implementation was assisted by Claude (Anthropic), credited as co-author
|
|
60
|
+
> in the commits.
|
|
61
|
+
|
|
62
|
+
A Python/PyQt5 program for ARPES data: browse the measurements of a
|
|
63
|
+
beamtime, open them in their own windows, convert to momentum, cut, fit,
|
|
64
|
+
process, compare with a band-structure calculation, and lay the results out
|
|
65
|
+
as a publication figure.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## From raw data to a publication figure -- and an AI agent can drive it
|
|
70
|
+
|
|
71
|
+

|
|
72
|
+
|
|
73
|
+
> **These are not real experimental data.** Every panel above is made from
|
|
74
|
+
> the program's **synthetic demo data** (`devtools/demo_data.py`): an
|
|
75
|
+
> invented tight-binding toy model -- a triangular lattice, a = 3.3 Å,
|
|
76
|
+
> stacked with c = 6 Å, a few bands with orbital labels and a k_z
|
|
77
|
+
> dispersion -- turned into spectra with a Fermi-Dirac cut-off, the
|
|
78
|
+
> analyser resolution and Poisson counting noise, and written as beamline
|
|
79
|
+
> files. The "calculation" in panel (b) is the same toy Hamiltonian made
|
|
80
|
+
> deliberately 1/0.8 times wider and 50 meV higher, so that comparing it
|
|
81
|
+
> with the "measurement" has something to find. **No published data or
|
|
82
|
+
> literature were used to generate them**: the model and its parameters are
|
|
83
|
+
> invented, and names such as "Se-pxy" or "1T-TiSe₂-like" are labels for the
|
|
84
|
+
> toy, not a description of a real material. (The only tabulated values in
|
|
85
|
+
> the demo set are the X-ray line energies of its synthetic EDS spectrum,
|
|
86
|
+
> standard emission energies as listed in the X-ray Data Booklet; that
|
|
87
|
+
> spectrum is not part of this figure.)
|
|
88
|
+
|
|
89
|
+
<p align="center">
|
|
90
|
+
<img src="https://raw.githubusercontent.com/DingPei1995/ARPES-data-browser/v1.2.1/docs/images/composer_colour_bar.png" width="96%"
|
|
91
|
+
alt="Example figure 1 in the figure composer, its colour bar being set">
|
|
92
|
+
</p>
|
|
93
|
+
<p align="center">
|
|
94
|
+
<img src="https://raw.githubusercontent.com/DingPei1995/ARPES-data-browser/v1.2.1/docs/images/main_window_advanced.png" width="50%"
|
|
95
|
+
alt="The main panel: the beamtime's datasets and the tools for the selected ones">
|
|
96
|
+
<img src="https://raw.githubusercontent.com/DingPei1995/ARPES-data-browser/v1.2.1/docs/images/map_k_contour.png" width="47%"
|
|
97
|
+
alt="A Fermi-surface map converted to momentum, in its viewer">
|
|
98
|
+
</p>
|
|
99
|
+
<p align="center"><sub>Example figure 1 in the figure composer (top); the
|
|
100
|
+
main panel and a Fermi-surface map in momentum, in its viewer (bottom) --
|
|
101
|
+
also on the synthetic demo data.</sub></p>
|
|
102
|
+
|
|
103
|
+
Every step from the files to the finished figure is the program's own,
|
|
104
|
+
and every step is plain Python that a script -- or an **AI agent** -- can
|
|
105
|
+
run, without a screen:
|
|
106
|
+
|
|
107
|
+
| Step | In the program | In code |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| 1. Raw data | the beamline files, as the main panel lists them | `arpes_viewer.loader.registry.load(path, entry)` |
|
|
110
|
+
| 2. To momentum | the Γ-plane Fermi-surface map → k-map | `arpes_viewer.tools.momentum.kspace.convert_map(...)` |
|
|
111
|
+
| 3. The calculation | **Calculated bands**: a Wannier Hamiltonian; Z and the shift fitted on a cut | `BandsDialog.open_file(...)`, `.fit_alignment()` |
|
|
112
|
+
| 4. Measured vs calculated | constant-energy maps over the calculated contours, coloured by orbital weight (b) | `BandsDialog.series_panels(...)` |
|
|
113
|
+
| 5. 3-D views | the notched cube (a), the stacked contours (c) | `VolumeWindow(...).figure_panel()` |
|
|
114
|
+
| 6. The figure | the **figure composer**: arranged, lettered, exported as PNG / PDF, saved as `.afig` with the data and the files it came from | `FigureWindow(...)`, `.arrange(...)`, `.write(...)` |
|
|
115
|
+
|
|
116
|
+
`devtools/figure_tests.py` is exactly this script -- it writes the demo
|
|
117
|
+
files, reads them back, and builds this figure (and its companion, example
|
|
118
|
+
figure 2) in under a minute:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
python devtools/figure_tests.py out_png/ out_afig/
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
In the step 3 fit it recovers what was built into the demo calculation
|
|
125
|
+
(Z = 0.798 ± 0.001 and a shift of −49.8 ± 0.4 meV, against 0.8 and −50 meV).
|
|
126
|
+
|
|
127
|
+
**Why an AI agent can drive it.** The computations live in `arpes_viewer/tools/`,
|
|
128
|
+
free of any user interface; the windows can run off-screen
|
|
129
|
+
(`QT_QPA_PLATFORM=offscreen`) and be driven call by call as a user drives
|
|
130
|
+
them; each step is documented in the [user guide](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md)
|
|
131
|
+
and in the technical references beside the code; and a saved figure records
|
|
132
|
+
the data and the original files behind every panel. So a coding agent given
|
|
133
|
+
this repository and a folder of data can be asked in plain words -- *"convert
|
|
134
|
+
the Γ-plane map to momentum, compare it with the Wannier calculation in
|
|
135
|
+
`calc/`, and make a figure like example figure 1, with constant-energy maps
|
|
136
|
+
at E_F, −0.3, −0.6 and −0.9 eV"* -- write and run the script, look at the
|
|
137
|
+
PNG it made, and refine it, through to a figure ready for a manuscript. The
|
|
138
|
+
user guide's [worked example](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#30-worked-example-two-figures-in-the-figure-composer)
|
|
139
|
+
does the same by hand, step by step. As with any analysis, check what an
|
|
140
|
+
agent produced before you publish it -- and see the terms of use above for
|
|
141
|
+
papers related to AI.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## What it does
|
|
146
|
+
|
|
147
|
+
- **Reads** SOLEIL ANTARES and CASSIOPEE (including whole folders and the
|
|
148
|
+
spin end station), ALS MAESTRO, ALBA LOREA, Diamond I05 and I05-1, MAX IV
|
|
149
|
+
Bloch, Elettra APE, BESSY One Cube / One Square, SOLARIS URANOS, ASTRID2
|
|
150
|
+
SGM4, and its own saved format ([loading data](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#4-loading-data)).
|
|
151
|
+
- **Shows** cuts, Fermi-surface maps, photon-energy scans, spatially resolved
|
|
152
|
+
scans and spin-resolved curves, each in its own window with linked cursors
|
|
153
|
+
([the viewers](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#5-what-the-viewers-have-in-common)).
|
|
154
|
+
- **Converts** maps and cuts to momentum, photon-energy scans to k_z, with the
|
|
155
|
+
Brillouin zone drawn over them
|
|
156
|
+
([§13](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#13-converting-a-map-to-momentum),
|
|
157
|
+
[§14](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#14-photon-energy-scans-kz),
|
|
158
|
+
[§15](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#15-brillouin-zone)).
|
|
159
|
+
- **Analyses**: Fermi-edge fits, Fermi-surface correction, MDC / EDC fits,
|
|
160
|
+
ridge detection, curvature and second derivatives, dichroism, core levels,
|
|
161
|
+
spin, de-gridding, detector corrections
|
|
162
|
+
([§7–§24](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#7-arbitrary-cuts-and-fermi-surface-correction)).
|
|
163
|
+
- **Compares with theory**: crystal structures, tight-binding fits, and
|
|
164
|
+
calculated bands from Wien2k, VASP, Quantum ESPRESSO, Wannier90 and the
|
|
165
|
+
FPLO + Wannier tools -- along a path, as constant-energy contours on any
|
|
166
|
+
(hkl) plane, or as a 3-D Fermi surface
|
|
167
|
+
([§25–§27](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#27-calculated-bands)).
|
|
168
|
+
- **Makes figures**: the figure composer, laid out like a manuscript page,
|
|
169
|
+
exported as PNG, PDF or SVG, and saved with its data
|
|
170
|
+
([§28–§30](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#28-the-figure-composer)).
|
|
171
|
+
- **Loses nothing**: every derived dataset is autosaved, a crash is recovered
|
|
172
|
+
from, and long steps show a progress bar
|
|
173
|
+
([§31](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#31-autosave-memory-and-recovery)).
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Installing and starting
|
|
178
|
+
|
|
179
|
+
Needs Python 3.9+. With pip, which installs PyQt5, pyqtgraph, numpy,
|
|
180
|
+
h5py and scipy with it:
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
pip install arpes-viewer
|
|
184
|
+
arpes-viewer
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
(`python -m arpes_viewer` does the same; for the latest, unreleased
|
|
188
|
+
version: `pip install git+https://github.com/DingPei1995/ARPES-data-browser`.)
|
|
189
|
+
Installed this way, the error logs go to `~/.arpes_viewer/error_logs/`.
|
|
190
|
+
|
|
191
|
+
From a downloaded copy of this repository, with those packages installed:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
python ARPES_viewer.py
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
- **Windows:** double-click **`ARPES viewer.pyw`** in this folder: no
|
|
198
|
+
console window to close by mistake (the output goes to
|
|
199
|
+
`~/.arpes_viewer/launcher.log`).
|
|
200
|
+
- **macOS:** double-click **`ARPES viewer.app`** in this folder. It finds a
|
|
201
|
+
Python that has the packages (conda included), remembers it, and says what
|
|
202
|
+
to install if none has. The first time, if macOS calls it an app from an
|
|
203
|
+
unidentified developer: **System Settings → Privacy & Security → Open
|
|
204
|
+
Anyway**.
|
|
205
|
+
- **No beamtime at hand?** `python devtools/demo_data.py` writes the
|
|
206
|
+
synthetic demo data above to `demo_data/`
|
|
207
|
+
([trying it with demo data](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#2-trying-it-with-demo-data)).
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Bug reports
|
|
212
|
+
|
|
213
|
+
The program saves what went wrong by itself, in
|
|
214
|
+
`error_logs/errors_<date>_<time>.txt` in its folder (in `~/.arpes_viewer/` when installed with pip), and keeps running. With
|
|
215
|
+
a bug report on [GitHub Issues](https://github.com/DingPei1995/ARPES-data-browser/issues),
|
|
216
|
+
**upload that file** (drag it into the text box) **or paste its text** -- the
|
|
217
|
+
main panel's foot has **Copy the newest error log** and **Open the error
|
|
218
|
+
logs** -- and give the version number.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Documentation
|
|
223
|
+
|
|
224
|
+
- **User guide**, with screenshots: [English](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md) ·
|
|
225
|
+
[中文](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_zh.md) · [Français](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_fr.md); as PDF:
|
|
226
|
+
[English](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/pdf/ARPES_viewer_user_guide_en.pdf) ·
|
|
227
|
+
[中文](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/pdf/ARPES_viewer_user_guide_zh.pdf) ·
|
|
228
|
+
[Français](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/pdf/ARPES_viewer_user_guide_fr.pdf).
|
|
229
|
+
- **What changed, and why**: [CHANGELOG.md](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/CHANGELOG.md).
|
|
230
|
+
- **Technical references**, beside the code they describe -- the formulas,
|
|
231
|
+
the file layouts, the assumptions and the tests behind each step:
|
|
232
|
+
- [Reading data](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/loader/README.md) -- every facility's files, the data
|
|
233
|
+
kinds, adding a beamline, the assumptions the formats force;
|
|
234
|
+
- [The windows](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/ui/README.md) -- the main panel, the viewers, autosave
|
|
235
|
+
and recovery, long operations;
|
|
236
|
+
- [Analysis](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/README.md) -- what each tool does and what it assumes;
|
|
237
|
+
the tools ported from the MATLAB programs;
|
|
238
|
+
- [Momentum conversion](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/momentum/README.md) -- k conversion, k_z
|
|
239
|
+
maps;
|
|
240
|
+
- [Spectra](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/spectra/README.md) -- core levels, curves, curve fits,
|
|
241
|
+
spin;
|
|
242
|
+
- [Processing](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/processing/README.md) -- de-gridding, cut
|
|
243
|
+
arithmetic;
|
|
244
|
+
- [Figures, export and the experiment log](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/output/README.md);
|
|
245
|
+
- [For developers](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/DEVELOPER.md) -- the layout of the code, and the
|
|
246
|
+
tests (`python -m pytest`).
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# ARPES viewer
|
|
2
|
+
|
|
3
|
+
**Version 1.2.1** (last modified 29 October 2026) — see
|
|
4
|
+
[CHANGELOG.md](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/CHANGELOG.md) for what changed. The version is in
|
|
5
|
+
`arpes_viewer/version.py` and is shown in the main window's title bar and at its foot,
|
|
6
|
+
with a link to this repository for bug reports and the latest version
|
|
7
|
+
(<https://github.com/DingPei1995/ARPES-data-browser>). Please quote it when
|
|
8
|
+
reporting a bug, and upload the error log with the report ([below](#bug-reports)).
|
|
9
|
+
|
|
10
|
+
> **Terms of use.** This program is for **non-commercial use only**
|
|
11
|
+
> (academic research and teaching); any commercial use is not permitted.
|
|
12
|
+
> New and updated loaders cover data from **public large-scale facilities**
|
|
13
|
+
> (synchrotrons and similar user facilities) only -- formats of individual
|
|
14
|
+
> laboratories' own set-ups are not supported. If you use this program for
|
|
15
|
+
> a paper on ARPES experiments, please cite this repository in its
|
|
16
|
+
> references (<https://github.com/DingPei1995/ARPES-data-browser>). A paper
|
|
17
|
+
> related to AI that uses this program or its code **must** first be
|
|
18
|
+
> discussed with the author by e-mail. For collaborations, or
|
|
19
|
+
> questions about the details, contact
|
|
20
|
+
> [ding.pei@synchrotron-soleil.fr](mailto:ding.pei@synchrotron-soleil.fr).
|
|
21
|
+
>
|
|
22
|
+
> **Licence and authorship.** Copyright (c) 2026 Ding Pei. Licensed under
|
|
23
|
+
> the [PolyForm Noncommercial License 1.0.0](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/LICENSE.md); see also
|
|
24
|
+
> [NOTICE](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/NOTICE). This is the author's personal work, developed from the
|
|
25
|
+
> author's own earlier code; no institution funded it. The requirements, design
|
|
26
|
+
> decisions, trade-offs, physics, the testing on real experimental data
|
|
27
|
+
> and the feedback from it (drawing on
|
|
28
|
+
> [Phys. Rev. B 103, 245121 (2021)](https://doi.org/10.1103/PhysRevB.103.245121) and
|
|
29
|
+
> [Phys. Rev. B 95, 125126 (2017)](https://doi.org/10.1103/PhysRevB.95.125126)),
|
|
30
|
+
> and the review and acceptance of every change are Ding Pei's; the
|
|
31
|
+
> implementation was assisted by Claude (Anthropic), credited as co-author
|
|
32
|
+
> in the commits.
|
|
33
|
+
|
|
34
|
+
A Python/PyQt5 program for ARPES data: browse the measurements of a
|
|
35
|
+
beamtime, open them in their own windows, convert to momentum, cut, fit,
|
|
36
|
+
process, compare with a band-structure calculation, and lay the results out
|
|
37
|
+
as a publication figure.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## From raw data to a publication figure -- and an AI agent can drive it
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
> **These are not real experimental data.** Every panel above is made from
|
|
46
|
+
> the program's **synthetic demo data** (`devtools/demo_data.py`): an
|
|
47
|
+
> invented tight-binding toy model -- a triangular lattice, a = 3.3 Å,
|
|
48
|
+
> stacked with c = 6 Å, a few bands with orbital labels and a k_z
|
|
49
|
+
> dispersion -- turned into spectra with a Fermi-Dirac cut-off, the
|
|
50
|
+
> analyser resolution and Poisson counting noise, and written as beamline
|
|
51
|
+
> files. The "calculation" in panel (b) is the same toy Hamiltonian made
|
|
52
|
+
> deliberately 1/0.8 times wider and 50 meV higher, so that comparing it
|
|
53
|
+
> with the "measurement" has something to find. **No published data or
|
|
54
|
+
> literature were used to generate them**: the model and its parameters are
|
|
55
|
+
> invented, and names such as "Se-pxy" or "1T-TiSe₂-like" are labels for the
|
|
56
|
+
> toy, not a description of a real material. (The only tabulated values in
|
|
57
|
+
> the demo set are the X-ray line energies of its synthetic EDS spectrum,
|
|
58
|
+
> standard emission energies as listed in the X-ray Data Booklet; that
|
|
59
|
+
> spectrum is not part of this figure.)
|
|
60
|
+
|
|
61
|
+
<p align="center">
|
|
62
|
+
<img src="https://raw.githubusercontent.com/DingPei1995/ARPES-data-browser/v1.2.1/docs/images/composer_colour_bar.png" width="96%"
|
|
63
|
+
alt="Example figure 1 in the figure composer, its colour bar being set">
|
|
64
|
+
</p>
|
|
65
|
+
<p align="center">
|
|
66
|
+
<img src="https://raw.githubusercontent.com/DingPei1995/ARPES-data-browser/v1.2.1/docs/images/main_window_advanced.png" width="50%"
|
|
67
|
+
alt="The main panel: the beamtime's datasets and the tools for the selected ones">
|
|
68
|
+
<img src="https://raw.githubusercontent.com/DingPei1995/ARPES-data-browser/v1.2.1/docs/images/map_k_contour.png" width="47%"
|
|
69
|
+
alt="A Fermi-surface map converted to momentum, in its viewer">
|
|
70
|
+
</p>
|
|
71
|
+
<p align="center"><sub>Example figure 1 in the figure composer (top); the
|
|
72
|
+
main panel and a Fermi-surface map in momentum, in its viewer (bottom) --
|
|
73
|
+
also on the synthetic demo data.</sub></p>
|
|
74
|
+
|
|
75
|
+
Every step from the files to the finished figure is the program's own,
|
|
76
|
+
and every step is plain Python that a script -- or an **AI agent** -- can
|
|
77
|
+
run, without a screen:
|
|
78
|
+
|
|
79
|
+
| Step | In the program | In code |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| 1. Raw data | the beamline files, as the main panel lists them | `arpes_viewer.loader.registry.load(path, entry)` |
|
|
82
|
+
| 2. To momentum | the Γ-plane Fermi-surface map → k-map | `arpes_viewer.tools.momentum.kspace.convert_map(...)` |
|
|
83
|
+
| 3. The calculation | **Calculated bands**: a Wannier Hamiltonian; Z and the shift fitted on a cut | `BandsDialog.open_file(...)`, `.fit_alignment()` |
|
|
84
|
+
| 4. Measured vs calculated | constant-energy maps over the calculated contours, coloured by orbital weight (b) | `BandsDialog.series_panels(...)` |
|
|
85
|
+
| 5. 3-D views | the notched cube (a), the stacked contours (c) | `VolumeWindow(...).figure_panel()` |
|
|
86
|
+
| 6. The figure | the **figure composer**: arranged, lettered, exported as PNG / PDF, saved as `.afig` with the data and the files it came from | `FigureWindow(...)`, `.arrange(...)`, `.write(...)` |
|
|
87
|
+
|
|
88
|
+
`devtools/figure_tests.py` is exactly this script -- it writes the demo
|
|
89
|
+
files, reads them back, and builds this figure (and its companion, example
|
|
90
|
+
figure 2) in under a minute:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
python devtools/figure_tests.py out_png/ out_afig/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
In the step 3 fit it recovers what was built into the demo calculation
|
|
97
|
+
(Z = 0.798 ± 0.001 and a shift of −49.8 ± 0.4 meV, against 0.8 and −50 meV).
|
|
98
|
+
|
|
99
|
+
**Why an AI agent can drive it.** The computations live in `arpes_viewer/tools/`,
|
|
100
|
+
free of any user interface; the windows can run off-screen
|
|
101
|
+
(`QT_QPA_PLATFORM=offscreen`) and be driven call by call as a user drives
|
|
102
|
+
them; each step is documented in the [user guide](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md)
|
|
103
|
+
and in the technical references beside the code; and a saved figure records
|
|
104
|
+
the data and the original files behind every panel. So a coding agent given
|
|
105
|
+
this repository and a folder of data can be asked in plain words -- *"convert
|
|
106
|
+
the Γ-plane map to momentum, compare it with the Wannier calculation in
|
|
107
|
+
`calc/`, and make a figure like example figure 1, with constant-energy maps
|
|
108
|
+
at E_F, −0.3, −0.6 and −0.9 eV"* -- write and run the script, look at the
|
|
109
|
+
PNG it made, and refine it, through to a figure ready for a manuscript. The
|
|
110
|
+
user guide's [worked example](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#30-worked-example-two-figures-in-the-figure-composer)
|
|
111
|
+
does the same by hand, step by step. As with any analysis, check what an
|
|
112
|
+
agent produced before you publish it -- and see the terms of use above for
|
|
113
|
+
papers related to AI.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## What it does
|
|
118
|
+
|
|
119
|
+
- **Reads** SOLEIL ANTARES and CASSIOPEE (including whole folders and the
|
|
120
|
+
spin end station), ALS MAESTRO, ALBA LOREA, Diamond I05 and I05-1, MAX IV
|
|
121
|
+
Bloch, Elettra APE, BESSY One Cube / One Square, SOLARIS URANOS, ASTRID2
|
|
122
|
+
SGM4, and its own saved format ([loading data](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#4-loading-data)).
|
|
123
|
+
- **Shows** cuts, Fermi-surface maps, photon-energy scans, spatially resolved
|
|
124
|
+
scans and spin-resolved curves, each in its own window with linked cursors
|
|
125
|
+
([the viewers](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#5-what-the-viewers-have-in-common)).
|
|
126
|
+
- **Converts** maps and cuts to momentum, photon-energy scans to k_z, with the
|
|
127
|
+
Brillouin zone drawn over them
|
|
128
|
+
([§13](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#13-converting-a-map-to-momentum),
|
|
129
|
+
[§14](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#14-photon-energy-scans-kz),
|
|
130
|
+
[§15](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#15-brillouin-zone)).
|
|
131
|
+
- **Analyses**: Fermi-edge fits, Fermi-surface correction, MDC / EDC fits,
|
|
132
|
+
ridge detection, curvature and second derivatives, dichroism, core levels,
|
|
133
|
+
spin, de-gridding, detector corrections
|
|
134
|
+
([§7–§24](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#7-arbitrary-cuts-and-fermi-surface-correction)).
|
|
135
|
+
- **Compares with theory**: crystal structures, tight-binding fits, and
|
|
136
|
+
calculated bands from Wien2k, VASP, Quantum ESPRESSO, Wannier90 and the
|
|
137
|
+
FPLO + Wannier tools -- along a path, as constant-energy contours on any
|
|
138
|
+
(hkl) plane, or as a 3-D Fermi surface
|
|
139
|
+
([§25–§27](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#27-calculated-bands)).
|
|
140
|
+
- **Makes figures**: the figure composer, laid out like a manuscript page,
|
|
141
|
+
exported as PNG, PDF or SVG, and saved with its data
|
|
142
|
+
([§28–§30](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#28-the-figure-composer)).
|
|
143
|
+
- **Loses nothing**: every derived dataset is autosaved, a crash is recovered
|
|
144
|
+
from, and long steps show a progress bar
|
|
145
|
+
([§31](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#31-autosave-memory-and-recovery)).
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Installing and starting
|
|
150
|
+
|
|
151
|
+
Needs Python 3.9+. With pip, which installs PyQt5, pyqtgraph, numpy,
|
|
152
|
+
h5py and scipy with it:
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
pip install arpes-viewer
|
|
156
|
+
arpes-viewer
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
(`python -m arpes_viewer` does the same; for the latest, unreleased
|
|
160
|
+
version: `pip install git+https://github.com/DingPei1995/ARPES-data-browser`.)
|
|
161
|
+
Installed this way, the error logs go to `~/.arpes_viewer/error_logs/`.
|
|
162
|
+
|
|
163
|
+
From a downloaded copy of this repository, with those packages installed:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
python ARPES_viewer.py
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
- **Windows:** double-click **`ARPES viewer.pyw`** in this folder: no
|
|
170
|
+
console window to close by mistake (the output goes to
|
|
171
|
+
`~/.arpes_viewer/launcher.log`).
|
|
172
|
+
- **macOS:** double-click **`ARPES viewer.app`** in this folder. It finds a
|
|
173
|
+
Python that has the packages (conda included), remembers it, and says what
|
|
174
|
+
to install if none has. The first time, if macOS calls it an app from an
|
|
175
|
+
unidentified developer: **System Settings → Privacy & Security → Open
|
|
176
|
+
Anyway**.
|
|
177
|
+
- **No beamtime at hand?** `python devtools/demo_data.py` writes the
|
|
178
|
+
synthetic demo data above to `demo_data/`
|
|
179
|
+
([trying it with demo data](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md#2-trying-it-with-demo-data)).
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Bug reports
|
|
184
|
+
|
|
185
|
+
The program saves what went wrong by itself, in
|
|
186
|
+
`error_logs/errors_<date>_<time>.txt` in its folder (in `~/.arpes_viewer/` when installed with pip), and keeps running. With
|
|
187
|
+
a bug report on [GitHub Issues](https://github.com/DingPei1995/ARPES-data-browser/issues),
|
|
188
|
+
**upload that file** (drag it into the text box) **or paste its text** -- the
|
|
189
|
+
main panel's foot has **Copy the newest error log** and **Open the error
|
|
190
|
+
logs** -- and give the version number.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Documentation
|
|
195
|
+
|
|
196
|
+
- **User guide**, with screenshots: [English](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_en.md) ·
|
|
197
|
+
[中文](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_zh.md) · [Français](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/USER_GUIDE_fr.md); as PDF:
|
|
198
|
+
[English](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/pdf/ARPES_viewer_user_guide_en.pdf) ·
|
|
199
|
+
[中文](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/pdf/ARPES_viewer_user_guide_zh.pdf) ·
|
|
200
|
+
[Français](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/pdf/ARPES_viewer_user_guide_fr.pdf).
|
|
201
|
+
- **What changed, and why**: [CHANGELOG.md](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/CHANGELOG.md).
|
|
202
|
+
- **Technical references**, beside the code they describe -- the formulas,
|
|
203
|
+
the file layouts, the assumptions and the tests behind each step:
|
|
204
|
+
- [Reading data](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/loader/README.md) -- every facility's files, the data
|
|
205
|
+
kinds, adding a beamline, the assumptions the formats force;
|
|
206
|
+
- [The windows](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/ui/README.md) -- the main panel, the viewers, autosave
|
|
207
|
+
and recovery, long operations;
|
|
208
|
+
- [Analysis](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/README.md) -- what each tool does and what it assumes;
|
|
209
|
+
the tools ported from the MATLAB programs;
|
|
210
|
+
- [Momentum conversion](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/momentum/README.md) -- k conversion, k_z
|
|
211
|
+
maps;
|
|
212
|
+
- [Spectra](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/spectra/README.md) -- core levels, curves, curve fits,
|
|
213
|
+
spin;
|
|
214
|
+
- [Processing](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/processing/README.md) -- de-gridding, cut
|
|
215
|
+
arithmetic;
|
|
216
|
+
- [Figures, export and the experiment log](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/arpes_viewer/tools/output/README.md);
|
|
217
|
+
- [For developers](https://github.com/DingPei1995/ARPES-data-browser/blob/v1.2.1/docs/DEVELOPER.md) -- the layout of the code, and the
|
|
218
|
+
tests (`python -m pytest`).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""ARPES viewer: browse, convert, analyse and lay out ARPES data as
|
|
2
|
+
publication figures. ``arpes-viewer`` (or ``python -m arpes_viewer``)
|
|
3
|
+
starts the program; :mod:`arpes_viewer.tools` holds the computations, free
|
|
4
|
+
of any user interface, for scripts.
|
|
5
|
+
|
|
6
|
+
Copyright (c) 2026 Ding Pei. Licensed under the PolyForm Noncommercial
|
|
7
|
+
License 1.0.0 (LICENSE.md).
|
|
8
|
+
"""
|
|
9
|
+
from arpes_viewer.version import VERSION as __version__
|
|
10
|
+
|
|
11
|
+
__all__ = ["__version__"]
|