shnitsel-tools 2026.1.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.
- shnitsel_tools-2026.1.1/LICENSE +21 -0
- shnitsel_tools-2026.1.1/PKG-INFO +392 -0
- shnitsel_tools-2026.1.1/README.md +335 -0
- shnitsel_tools-2026.1.1/pyproject.toml +146 -0
- shnitsel_tools-2026.1.1/setup.cfg +4 -0
- shnitsel_tools-2026.1.1/shnitsel/__init__.py +37 -0
- shnitsel_tools-2026.1.1/shnitsel/_accessors.py +244 -0
- shnitsel_tools-2026.1.1/shnitsel/_contracts.py +80 -0
- shnitsel_tools-2026.1.1/shnitsel/_generated_accessors.py +511 -0
- shnitsel_tools-2026.1.1/shnitsel/_state.py +11 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/generic.py +314 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/hops.py +504 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/lda.py +73 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/pca.py +806 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/pls.py +130 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/populations.py +314 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/spectra.py +716 -0
- shnitsel_tools-2026.1.1/shnitsel/analyze/stats.py +328 -0
- shnitsel_tools-2026.1.1/shnitsel/bridges.py +409 -0
- shnitsel_tools-2026.1.1/shnitsel/clean/__init__.py +281 -0
- shnitsel_tools-2026.1.1/shnitsel/clean/common.py +390 -0
- shnitsel_tools-2026.1.1/shnitsel/clean/dispatch_plots.py +52 -0
- shnitsel_tools-2026.1.1/shnitsel/clean/filter_energy.py +283 -0
- shnitsel_tools-2026.1.1/shnitsel/clean/filter_geo.py +272 -0
- shnitsel_tools-2026.1.1/shnitsel/clean/filtration_class.py +140 -0
- shnitsel_tools-2026.1.1/shnitsel/cli/convert_to_shnitsel.py +243 -0
- shnitsel_tools-2026.1.1/shnitsel/cli/generate_datasheet.py +248 -0
- shnitsel_tools-2026.1.1/shnitsel/cli/merge_shnitsel_files.py +117 -0
- shnitsel_tools-2026.1.1/shnitsel/core/__init__.py +1 -0
- shnitsel_tools-2026.1.1/shnitsel/core/_api_info.py +55 -0
- shnitsel_tools-2026.1.1/shnitsel/core/feature_detection.py +19 -0
- shnitsel_tools-2026.1.1/shnitsel/core/typedefs.py +60 -0
- shnitsel_tools-2026.1.1/shnitsel/data/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/data/atom_helpers.py +130 -0
- shnitsel_tools-2026.1.1/shnitsel/data/charge_helpers.py +92 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/__init__.py +153 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/data_series.py +392 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/dataset_vis.py +65 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/frames.py +151 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/inter_state.py +132 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/multi_layered.py +117 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/multi_series.py +94 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/multi_stacked.py +107 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/per_state.py +109 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/shared.py +693 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/trajectory.py +95 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/trajectory_collection.py +16 -0
- shnitsel_tools-2026.1.1/shnitsel/data/dataset_containers/xr_conversion.py +184 -0
- shnitsel_tools-2026.1.1/shnitsel/data/helpers.py +302 -0
- shnitsel_tools-2026.1.1/shnitsel/data/multi_indices.py +727 -0
- shnitsel_tools-2026.1.1/shnitsel/data/proxy_class.py +150 -0
- shnitsel_tools-2026.1.1/shnitsel/data/shnitsel_db/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/data/shnitsel_db/db_function_decorator.py +228 -0
- shnitsel_tools-2026.1.1/shnitsel/data/shnitsel_db_helpers.py +199 -0
- shnitsel_tools-2026.1.1/shnitsel/data/state_helpers.py +315 -0
- shnitsel_tools-2026.1.1/shnitsel/data/traj_combiner_methods.py +778 -0
- shnitsel_tools-2026.1.1/shnitsel/data/trajectory_grouping_params.py +12 -0
- shnitsel_tools-2026.1.1/shnitsel/data/trajectory_variable_description.py +38 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/__init__.py +26 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/child_support_functions.py +85 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/compound.py +241 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/data_group.py +308 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/data_leaf.py +216 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/datatree_level.py +18 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/node.py +1572 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/selection.py +467 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/support_functions.py +324 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/tree.py +422 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/tree_completion.py +133 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/tree_vis.py +286 -0
- shnitsel_tools-2026.1.1/shnitsel/data/tree/xr_conversion.py +333 -0
- shnitsel_tools-2026.1.1/shnitsel/data/xr_io_compatibility.py +83 -0
- shnitsel_tools-2026.1.1/shnitsel/data/xr_io_registry.py +95 -0
- shnitsel_tools-2026.1.1/shnitsel/filtering/__init__.py +22 -0
- shnitsel_tools-2026.1.1/shnitsel/filtering/helpers.py +135 -0
- shnitsel_tools-2026.1.1/shnitsel/filtering/state_selection.py +2328 -0
- shnitsel_tools-2026.1.1/shnitsel/filtering/structure_selection.py +2430 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/__init__.py +4 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/alignment.py +208 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/analogs.py +646 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc.py +225 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc_/algebra.py +145 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc_/angles.py +279 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc_/bla_chromophor.py +181 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc_/dihedrals.py +415 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc_/distances.py +157 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc_/helpers.py +106 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc_/positions.py +141 -0
- shnitsel_tools-2026.1.1/shnitsel/geo/geocalc_/pyramids.py +311 -0
- shnitsel_tools-2026.1.1/shnitsel/io/__init__.py +11 -0
- shnitsel_tools-2026.1.1/shnitsel/io/ase/__init__.py +4 -0
- shnitsel_tools-2026.1.1/shnitsel/io/ase/format_reader.py +231 -0
- shnitsel_tools-2026.1.1/shnitsel/io/ase/parse.py +1353 -0
- shnitsel_tools-2026.1.1/shnitsel/io/ase/write.py +435 -0
- shnitsel_tools-2026.1.1/shnitsel/io/format_reader_base.py +581 -0
- shnitsel_tools-2026.1.1/shnitsel/io/format_registry.py +79 -0
- shnitsel_tools-2026.1.1/shnitsel/io/molcas/molcas_opt.py +90 -0
- shnitsel_tools-2026.1.1/shnitsel/io/newtonx/__init__.py +3 -0
- shnitsel_tools-2026.1.1/shnitsel/io/newtonx/format_reader.py +238 -0
- shnitsel_tools-2026.1.1/shnitsel/io/newtonx/parse.py +840 -0
- shnitsel_tools-2026.1.1/shnitsel/io/pyrai2md/__init__.py +3 -0
- shnitsel_tools-2026.1.1/shnitsel/io/pyrai2md/format_reader.py +233 -0
- shnitsel_tools-2026.1.1/shnitsel/io/pyrai2md/parse.py +778 -0
- shnitsel_tools-2026.1.1/shnitsel/io/read.py +1070 -0
- shnitsel_tools-2026.1.1/shnitsel/io/sharc/__init__.py +5 -0
- shnitsel_tools-2026.1.1/shnitsel/io/sharc/format_reader.py +332 -0
- shnitsel_tools-2026.1.1/shnitsel/io/sharc/parse_initial_conditions.py +1026 -0
- shnitsel_tools-2026.1.1/shnitsel/io/sharc/parse_trajectory.py +849 -0
- shnitsel_tools-2026.1.1/shnitsel/io/sharc/qm_helpers.py +173 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shared/helpers.py +215 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shared/messages.py +180 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shared/trajectory_finalization.py +287 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shared/trajectory_setup.py +556 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shared/variable_flagging.py +101 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shnitsel/__init__.py +4 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shnitsel/format_reader.py +264 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shnitsel/parse.py +484 -0
- shnitsel_tools-2026.1.1/shnitsel/io/shnitsel/write.py +265 -0
- shnitsel_tools-2026.1.1/shnitsel/io/xyz/__init__.py +3 -0
- shnitsel_tools-2026.1.1/shnitsel/io/xyz/parse.py +85 -0
- shnitsel_tools-2026.1.1/shnitsel/rd.py +202 -0
- shnitsel_tools-2026.1.1/shnitsel/test_support/trajectory_verification.py +299 -0
- shnitsel_tools-2026.1.1/shnitsel/units/__init__.py +5 -0
- shnitsel_tools-2026.1.1/shnitsel/units/conversion.py +503 -0
- shnitsel_tools-2026.1.1/shnitsel/units/defaults.py +134 -0
- shnitsel_tools-2026.1.1/shnitsel/units/definitions.py +292 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/colormaps.py +339 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/__init__.py +134 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/datasheet.py +514 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/datasheet_page.py +1584 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/common.py +158 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/dip_trans_hist.py +598 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/energy_bands.py +166 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/hist.py +112 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/nacs_hist.py +121 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/per_state_hist.py +111 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/soc_trans_hist.py +879 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/socs_hist.py +105 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/structure.py +248 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/datasheet/figures/time.py +229 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/__init__.py +23 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/common.py +342 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/filtration.py +272 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/kde.py +647 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/p3mhelpers.py +143 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/pca_biplot.py +799 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/polychrom.py +146 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/select.py +199 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/spectra3d.py +145 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/plot/time.py +326 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/static/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/static/css/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/static/html/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/support/__init__.py +0 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/support/ipython_visualization.py +34 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/support/multi_plot.py +44 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/support/visualizeable.py +11 -0
- shnitsel_tools-2026.1.1/shnitsel/vis/vmd/__init__.py +38 -0
- shnitsel_tools-2026.1.1/shnitsel/xarray.py +28 -0
- shnitsel_tools-2026.1.1/shnitsel_tools.egg-info/PKG-INFO +392 -0
- shnitsel_tools-2026.1.1/shnitsel_tools.egg-info/SOURCES.txt +173 -0
- shnitsel_tools-2026.1.1/shnitsel_tools.egg-info/dependency_links.txt +1 -0
- shnitsel_tools-2026.1.1/shnitsel_tools.egg-info/entry_points.txt +3 -0
- shnitsel_tools-2026.1.1/shnitsel_tools.egg-info/requires.txt +46 -0
- shnitsel_tools-2026.1.1/shnitsel_tools.egg-info/top_level.txt +1 -0
- shnitsel_tools-2026.1.1/tests/test_accessors.py +122 -0
- shnitsel_tools-2026.1.1/tests/test_datasheet.py +91 -0
- shnitsel_tools-2026.1.1/tests/test_geom.py +72 -0
- shnitsel_tools-2026.1.1/tests/test_plots.py +180 -0
- shnitsel_tools-2026.1.1/tests/test_postprocess.py +300 -0
- shnitsel_tools-2026.1.1/tests/test_stacked_unstacked.py +69 -0
- shnitsel_tools-2026.1.1/tests/test_tree_to_frames.py +30 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 SHNITSEL
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: shnitsel-tools
|
|
3
|
+
Version: 2026.1.1
|
|
4
|
+
Summary: Collect, manage, process, analyse & visualize surface hopping data
|
|
5
|
+
Author-email: Theodor Everley Röhrkasten <theodor.roehrkasten@fau.de>, Kevin Höllring <kevin.hoellring@fau.de>, Carolin Müller <carolin.cpc.mueller@fau.de>
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Requires-Python: >=3.11
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Dist: scipy>=1.16
|
|
13
|
+
Requires-Dist: matplotlib>=3.10
|
|
14
|
+
Requires-Dist: xarray>=2025.7.1
|
|
15
|
+
Requires-Dist: rdkit>=2025
|
|
16
|
+
Requires-Dist: ase>=3
|
|
17
|
+
Requires-Dist: numpy>=2.3
|
|
18
|
+
Requires-Dist: pandas>=2.2
|
|
19
|
+
Requires-Dist: h5netcdf>=1.7.0
|
|
20
|
+
Requires-Dist: scikit-learn>=1.5
|
|
21
|
+
Requires-Dist: jupyter>=1.0.0
|
|
22
|
+
Requires-Dist: py3dmol>=2.0.4
|
|
23
|
+
Requires-Dist: tqdm>=4.66.2
|
|
24
|
+
Requires-Dist: pyparsing>=3.2.5
|
|
25
|
+
Requires-Dist: svgpathtools>=1.7.2
|
|
26
|
+
Requires-Dist: fsspec
|
|
27
|
+
Requires-Dist: requests
|
|
28
|
+
Requires-Dist: aiohttp
|
|
29
|
+
Provides-Extra: vis
|
|
30
|
+
Requires-Dist: bokeh>=3.5; extra == "vis"
|
|
31
|
+
Requires-Dist: datashader; extra == "vis"
|
|
32
|
+
Requires-Dist: numba>=0.60; extra == "vis"
|
|
33
|
+
Requires-Dist: seaborn>=0.13.2; extra == "vis"
|
|
34
|
+
Requires-Dist: holoviews>=1.22.1; extra == "vis"
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: pytest>=5.2; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: hypothesis>=6; extra == "dev"
|
|
39
|
+
Requires-Dist: tox>=4.10.0; extra == "dev"
|
|
40
|
+
Requires-Dist: tox-uv>=1.29.0; extra == "dev"
|
|
41
|
+
Requires-Dist: pre-commit>=2.20.0; extra == "dev"
|
|
42
|
+
Requires-Dist: ruff>=0.5.3; extra == "dev"
|
|
43
|
+
Requires-Dist: mypy>=1.9.0; extra == "dev"
|
|
44
|
+
Requires-Dist: pandas-stubs; extra == "dev"
|
|
45
|
+
Requires-Dist: scipy-stubs; extra == "dev"
|
|
46
|
+
Requires-Dist: types-tqdm; extra == "dev"
|
|
47
|
+
Requires-Dist: build; extra == "dev"
|
|
48
|
+
Requires-Dist: grayskull; extra == "dev"
|
|
49
|
+
Requires-Dist: sphinx==8.2.3; extra == "dev"
|
|
50
|
+
Requires-Dist: sphinx-autobuild; extra == "dev"
|
|
51
|
+
Requires-Dist: sphinx-autosummary-accessors; extra == "dev"
|
|
52
|
+
Requires-Dist: nbsphinx; extra == "dev"
|
|
53
|
+
Requires-Dist: sphinx-design; extra == "dev"
|
|
54
|
+
Requires-Dist: sphinx-autoapi; extra == "dev"
|
|
55
|
+
Requires-Dist: pydata-sphinx-theme; extra == "dev"
|
|
56
|
+
Dynamic: license-file
|
|
57
|
+
|
|
58
|
+
<div align="center">
|
|
59
|
+
<h1>shnitsel-tools</h1>
|
|
60
|
+
<img src="https://raw.githubusercontent.com/SHNITSEL/shnitsel-tools/main/logo_shnitsel_tools.png" alt="SHNITSEL-TOOLS Logo" width="200px">
|
|
61
|
+
<h3>Surface Hopping Nested Instances Training Set for Excited-state Learning Tools</h3>
|
|
62
|
+
<br>
|
|
63
|
+
<a href="https://shnitsel.github.io/"><img src="https://img.shields.io/badge/Website-shnitsel.github.io-yellow.svg" alt="DOI"></a>
|
|
64
|
+
|
|
65
|
+
<a href="https://shnitsel.github.io/tools/docs/_build/index.html"><img src="https://img.shields.io/badge/Docs-shnitsel.github.io-yellow.svg" alt="DOI"></a>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
--------------------
|
|
69
|
+
|
|
70
|
+
## About
|
|
71
|
+
|
|
72
|
+
`shnitsel-tools` is designed to to support the entire data lifecycle of surface hopping (SH) trajectory data upon simulation: data managment, storage, processing, visualization and interpretation.
|
|
73
|
+
The tool is compatible with surface hopping data generated using the software packages [SHARC 3/4](https://sharc-md.org/), [Newton-X](https://newtonx.org/), and [PyRAI2MD](https://github.com/lopez-lab/PyRAI2MD).
|
|
74
|
+
The package leverages [Xarray](https://xarray.dev/) to benefit from efficient multidimensional data handling, improved metadata management, and a structure that aligns naturally with the needs of quantum chemical datasets.
|
|
75
|
+
|
|
76
|
+
## Installation
|
|
77
|
+
|
|
78
|
+
`shnitsel-tools` is normally used interactively via Jupyter Notebook on a local machine.
|
|
79
|
+
However, some users might find it convenient to convert trajectories to NetCDF
|
|
80
|
+
on-cluster, as the NetCDF file will likely download faster than the raw text files.
|
|
81
|
+
Either way the following should work as usual, ideally in a fresh virtual (e.g. `conda`) environment:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install shnitsel-tools[vis]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
For more detailed installation instructions, see [here](#detailed-installation-instructions)
|
|
88
|
+
|
|
89
|
+
## Usage
|
|
90
|
+
<!-- TODO: Make documentation more visible -->
|
|
91
|
+
For documentation including an API reference, please see https://shnitsel.github.io/tools/docs/_build/index.html.
|
|
92
|
+
|
|
93
|
+
`shnitsel-tools` mostly exposes data as Xarray (`xr`) objects, so familiarity with that library is beneficial.
|
|
94
|
+
Xarray is somewhat like Pandas for higher-dimensional data, or like Numpy with labels and other metadata.
|
|
95
|
+
- [Overview of data structures](https://tutorial.xarray.dev/intermediate/datastructures-intermediate.html)
|
|
96
|
+
- [Official quick overview](https://docs.xarray.dev/en/stable/getting-started-guide/quick-overview.html)
|
|
97
|
+
- [Xarray in 45 minutes](https://tutorial.xarray.dev/overview/xarray-in-45-min.html) for a more detailed introduction
|
|
98
|
+
|
|
99
|
+
### Tutorials
|
|
100
|
+
For a quick start, see the [tutorials](https://github.com/SHNITSEL/shnitsel-tools/blob/main/tutorials) directory,
|
|
101
|
+
which contains Jupyter Notebooks showing the workflow for parsing, writing and loading SHNITSEL databases as well as how to postprocess and visualize the respective data.
|
|
102
|
+
|
|
103
|
+
<!--
|
|
104
|
+
TODO: Adapt to new tutorials!
|
|
105
|
+
#### Collection & storage
|
|
106
|
+
- [parsing trajcetory and initial condition data obtained by SHARC](https://github.com/SHNITSEL/shnitsel-tools/blob/main/tutorials/0_1_sharc2hdf5.ipynb)
|
|
107
|
+
- [parsing trajectory data produced with Newton-X](https://github.com/SHNITSEL/shnitsel-tools/blob/main/tutorials/0_2_nx2hdf5.ipynb)
|
|
108
|
+
- [convert ASE databases](https://github.com/SHNITSEL/shnitsel-tools/blob/main/tutorials/0_4_ase2hdf5.ipynb)
|
|
109
|
+
#### Management
|
|
110
|
+
- [exploration of electronic properties](https://github.com/SHNITSEL/shnitsel-tools/blob/main/tutorials/2_2_PS_explore.ipynb)
|
|
111
|
+
#### Postprocessing & visualization of data
|
|
112
|
+
- [datasheet for trajectory data](https://github.com/SHNITSEL/shnitsel-tools/blob/main/tutorials/3_1_datasheet.ipynb)
|
|
113
|
+
- [principal component analysis and trajectory classification](https://github.com/SHNITSEL/shnitsel-tools/blob/main/tutorials/1_1_GS_PCA.ipynb)
|
|
114
|
+
|
|
115
|
+
### Workflow walkthrough
|
|
116
|
+
Four [notebooks](https://github.com/SHNITSEL/shnitsel-tools/tree/main/tutorials/walkthrough) demonstrate a workflow for the comparative
|
|
117
|
+
analysis of homologous/isoelectronic molecules, from filtration via dimensional reduction and clustering to kinetics.
|
|
118
|
+
-->
|
|
119
|
+
|
|
120
|
+
## Tests
|
|
121
|
+
Running the test-suite can help confirm that `shnitsel-tools` is correctly installed in your environment.
|
|
122
|
+
To run the tests, please install `shnitsel-tools` by cloning the repo as described [here](#for-tutorials-tests-or-development-conda) (conda users)
|
|
123
|
+
or [here](#for-tutorials-tests-or-development-uv) (uv users).
|
|
124
|
+
Then run the `pytest` program without arguments while inside the repository directory, with the virtual environment activated.
|
|
125
|
+
More information on how to invoke `pytest` is available [here](https://docs.pytest.org/en/stable/how-to/usage.html#usage).
|
|
126
|
+
|
|
127
|
+
If you are a contributor, please consider using the `tox` command to run tests across the different supported Python versions.
|
|
128
|
+
|
|
129
|
+
## Overview of repository contents
|
|
130
|
+
```console
|
|
131
|
+
$ tree -I '_*' shnitsel/
|
|
132
|
+
shnitsel
|
|
133
|
+
├── analyze
|
|
134
|
+
│ ├── generic.py
|
|
135
|
+
│ ├── hops.py
|
|
136
|
+
│ ├── lda.py
|
|
137
|
+
│ ├── pca.py
|
|
138
|
+
│ ├── pls.py
|
|
139
|
+
│ ├── populations.py
|
|
140
|
+
│ ├── spectra.py
|
|
141
|
+
│ └── stats.py
|
|
142
|
+
├── bridges.py
|
|
143
|
+
├── clean
|
|
144
|
+
│ ├── common.py
|
|
145
|
+
│ ├── dispatch_plots.py
|
|
146
|
+
│ ├── filter_energy.py
|
|
147
|
+
│ ├── filter_geo.py
|
|
148
|
+
│ └── filtration_class.py
|
|
149
|
+
├── cli
|
|
150
|
+
│ ├── convert_to_shnitsel.py
|
|
151
|
+
│ ├── generate_datasheet.py
|
|
152
|
+
│ └── merge_shnitsel_files.py
|
|
153
|
+
├── core
|
|
154
|
+
│ ├── feature_detection.py
|
|
155
|
+
│ └── typedefs.py
|
|
156
|
+
├── data
|
|
157
|
+
│ ├── atom_helpers.py
|
|
158
|
+
│ ├── charge_helpers.py
|
|
159
|
+
│ ├── dataset_containers
|
|
160
|
+
│ │ ├── data_series.py
|
|
161
|
+
│ │ ├── dataset_vis.py
|
|
162
|
+
│ │ ├── frames.py
|
|
163
|
+
│ │ ├── inter_state.py
|
|
164
|
+
│ │ ├── multi_layered.py
|
|
165
|
+
│ │ ├── multi_series.py
|
|
166
|
+
│ │ ├── multi_stacked.py
|
|
167
|
+
│ │ ├── per_state.py
|
|
168
|
+
│ │ ├── shared.py
|
|
169
|
+
│ │ ├── trajectory_collection.py
|
|
170
|
+
│ │ ├── trajectory.py
|
|
171
|
+
│ │ └── xr_conversion.py
|
|
172
|
+
│ ├── helpers.py
|
|
173
|
+
│ ├── multi_indices.py
|
|
174
|
+
│ ├── proxy_class.py
|
|
175
|
+
│ ├── shnitsel_db
|
|
176
|
+
│ │ └── db_function_decorator.py
|
|
177
|
+
│ ├── shnitsel_db_helpers.py
|
|
178
|
+
│ ├── state_helpers.py
|
|
179
|
+
│ ├── traj_combiner_methods.py
|
|
180
|
+
│ ├── trajectory_grouping_params.py
|
|
181
|
+
│ ├── trajectory_variable_description.py
|
|
182
|
+
│ └── tree
|
|
183
|
+
│ ├── child_support_functions.py
|
|
184
|
+
│ ├── compound.py
|
|
185
|
+
│ ├── data_group.py
|
|
186
|
+
│ ├── data_leaf.py
|
|
187
|
+
│ ├── datatree_level.py
|
|
188
|
+
│ ├── node.py
|
|
189
|
+
│ ├── selection.py
|
|
190
|
+
│ ├── support_functions.py
|
|
191
|
+
│ ├── tree_completion.py
|
|
192
|
+
│ ├── tree.py
|
|
193
|
+
│ ├── tree_vis.py
|
|
194
|
+
│ └── xr_conversion.py
|
|
195
|
+
├── filtering
|
|
196
|
+
│ ├── filter.md
|
|
197
|
+
│ ├── helpers.py
|
|
198
|
+
│ ├── state_selection.py
|
|
199
|
+
│ └── structure_selection.py
|
|
200
|
+
├── geo
|
|
201
|
+
│ ├── alignment.py
|
|
202
|
+
│ ├── analogs.py
|
|
203
|
+
│ ├── geocalc_
|
|
204
|
+
│ │ ├── algebra.py
|
|
205
|
+
│ │ ├── angles.py
|
|
206
|
+
│ │ ├── bla_chromophor.py
|
|
207
|
+
│ │ ├── dihedrals.py
|
|
208
|
+
│ │ ├── distances.py
|
|
209
|
+
│ │ ├── helpers.py
|
|
210
|
+
│ │ ├── positions.py
|
|
211
|
+
│ │ └── pyramids.py
|
|
212
|
+
│ └── geocalc.py
|
|
213
|
+
├── io
|
|
214
|
+
│ ├── ase
|
|
215
|
+
│ │ ├── format_reader.py
|
|
216
|
+
│ │ ├── parse.py
|
|
217
|
+
│ │ └── write.py
|
|
218
|
+
│ ├── format_reader_base.py
|
|
219
|
+
│ ├── format_registry.py
|
|
220
|
+
│ ├── molcas
|
|
221
|
+
│ │ └── molcas_opt.py
|
|
222
|
+
│ ├── newtonx
|
|
223
|
+
│ │ ├── format_reader.py
|
|
224
|
+
│ │ └── parse.py
|
|
225
|
+
│ ├── pyrai2md
|
|
226
|
+
│ │ ├── format_reader.py
|
|
227
|
+
│ │ └── parse.py
|
|
228
|
+
│ ├── read.py
|
|
229
|
+
│ ├── sharc
|
|
230
|
+
│ │ ├── format_reader.py
|
|
231
|
+
│ │ ├── parse_initial_conditions.py
|
|
232
|
+
│ │ ├── parse_trajectory.py
|
|
233
|
+
│ │ └── qm_helpers.py
|
|
234
|
+
│ ├── shared
|
|
235
|
+
│ │ ├── helpers.py
|
|
236
|
+
│ │ ├── messages.py
|
|
237
|
+
│ │ ├── trajectory_finalization.py
|
|
238
|
+
│ │ ├── trajectory_setup.py
|
|
239
|
+
│ │ └── variable_flagging.py
|
|
240
|
+
│ ├── shnitsel
|
|
241
|
+
│ │ ├── format_reader.py
|
|
242
|
+
│ │ ├── parse.py
|
|
243
|
+
│ │ └── write.py
|
|
244
|
+
│ ├── xr_io_compatibility.py
|
|
245
|
+
│ └── xyz
|
|
246
|
+
│ └── parse.py
|
|
247
|
+
├── rd.py
|
|
248
|
+
├── test_support
|
|
249
|
+
│ └── trajectory_verification.py
|
|
250
|
+
├── units
|
|
251
|
+
│ ├── conversion.py
|
|
252
|
+
│ ├── defaults.py
|
|
253
|
+
│ └── definitions.py
|
|
254
|
+
├── vis
|
|
255
|
+
│ ├── colormaps.py
|
|
256
|
+
│ ├── datasheet
|
|
257
|
+
│ │ ├── datasheet_page.py
|
|
258
|
+
│ │ ├── datasheet.py
|
|
259
|
+
│ │ └── figures
|
|
260
|
+
│ │ ├── common.py
|
|
261
|
+
│ │ ├── dip_trans_hist.py
|
|
262
|
+
│ │ ├── energy_bands.py
|
|
263
|
+
│ │ ├── hist.py
|
|
264
|
+
│ │ ├── nacs_hist.py
|
|
265
|
+
│ │ ├── per_state_hist.py
|
|
266
|
+
│ │ ├── socs_hist.py
|
|
267
|
+
│ │ ├── soc_trans_hist.py
|
|
268
|
+
│ │ ├── structure.py
|
|
269
|
+
│ │ └── time.py
|
|
270
|
+
│ ├── plot
|
|
271
|
+
│ │ ├── common.py
|
|
272
|
+
│ │ ├── filtration.py
|
|
273
|
+
│ │ ├── kde.py
|
|
274
|
+
│ │ ├── p3mhelpers.py
|
|
275
|
+
│ │ ├── pca_biplot.py
|
|
276
|
+
│ │ ├── polychrom.py
|
|
277
|
+
│ │ ├── select.py
|
|
278
|
+
│ │ ├── spectra3d.py
|
|
279
|
+
│ │ └── time.py
|
|
280
|
+
│ ├── static
|
|
281
|
+
│ │ ├── css
|
|
282
|
+
│ │ │ └── style.css
|
|
283
|
+
│ │ └── html
|
|
284
|
+
│ │ └── icons-svg-inline.html
|
|
285
|
+
│ ├── support
|
|
286
|
+
│ │ ├── ipython_visualization.py
|
|
287
|
+
│ │ ├── multi_plot.py
|
|
288
|
+
│ │ └── visualizeable.py
|
|
289
|
+
│ └── vmd
|
|
290
|
+
│ └── script.tcl
|
|
291
|
+
└── xarray.py
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Detailed installation instructions
|
|
295
|
+
|
|
296
|
+
### Optional dependencies
|
|
297
|
+
In the following, the `[vis]` suffix causes optional plotting dependencies to be
|
|
298
|
+
installed. If you are using `shnitsel-tools` on an HPC, you can omit it.
|
|
299
|
+
|
|
300
|
+
If you would like to contribute to `shnitsel-tools`, you may find the development
|
|
301
|
+
dependencies useful. These can be obtained by adding `[dev]` at the end of the
|
|
302
|
+
package name.
|
|
303
|
+
|
|
304
|
+
To install all optional dependencies, please add `[vis,dev]` after the package name.
|
|
305
|
+
|
|
306
|
+
### Installation using conda
|
|
307
|
+
|
|
308
|
+
#### For tutorials, tests or development (conda)
|
|
309
|
+
If you would like to work through the tutorials, run the tests, or modify the code, please use the following commands:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
git clone 'https://github.com/SHNITSEL/shnitsel-tools.git'
|
|
313
|
+
cd shnitsel-tools
|
|
314
|
+
conda create -n shnitsel python==3.12 pip
|
|
315
|
+
conda activate shnitsel
|
|
316
|
+
pip install -e .[vis,dev]
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
#### For ordinary use
|
|
320
|
+
If you would just like to use the package, it is unnecessary to clone the repository.
|
|
321
|
+
Instead, it should suffice to run the following command with the conda environment active:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
conda create -n shnitsel python==3.12 pip
|
|
325
|
+
conda activate shnitsel
|
|
326
|
+
pip install shnitsel-tools[vis]
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Instalation using uv
|
|
330
|
+
This tool is typically faster and more light-weight than `pip` and `conda`.
|
|
331
|
+
Unlike `conda`, it creates traditional Python virtual environments, which are stored in the folder in which the command is run and activated by sourcing
|
|
332
|
+
a shell-script. It can be installed by following the instructions at https://docs.astral.sh/uv/.
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
#### For tutorials, tests or development (uv)
|
|
336
|
+
If you would like to work through the tutorials or modify the code, run the tests, please use the following commands:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
git clone 'https://github.com/SHNITSEL/shnitsel-tools.git'
|
|
340
|
+
cd shnitsel-tools
|
|
341
|
+
uv venv --python 3.12 # create an environment under ./.venv
|
|
342
|
+
source .venv/bin/activate # activate the new environment
|
|
343
|
+
uv pip install -e .[vis,dev]
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
#### For ordinary use
|
|
347
|
+
If you would just like to use the package, it is unnecessary to clone the repository.
|
|
348
|
+
Instead, it should suffice to run the following commands:
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
uv venv --python 3.12 shnitsel # create a directory here named ./shnitsel
|
|
352
|
+
source shnitsel/bin/activate # activate the new environment
|
|
353
|
+
uv pip install shnitsel-tools[vis]
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
#### If you only want to use the command-line
|
|
357
|
+
The following will ensure the command-line programs provided are always available,
|
|
358
|
+
without requiring environments to be activated first.
|
|
359
|
+
This may be the easiest approach for use on HPC.
|
|
360
|
+
It is not expected to support interactive notebook-based workflows.
|
|
361
|
+
```bash
|
|
362
|
+
uv tool install shnitsel-tools
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
<!--
|
|
366
|
+
### For developers
|
|
367
|
+
|
|
368
|
+
We recommend installation using the `uv` tool, available at https://docs.astral.sh/uv/.
|
|
369
|
+
Please clone this repo and run the following in the `shnitsel-tools` directory:
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
git clone 'https://github.com/SHNITSEL/shnitsel-tools.git'
|
|
373
|
+
cd shnitsel-tools
|
|
374
|
+
uv venv # create an environment under ./.venv
|
|
375
|
+
source .venv/bin/activate # activate the new environment
|
|
376
|
+
uv pip install -e .[dev] # install shnitsel in editable mode
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
In the above, the option `-e` installs in editable mode, meaning that Python will see changes you make
|
|
380
|
+
to the source, while `[dev]` installs the optional development dependencies.
|
|
381
|
+
|
|
382
|
+
If you would like to contribute your changes,
|
|
383
|
+
please [fork](https://github.com/SHNITSEL/shnitsel-tools/fork) this repo,
|
|
384
|
+
and make a pull request.
|
|
385
|
+
|
|
386
|
+
-->
|
|
387
|
+
|
|
388
|
+
## Further Information
|
|
389
|
+
|
|
390
|
+
[](https://shnitsel.github.io/)
|
|
391
|
+
|
|
392
|
+
|