crossvib 0.1.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.
- crossvib-0.1.0/LICENSE +21 -0
- crossvib-0.1.0/PKG-INFO +115 -0
- crossvib-0.1.0/README.md +82 -0
- crossvib-0.1.0/pyproject.toml +56 -0
- crossvib-0.1.0/setup.cfg +4 -0
- crossvib-0.1.0/src/crossvib/__init__.py +18 -0
- crossvib-0.1.0/src/crossvib/__main__.py +9 -0
- crossvib-0.1.0/src/crossvib/core.py +2383 -0
- crossvib-0.1.0/src/crossvib/mapping.py +614 -0
- crossvib-0.1.0/src/crossvib.egg-info/PKG-INFO +115 -0
- crossvib-0.1.0/src/crossvib.egg-info/SOURCES.txt +14 -0
- crossvib-0.1.0/src/crossvib.egg-info/dependency_links.txt +1 -0
- crossvib-0.1.0/src/crossvib.egg-info/entry_points.txt +2 -0
- crossvib-0.1.0/src/crossvib.egg-info/requires.txt +10 -0
- crossvib-0.1.0/src/crossvib.egg-info/top_level.txt +1 -0
- crossvib-0.1.0/tests/test_import.py +28 -0
crossvib-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Adalberto V. S. de Araújo
|
|
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.
|
crossvib-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: crossvib
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Cross-environment vibrational normal-mode correlation and classification (VMARD/.nma and ORCA .hess)
|
|
5
|
+
Author: Adalberto V. S. de Araújo
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/YOUR_USERNAME/crossvib
|
|
8
|
+
Project-URL: Repository, https://github.com/YOUR_USERNAME/crossvib
|
|
9
|
+
Project-URL: Issues, https://github.com/YOUR_USERNAME/crossvib/issues
|
|
10
|
+
Keywords: vibrational-spectroscopy,normal-mode-analysis,computational-chemistry,quantum-chemistry,raman,infrared,vibanalysis,orca
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
22
|
+
Requires-Python: >=3.7
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: numpy>=1.21
|
|
26
|
+
Requires-Dist: networkx>=2.6
|
|
27
|
+
Provides-Extra: calibration
|
|
28
|
+
Requires-Dist: openpyxl>=3.0; extra == "calibration"
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: build; extra == "dev"
|
|
31
|
+
Requires-Dist: twine; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest; extra == "dev"
|
|
33
|
+
|
|
34
|
+
# CrossVib
|
|
35
|
+
|
|
36
|
+
**Cross-environment vibrational normal-mode correlation and classification.**
|
|
37
|
+
|
|
38
|
+
CrossVib classifies vibrational modes from vibAnalysis (VMARD) `.nma` output — or
|
|
39
|
+
directly from ORCA `.hess` files — and correlates modes between two calculations of
|
|
40
|
+
the same chemical system in *different environments* (solvent, surface, method,
|
|
41
|
+
oxidation state).
|
|
42
|
+
|
|
43
|
+
The comparison projects both calculations onto a **common internal-coordinate basis**
|
|
44
|
+
(the intersection of canonicalised internals after atom mapping), builds a phase-aware
|
|
45
|
+
**signed overlap matrix**, and reduces it with a symmetrised **Shannon mixing index**.
|
|
46
|
+
The primary reported quantity is the identity-retention metric
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
P_ret = 1 - H_bar (in [0, 1]; higher = better preserved across environments)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Because the basis is an *intersection*, the analysis is **independent of atom count** —
|
|
53
|
+
the signature capability for free-molecule vs. interacting-system comparisons.
|
|
54
|
+
|
|
55
|
+
## Installation
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install crossvib
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Runtime dependencies: `numpy`, `networkx`. The optional calibration-pool tooling also
|
|
62
|
+
needs `openpyxl` (`pip install "crossvib[calibration]"`).
|
|
63
|
+
|
|
64
|
+
## Usage
|
|
65
|
+
|
|
66
|
+
CrossVib has three subcommands: `single`, `compare`, and `multi-compare`.
|
|
67
|
+
|
|
68
|
+
Classify the modes of a single calculation:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
crossvib single molecule.nma # or: molecule.hess
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Correlate two calculations of the same solute in different environments:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
crossvib compare free.nma sers.nma \
|
|
78
|
+
--xyz-a free.xyz --xyz-b sers.xyz \
|
|
79
|
+
--range 200 3500 \
|
|
80
|
+
--emit-extras ./results/
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
For `.hess` input, geometry and normal modes are read directly from the ORCA Hessian
|
|
84
|
+
file, so `--xyz-a` / `--xyz-b` are not required. For `.nma` input they **are** required.
|
|
85
|
+
|
|
86
|
+
Multi-source (N ≥ 2 fragments) cooperativity analysis `(A₁ + A₂ + … + Aₙ) → B`:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
crossvib multi-compare fragA.hess fragB.hess complex.hess
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
You can also run it as a module:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
python -m crossvib compare free.nma sers.nma --xyz-a free.xyz --xyz-b sers.xyz
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Output formats are selectable with `--format {tsv|csv|md|pretty}`. The
|
|
99
|
+
`--emit-extras DIR` flag writes per-analysis TSVs (overlap matrix, robustness ranking,
|
|
100
|
+
frequency shifts, Raman transfer, EF decomposition, silent-mode activations).
|
|
101
|
+
|
|
102
|
+
## Method
|
|
103
|
+
|
|
104
|
+
The full methodology — internal-coordinate canonicalisation, VF2-based atom mapping,
|
|
105
|
+
phase-aware overlap, the symmetrised mixing index, conservation classes (C/X/R), and
|
|
106
|
+
the vCAL landmark pool — is documented in the accompanying methods paper.
|
|
107
|
+
|
|
108
|
+
## Citing
|
|
109
|
+
|
|
110
|
+
If CrossVib is useful in your work, please cite it. A `CITATION.cff` and DOI will be
|
|
111
|
+
added on first release.
|
|
112
|
+
|
|
113
|
+
## License
|
|
114
|
+
|
|
115
|
+
See [LICENSE](./LICENSE).
|
crossvib-0.1.0/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# CrossVib
|
|
2
|
+
|
|
3
|
+
**Cross-environment vibrational normal-mode correlation and classification.**
|
|
4
|
+
|
|
5
|
+
CrossVib classifies vibrational modes from vibAnalysis (VMARD) `.nma` output — or
|
|
6
|
+
directly from ORCA `.hess` files — and correlates modes between two calculations of
|
|
7
|
+
the same chemical system in *different environments* (solvent, surface, method,
|
|
8
|
+
oxidation state).
|
|
9
|
+
|
|
10
|
+
The comparison projects both calculations onto a **common internal-coordinate basis**
|
|
11
|
+
(the intersection of canonicalised internals after atom mapping), builds a phase-aware
|
|
12
|
+
**signed overlap matrix**, and reduces it with a symmetrised **Shannon mixing index**.
|
|
13
|
+
The primary reported quantity is the identity-retention metric
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
P_ret = 1 - H_bar (in [0, 1]; higher = better preserved across environments)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Because the basis is an *intersection*, the analysis is **independent of atom count** —
|
|
20
|
+
the signature capability for free-molecule vs. interacting-system comparisons.
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pip install crossvib
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Runtime dependencies: `numpy`, `networkx`. The optional calibration-pool tooling also
|
|
29
|
+
needs `openpyxl` (`pip install "crossvib[calibration]"`).
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
CrossVib has three subcommands: `single`, `compare`, and `multi-compare`.
|
|
34
|
+
|
|
35
|
+
Classify the modes of a single calculation:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
crossvib single molecule.nma # or: molecule.hess
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Correlate two calculations of the same solute in different environments:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
crossvib compare free.nma sers.nma \
|
|
45
|
+
--xyz-a free.xyz --xyz-b sers.xyz \
|
|
46
|
+
--range 200 3500 \
|
|
47
|
+
--emit-extras ./results/
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
For `.hess` input, geometry and normal modes are read directly from the ORCA Hessian
|
|
51
|
+
file, so `--xyz-a` / `--xyz-b` are not required. For `.nma` input they **are** required.
|
|
52
|
+
|
|
53
|
+
Multi-source (N ≥ 2 fragments) cooperativity analysis `(A₁ + A₂ + … + Aₙ) → B`:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
crossvib multi-compare fragA.hess fragB.hess complex.hess
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
You can also run it as a module:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
python -m crossvib compare free.nma sers.nma --xyz-a free.xyz --xyz-b sers.xyz
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Output formats are selectable with `--format {tsv|csv|md|pretty}`. The
|
|
66
|
+
`--emit-extras DIR` flag writes per-analysis TSVs (overlap matrix, robustness ranking,
|
|
67
|
+
frequency shifts, Raman transfer, EF decomposition, silent-mode activations).
|
|
68
|
+
|
|
69
|
+
## Method
|
|
70
|
+
|
|
71
|
+
The full methodology — internal-coordinate canonicalisation, VF2-based atom mapping,
|
|
72
|
+
phase-aware overlap, the symmetrised mixing index, conservation classes (C/X/R), and
|
|
73
|
+
the vCAL landmark pool — is documented in the accompanying methods paper.
|
|
74
|
+
|
|
75
|
+
## Citing
|
|
76
|
+
|
|
77
|
+
If CrossVib is useful in your work, please cite it. A `CITATION.cff` and DOI will be
|
|
78
|
+
added on first release.
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
See [LICENSE](./LICENSE).
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "crossvib"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Cross-environment vibrational normal-mode correlation and classification (VMARD/.nma and ORCA .hess)"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.7"
|
|
11
|
+
license = { text = "MIT" } # TODO: confirm your license choice (see LICENSE)
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Adalberto V. S. de Araújo" },
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"vibrational-spectroscopy",
|
|
17
|
+
"normal-mode-analysis",
|
|
18
|
+
"computational-chemistry",
|
|
19
|
+
"quantum-chemistry",
|
|
20
|
+
"raman",
|
|
21
|
+
"infrared",
|
|
22
|
+
"vibanalysis",
|
|
23
|
+
"orca",
|
|
24
|
+
]
|
|
25
|
+
classifiers = [
|
|
26
|
+
"Development Status :: 4 - Beta",
|
|
27
|
+
"Intended Audience :: Science/Research",
|
|
28
|
+
"License :: OSI Approved :: MIT License",
|
|
29
|
+
"Operating System :: OS Independent",
|
|
30
|
+
"Programming Language :: Python :: 3",
|
|
31
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
32
|
+
"Programming Language :: Python :: 3.7",
|
|
33
|
+
"Programming Language :: Python :: 3.8",
|
|
34
|
+
"Programming Language :: Python :: 3.9",
|
|
35
|
+
"Topic :: Scientific/Engineering :: Chemistry",
|
|
36
|
+
"Topic :: Scientific/Engineering :: Physics",
|
|
37
|
+
]
|
|
38
|
+
dependencies = [
|
|
39
|
+
"numpy>=1.21",
|
|
40
|
+
"networkx>=2.6",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[project.optional-dependencies]
|
|
44
|
+
calibration = ["openpyxl>=3.0"] # only needed for the vCAL calibration-pool tooling
|
|
45
|
+
dev = ["build", "twine", "pytest"]
|
|
46
|
+
|
|
47
|
+
[project.urls]
|
|
48
|
+
Homepage = "https://github.com/YOUR_USERNAME/crossvib" # TODO: update after creating the repo
|
|
49
|
+
Repository = "https://github.com/YOUR_USERNAME/crossvib"
|
|
50
|
+
Issues = "https://github.com/YOUR_USERNAME/crossvib/issues"
|
|
51
|
+
|
|
52
|
+
[project.scripts]
|
|
53
|
+
crossvib = "crossvib.core:main"
|
|
54
|
+
|
|
55
|
+
[tool.setuptools.packages.find]
|
|
56
|
+
where = ["src"]
|
crossvib-0.1.0/setup.cfg
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""CrossVib — cross-environment vibrational normal-mode correlation and classification.
|
|
2
|
+
|
|
3
|
+
Classifies vibrational modes from vibAnalysis (VMARD) ``.nma`` output — or directly
|
|
4
|
+
from ORCA ``.hess`` files — and correlates modes between two calculations of the same
|
|
5
|
+
chemical system in different environments (solvent, surface, method, oxidation state).
|
|
6
|
+
|
|
7
|
+
The comparison uses a common internal-coordinate projection with a phase-aware signed
|
|
8
|
+
overlap and a symmetrised Shannon mixing index, giving the identity-retention metric
|
|
9
|
+
``P_ret = 1 - H_bar`` in [0, 1]. Because the basis is the *intersection* of internal
|
|
10
|
+
coordinates after atom mapping, the analysis is independent of atom count — the
|
|
11
|
+
signature capability for free-molecule vs. interacting-system comparisons.
|
|
12
|
+
"""
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from crossvib.core import main
|
|
16
|
+
|
|
17
|
+
__all__ = ["main", "__version__"]
|
|
18
|
+
__version__ = "0.1.0"
|