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 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.
@@ -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).
@@ -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"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -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"
@@ -0,0 +1,9 @@
1
+ """Entry point for ``python -m crossvib``."""
2
+ from __future__ import annotations
3
+
4
+ import sys
5
+
6
+ from crossvib.core import main
7
+
8
+ if __name__ == "__main__":
9
+ sys.exit(main())