cryoem-halfmap-qc 0.3.2__py3-none-any.whl
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.
- cryoem_halfmap_qc-0.3.2.dist-info/METADATA +268 -0
- cryoem_halfmap_qc-0.3.2.dist-info/RECORD +55 -0
- cryoem_halfmap_qc-0.3.2.dist-info/WHEEL +5 -0
- cryoem_halfmap_qc-0.3.2.dist-info/entry_points.txt +2 -0
- cryoem_halfmap_qc-0.3.2.dist-info/licenses/LICENSE +21 -0
- cryoem_halfmap_qc-0.3.2.dist-info/top_level.txt +2 -0
- cryoem_mrc/__init__.py +135 -0
- cryoem_mrc/__main__.py +218 -0
- cryoem_mrc/analysis.py +815 -0
- cryoem_mrc/analysis_driver.py +369 -0
- cryoem_mrc/cli.py +159 -0
- cryoem_mrc/cohort_composition.py +75 -0
- cryoem_mrc/cohort_emdb.py +130 -0
- cryoem_mrc/cohort_labels.py +81 -0
- cryoem_mrc/cohort_pipeline.py +334 -0
- cryoem_mrc/cohort_resolution.py +156 -0
- cryoem_mrc/conformation_coupling.py +284 -0
- cryoem_mrc/conformation_pair.py +780 -0
- cryoem_mrc/density_source.py +49 -0
- cryoem_mrc/feature_ml.py +88 -0
- cryoem_mrc/figure_cleanup.py +87 -0
- cryoem_mrc/guinier_benchmark.py +338 -0
- cryoem_mrc/guinier_sharpening.py +521 -0
- cryoem_mrc/half_map_repro.py +180 -0
- cryoem_mrc/hessian.py +116 -0
- cryoem_mrc/incremental_prediction.py +370 -0
- cryoem_mrc/io.py +166 -0
- cryoem_mrc/local_fsc.py +458 -0
- cryoem_mrc/local_resolution.py +284 -0
- cryoem_mrc/local_resolution_io.py +359 -0
- cryoem_mrc/local_stats.py +235 -0
- cryoem_mrc/map_grid.py +374 -0
- cryoem_mrc/mask_bbox.py +116 -0
- cryoem_mrc/mechanics.py +398 -0
- cryoem_mrc/metric_comparison.py +236 -0
- cryoem_mrc/model_building_export.py +227 -0
- cryoem_mrc/model_map.py +97 -0
- cryoem_mrc/multiscale.py +124 -0
- cryoem_mrc/pipeline.py +196 -0
- cryoem_mrc/placement_decoupling.py +349 -0
- cryoem_mrc/placement_supplement.py +193 -0
- cryoem_mrc/placement_utility.py +1844 -0
- cryoem_mrc/qscore_validation.py +427 -0
- cryoem_mrc/reliability.py +205 -0
- cryoem_mrc/reliability_driver.py +638 -0
- cryoem_mrc/repo_paths.py +245 -0
- cryoem_mrc/rigidity.py +206 -0
- cryoem_mrc/structure_validation.py +1185 -0
- cryoem_mrc/tui.py +240 -0
- cryoem_mrc/tv_curvature.py +332 -0
- cryoem_mrc/visualize.py +203 -0
- cryoem_mrc/volume_slices.py +139 -0
- style/__init__.py +25 -0
- style/nature.py +194 -0
- style/thesis_palette.py +151 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cryoem-halfmap-qc
|
|
3
|
+
Version: 0.3.2
|
|
4
|
+
Summary: Local map reliability from cryo-EM density and half-maps
|
|
5
|
+
Author: Sarthak Mohanty
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/sarthaktexas/cryoem-halfmap-qc
|
|
8
|
+
Project-URL: Zenodo, https://doi.org/10.5281/zenodo.20618526
|
|
9
|
+
Keywords: cryo-em,half-map,reliability,mrc,structural-biology
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: numpy>=1.24
|
|
19
|
+
Requires-Dist: scipy>=1.10
|
|
20
|
+
Requires-Dist: mrcfile>=1.4
|
|
21
|
+
Requires-Dist: matplotlib>=3.7
|
|
22
|
+
Requires-Dist: gemmi>=0.6
|
|
23
|
+
Requires-Dist: seaborn>=0.13
|
|
24
|
+
Requires-Dist: pandas>=2.0
|
|
25
|
+
Requires-Dist: biopython>=1.80
|
|
26
|
+
Requires-Dist: tqdm>=4.60
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: build; extra == "dev"
|
|
29
|
+
Requires-Dist: twine; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# cryoem-halfmap-qc
|
|
33
|
+
|
|
34
|
+
[](https://doi.org/10.5281/zenodo.20618526)
|
|
35
|
+
|
|
36
|
+
Python tools for **local map reliability** in cryo-EM reconstructions: density statistics, half-map reproducibility, windowed local FSC (Å), a reproducibility score (H_repro), and build/caution/omit zones.
|
|
37
|
+
|
|
38
|
+
The goal is to test whether inexpensive map features track **half-map cross-correlation** and **local FSC** well enough to guide modeling. This is **not** a claim that density alone defines molecular flexibility.
|
|
39
|
+
|
|
40
|
+
All volumes use NumPy 3D arrays in `(Z, Y, X)` order (section, row, column), consistent with typical `mrcfile` layouts.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Install
|
|
45
|
+
|
|
46
|
+
**PyPI:** not published yet (`pip install cryoem-halfmap-qc` will fail until the first release is uploaded). See [Publishing to PyPI](#publishing-to-pypi) below.
|
|
47
|
+
|
|
48
|
+
Until then, install from GitHub or a local checkout:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git clone https://github.com/sarthaktexas/cryoem-halfmap-qc.git
|
|
52
|
+
cd cryoem-halfmap-qc
|
|
53
|
+
pip install -e .
|
|
54
|
+
|
|
55
|
+
# or without cloning:
|
|
56
|
+
pip install "git+https://github.com/sarthaktexas/cryoem-halfmap-qc.git@v0.3.2"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This installs the **`halfmap-qc`** command on your PATH (PyPI package name will be `cryoem-halfmap-qc` once published).
|
|
60
|
+
|
|
61
|
+
**Help & interactive mode:**
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
halfmap-qc # interactive menu (when run in a terminal)
|
|
65
|
+
halfmap-qc help # full command reference
|
|
66
|
+
halfmap-qc --help # argparse summary + examples
|
|
67
|
+
halfmap-qc cohort --help # flags for one subcommand
|
|
68
|
+
halfmap-qc interactive # menu explicitly
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Dependencies:** NumPy, SciPy, mrcfile, Matplotlib, gemmi, pandas.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Data layout
|
|
76
|
+
|
|
77
|
+
Cryo-EM maps are **not** stored in this repository (too large for git). After cloning, create local directories:
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
data/emd_<ID>-<label>/ # deposited map + half-maps (.map or .mrc)
|
|
81
|
+
outputs/emd_<ID>/ # pipeline products (created by scripts)
|
|
82
|
+
cohort/manifest.csv # EMDB IDs, relative paths, contours, validation labels
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Download deposited and half maps from [EMDB](https://www.ebi.ac.uk/emdb/). Use the depositor-recommended contour for each entry (listed in `cohort/manifest.csv`). See [docs/COHORT.md](docs/COHORT.md) for download status and pipeline progress.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Quick start
|
|
90
|
+
|
|
91
|
+
Run from the project root (where `data/` and `cohort/manifest.csv` live).
|
|
92
|
+
|
|
93
|
+
**Single-map features:**
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
halfmap-qc features path/to/map.mrc --out map_features.npz --float32
|
|
97
|
+
# shorthand (legacy): halfmap-qc path/to/map.mrc --out map_features.npz --float32
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Typical workflow** (features on avg-of-halves; reliability MRCs on deposited primary grid):
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
EMD=49450
|
|
104
|
+
CONTOUR=0.116
|
|
105
|
+
DATA=data/emd_${EMD}-mgtA_e2p+e1
|
|
106
|
+
|
|
107
|
+
halfmap-qc analyze \
|
|
108
|
+
--features "${DATA}/emd_${EMD}_avg_features_t0116.npz" \
|
|
109
|
+
--half1 "${DATA}/emd_${EMD}_half_map_1.map" \
|
|
110
|
+
--half2 "${DATA}/emd_${EMD}_half_map_2.map" \
|
|
111
|
+
--reference "${DATA}/emd_${EMD}.map" \
|
|
112
|
+
--contour "${CONTOUR}" \
|
|
113
|
+
--out-dir "outputs/emd_${EMD}/analysis"
|
|
114
|
+
|
|
115
|
+
halfmap-qc reliability --emd-id "${EMD}" --contour "${CONTOUR}" \
|
|
116
|
+
--features "${DATA}/emd_${EMD}_avg_features_t0116.npz" \
|
|
117
|
+
--halfmap-npz "outputs/emd_${EMD}/analysis/halfmap_metrics.npz"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Cohort batch** (all active manifest entries with local data):
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
halfmap-qc cohort --pending
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**ARC / SLURM** (one map per array task; save a local `*.sbatch` — not in git):
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# After pip install -e . and rsync data/ + cohort/manifest.csv to $SCRATCH/thesis
|
|
130
|
+
N=$(($(halfmap-qc cohort-ids | wc -l) - 1))
|
|
131
|
+
sbatch --account=wrz135 --array=0-${N} --cpus-per-task=4 --mem=32G --time=00:45:00 \
|
|
132
|
+
--wrap='halfmap-qc cohort --emd-id $(halfmap-qc cohort-ids | sed -n "$((SLURM_ARRAY_TASK_ID+1))p")'
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Or save a multi-line script as e.g. `~/halfmap-qc_array.sbatch` (gitignored) and `sbatch --array=0-${N} ~/halfmap-qc_array.sbatch`.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## CLI (`halfmap-qc`)
|
|
140
|
+
|
|
141
|
+
| Command | Purpose |
|
|
142
|
+
| --- | --- |
|
|
143
|
+
| *(no args, TTY)* | Interactive menu |
|
|
144
|
+
| `halfmap-qc help` | Full reference + install notes |
|
|
145
|
+
| `halfmap-qc features` | Local density / multiscale features → `.npz` |
|
|
146
|
+
| `halfmap-qc analyze` | Windowed half-map CC + feature correlations |
|
|
147
|
+
| `halfmap-qc reliability` | Reliability score, build zones, MRC export |
|
|
148
|
+
| `halfmap-qc cohort` | Batch pipeline from `cohort/manifest.csv` |
|
|
149
|
+
| `halfmap-qc cohort-ids` | Print EMDB IDs (for SLURM array jobs) |
|
|
150
|
+
| `halfmap-qc interactive` | Interactive menu (same as bare `halfmap-qc`) |
|
|
151
|
+
|
|
152
|
+
Legacy: `python -m cryoem_mrc` still works (same as `halfmap-qc features`).
|
|
153
|
+
|
|
154
|
+
## Publishing to PyPI
|
|
155
|
+
|
|
156
|
+
One-time setup:
|
|
157
|
+
|
|
158
|
+
1. Create an account at [pypi.org](https://pypi.org/account/register/) (and optionally [test.pypi.org](https://test.pypi.org/) for a dry run).
|
|
159
|
+
2. On PyPI → **Your projects** → **Add new project** → name it `cryoem-halfmap-qc` (or claim it when uploading).
|
|
160
|
+
3. On PyPI → **Account settings** → **Publishing** → **Add a new pending publisher**:
|
|
161
|
+
- PyPI project: `cryoem-halfmap-qc`
|
|
162
|
+
- Owner: `sarthaktexas` (your GitHub user/org)
|
|
163
|
+
- Repository: `cryoem-halfmap-qc`
|
|
164
|
+
- Workflow: `publish.yml`
|
|
165
|
+
- Environment: (leave blank unless you use one)
|
|
166
|
+
|
|
167
|
+
Release:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# bump version in pyproject.toml first, then:
|
|
171
|
+
git add pyproject.toml cryoem_mrc/__init__.py
|
|
172
|
+
git commit -m "Release v0.3.2"
|
|
173
|
+
git tag v0.3.2
|
|
174
|
+
git push origin main --tags
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
On GitHub → **Releases** → **Draft a new release** → choose tag `v0.3.2` → **Publish release**. The [`.github/workflows/publish.yml`](.github/workflows/publish.yml) workflow builds the wheel and uploads to PyPI.
|
|
178
|
+
|
|
179
|
+
Test install after publish:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
pip install cryoem-halfmap-qc
|
|
183
|
+
halfmap-qc --version
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Manual upload (without GitHub Actions):
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
pip install build twine
|
|
190
|
+
python -m build
|
|
191
|
+
twine upload dist/*
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Scripts (thesis / optional)
|
|
195
|
+
|
|
196
|
+
Thesis figure runners (`scripts/rerun_all_figures.py`, `scripts/run_cohort_summary_figures.py`, Figma export scripts, etc.) and `cryoem_mrc/thesis_figures.py` are **local-only** (gitignored) like `figma-plugins/`. Clone the repo on a machine that already has those files, or keep a local copy from before they were untracked.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Python API (high level)
|
|
201
|
+
|
|
202
|
+
```python
|
|
203
|
+
import numpy as np
|
|
204
|
+
from cryoem_mrc import load_full_and_half_maps, run_pipeline, half_map_local_metrics
|
|
205
|
+
from cryoem_mrc.reliability import compute_reliability_maps, classify_build_zones
|
|
206
|
+
|
|
207
|
+
bundle = load_full_and_half_maps(
|
|
208
|
+
"full.mrc", "half1.mrc", "half2.mrc", dtype=np.float32, resample_if_needed=True
|
|
209
|
+
)
|
|
210
|
+
metrics = half_map_local_metrics(bundle.half1, bundle.half2, window=5)
|
|
211
|
+
# metrics["windowed_halfmap_correlation"], etc.
|
|
212
|
+
|
|
213
|
+
features = run_pipeline("map.mrc", use_float32=True)
|
|
214
|
+
reliability = compute_reliability_maps(
|
|
215
|
+
bundle.half1, bundle.half2,
|
|
216
|
+
density_normalized=features["density_normalized"],
|
|
217
|
+
window=5,
|
|
218
|
+
)
|
|
219
|
+
zones = classify_build_zones(reliability["reliability_score"])
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**Package modules:** `io`, `map_grid`, `local_stats`, `multiscale`, `half_map_repro`, `local_fsc`, `mechanics`, `reliability`, `analysis`, `structure_validation`. Path helpers: `cryoem_mrc/repo_paths.py`.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Methods summary
|
|
227
|
+
|
|
228
|
+
- **Windowed half-map correlation** is the fast internal reproducibility target for feature validation; **local FSC resolution (Å)** is the field-standard reference.
|
|
229
|
+
- **Local FSC** is computed in-repo (`cryoem_mrc.local_fsc`); external BlocRes / ResMap / MonoRes maps are not loaded.
|
|
230
|
+
- **H_repro** is the windowed gradient-constraint map *V* (legacy export name; ranked as **reliability_score**); **reliability_score** is an in-mask percentile used for build/caution/omit terciles. Resolvability gating uses windowed half-map CC or local FSC, not a separate disagreement map.
|
|
231
|
+
- **Local variance** is often the strongest single feature predictor of windowed half-map correlation.
|
|
232
|
+
|
|
233
|
+
**Thesis prose:** full narrative draft in [docs/THESIS_NARRATIVE.md](docs/THESIS_NARRATIVE.md). Writing guide and defense notes in [docs/THESIS_AND_PUBLICATION.md](docs/THESIS_AND_PUBLICATION.md).
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Tests
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
python -m unittest discover -s tests -v
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Citation
|
|
246
|
+
|
|
247
|
+
**Before the manuscript is published**, cite the software with the Zenodo concept DOI (resolves to the latest release; pin `v0.3.2` or a commit hash for exact reproducibility):
|
|
248
|
+
|
|
249
|
+
```bibtex
|
|
250
|
+
@software{mohanty2026cryoem_halfmap_qc,
|
|
251
|
+
author = {Mohanty, Sarthak},
|
|
252
|
+
title = {cryoem-halfmap-qc: local map reliability from cryo-EM density and half-maps},
|
|
253
|
+
year = {2026},
|
|
254
|
+
doi = {10.5281/zenodo.20618526},
|
|
255
|
+
url = {https://doi.org/10.5281/zenodo.20618526},
|
|
256
|
+
version = {0.3.2}
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
GitHub also reads [CITATION.cff](CITATION.cff) for the **Cite this repository** button.
|
|
261
|
+
|
|
262
|
+
**After publication**, cite the paper as the primary reference. Also cite this Zenodo archive when you need the exact pipeline version used in the work.
|
|
263
|
+
|
|
264
|
+
When the manuscript exists, add a `preferred-citation` block to `CITATION.cff` (template included there) and drop the BibTeX for the article into this section.
|
|
265
|
+
|
|
266
|
+
## License
|
|
267
|
+
|
|
268
|
+
MIT License. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
cryoem_halfmap_qc-0.3.2.dist-info/licenses/LICENSE,sha256=UXAZZ4qb_f-prHvxOzvvreBQVk-4SpKdzbxqM1TX04c,1072
|
|
2
|
+
cryoem_mrc/__init__.py,sha256=hO9W9Sk8lE7kBCbDPUE4hYUDJsJoyuL7rUwRd1PLsOA,3888
|
|
3
|
+
cryoem_mrc/__main__.py,sha256=6R_xbimGndhGpNTHHjn1sa4b5CEXKMhzNXUdW7rqP_4,7621
|
|
4
|
+
cryoem_mrc/analysis.py,sha256=wIGAgWhVm13yA7F0JH-iUUobIdTm0zeszAwCxtUsvc4,27318
|
|
5
|
+
cryoem_mrc/analysis_driver.py,sha256=BrQkGEqvoVDl0VLFjYzi6xuwnwxVRF1SH1jlofpoHGM,15129
|
|
6
|
+
cryoem_mrc/cli.py,sha256=m9rdWCYoUvJe4AwzgIjwWaNSTwyrjuIcj35-KwzOTlE,4762
|
|
7
|
+
cryoem_mrc/cohort_composition.py,sha256=OTgveBKSEgLQt_y_aSFJH45XicSLEt3f7kGkKQCmP0k,2440
|
|
8
|
+
cryoem_mrc/cohort_emdb.py,sha256=1PB43Z-lic2MV_-JnXbXSqH6K9PE4XYjPrLK-mkAzR4,4126
|
|
9
|
+
cryoem_mrc/cohort_labels.py,sha256=xQ2SJPmSN24I3g7veU9vFshPDLd9qPx5LvZmjO7NrQ0,2516
|
|
10
|
+
cryoem_mrc/cohort_pipeline.py,sha256=tfhY7krKYvMDmHmxZpXdtuvufJsOv5MW6UlKVaHoB_o,10950
|
|
11
|
+
cryoem_mrc/cohort_resolution.py,sha256=fWxGJjQ7q8iqBgYn9KSXQKvE5chedibPctNsrrAC0JQ,4969
|
|
12
|
+
cryoem_mrc/conformation_coupling.py,sha256=8Fk8rsyahaTz3m3K1Vr4GD66p_vtQ34Tp81_cuY72L4,9114
|
|
13
|
+
cryoem_mrc/conformation_pair.py,sha256=wb6kxbUacobdIVoChw2wCjejOb-fN6fUa2HOnE5q3C4,28137
|
|
14
|
+
cryoem_mrc/density_source.py,sha256=FYlM76f_hLzU8w5m3xbXYUAK6yie9eFiYLK1r9CCScE,1644
|
|
15
|
+
cryoem_mrc/feature_ml.py,sha256=xCWRGD-0DQdH7O-6mPLhe6vKoO7xwYWRRC2-h0JysCc,2669
|
|
16
|
+
cryoem_mrc/figure_cleanup.py,sha256=BTzDcI-4yvq6CvBb-wqVTWvMjD5S2xRcZmk4HVt81s0,2936
|
|
17
|
+
cryoem_mrc/guinier_benchmark.py,sha256=_PuedyaXDn3pGSKyv3L8IhWHanYPdZOTsSELoFiR4sA,11790
|
|
18
|
+
cryoem_mrc/guinier_sharpening.py,sha256=pb85ELioeuttaMMGJIINvEc2Qd14ZL92uAfRdWZUpuY,16922
|
|
19
|
+
cryoem_mrc/half_map_repro.py,sha256=ByqkeT2vkROzbgfQwsi1bb5GGfixcQxWEnt1qCFX8bk,6371
|
|
20
|
+
cryoem_mrc/hessian.py,sha256=hnb9PnklgA8owxPzxrcvHpEqMqvkIykx72fAlRTugqY,3485
|
|
21
|
+
cryoem_mrc/incremental_prediction.py,sha256=5nOFxuGp8LGbOOnQ3p3u3Y9Pz6pZC2JkJqHIc2WZjuE,12372
|
|
22
|
+
cryoem_mrc/io.py,sha256=d4b8-ghe4bBI-hgBDsDfgCogEdkogk0KonVm5ZD2IBo,5384
|
|
23
|
+
cryoem_mrc/local_fsc.py,sha256=uQXie1wpBlI-DfTBtmOya6RK5oH_YwTaNitfOUcJ8IM,15810
|
|
24
|
+
cryoem_mrc/local_resolution.py,sha256=eTx5GhFBZTvezl-T0_Mso2x7N3QwBGAaBUgTK5k6exI,9845
|
|
25
|
+
cryoem_mrc/local_resolution_io.py,sha256=2igmlfIce4qrbX_GwxFJSyFNfaE_QsDVEJshUeuZwr4,12214
|
|
26
|
+
cryoem_mrc/local_stats.py,sha256=rY1iE-CkToFHSUo-7sDSp_CCKC1VYS-9Kob1p4p6gho,8159
|
|
27
|
+
cryoem_mrc/map_grid.py,sha256=V--gaXklZPH-YIyZjcQ8EJ_lBFtYC50inmbHYQwJo7w,12306
|
|
28
|
+
cryoem_mrc/mask_bbox.py,sha256=B5EX-KS2NdOe8sv8oa7uhgegoG1NIiPXxTOA-lZIWaI,3423
|
|
29
|
+
cryoem_mrc/mechanics.py,sha256=Rk4swGcYDRewF41LVZ1jB7ZfuP9lwEa3Tl-RQjQBG38,12778
|
|
30
|
+
cryoem_mrc/metric_comparison.py,sha256=2E-8wSuQ85mTztpc1v8Fq9eWbDC8QL2VLuqoUih1L-g,8340
|
|
31
|
+
cryoem_mrc/model_building_export.py,sha256=cCEpHyf5_diZc3eOX1eB8NuNflQ_vi0X3sVZ12qn7wU,7770
|
|
32
|
+
cryoem_mrc/model_map.py,sha256=OrS8r3nwdE0Xw-7gDygvJVA-FpS2OnlRI03EqaT9oqM,3650
|
|
33
|
+
cryoem_mrc/multiscale.py,sha256=MH4fadd85JMzg6QnZ8_52YLjBUHlnwEcPbpB1zORqmA,4377
|
|
34
|
+
cryoem_mrc/pipeline.py,sha256=2txsl-v3OkUc4CDzrfwSxf2f0_oedVuAO3ucKIJ37cg,7145
|
|
35
|
+
cryoem_mrc/placement_decoupling.py,sha256=VMR2LBmJWYwJn-VFcL91T9tmachNNHUzK0GtCo3IH-o,12092
|
|
36
|
+
cryoem_mrc/placement_supplement.py,sha256=v7Cm0zKZySmNSkh0fdSpmrsSGwqUjZl2qVRUuR5zUQ4,6351
|
|
37
|
+
cryoem_mrc/placement_utility.py,sha256=7xrSJe2EJeA4PiMgZ9daSRvuN--Y-p9NZLqTivAN4jA,66412
|
|
38
|
+
cryoem_mrc/qscore_validation.py,sha256=0_Rfvp8scyLE7OSHmyk0D7sahsgLF-LH5lk4GxTpKoE,14319
|
|
39
|
+
cryoem_mrc/reliability.py,sha256=sOovh3oTya6nm8zBYquU08Mfr3CDFBNNN5C6LrT4Pgg,6724
|
|
40
|
+
cryoem_mrc/reliability_driver.py,sha256=OOhZ65v18011xehXx_2IADg3MP5iv6k18SWAXDaQVXM,23651
|
|
41
|
+
cryoem_mrc/repo_paths.py,sha256=DqP7wCTz_SzIVb3C0p0R4DDZnByZODWkyWVsJpZST3A,8980
|
|
42
|
+
cryoem_mrc/rigidity.py,sha256=BEAr8GsM-1Q0haPE6vwCcIgBlbS8J0k7lQjYcpHIvRE,7758
|
|
43
|
+
cryoem_mrc/structure_validation.py,sha256=yzp5ruhapHm5CCsuYpz2WBtUxS0mxRusHK24MamNYNQ,42234
|
|
44
|
+
cryoem_mrc/tui.py,sha256=FIe94fZyCf4Qj-satHh7X8DOI_X1FTNHrr6rXMOpLXI,7034
|
|
45
|
+
cryoem_mrc/tv_curvature.py,sha256=wBL3jNY66Kpc9_M4AJ4tSwRoV3yxfeg687iC8KsBX8I,11966
|
|
46
|
+
cryoem_mrc/visualize.py,sha256=2C84qkPUGnmwC5RM0raCYyYTdz4OrH0strSjPAM3Hpc,6779
|
|
47
|
+
cryoem_mrc/volume_slices.py,sha256=RxRH1j3t-gCR5t_LB_kBPMlswlKl2K0bmmEveUeE0aM,3918
|
|
48
|
+
style/__init__.py,sha256=j4KKTYWhv6pmd-AKAjn5B-ZQ9um-3rwPLn2B4bOkduU,511
|
|
49
|
+
style/nature.py,sha256=ekthsCMUnp-FHNi-qHaAtw8HSai8WOeiWjsS_EbhmsA,5220
|
|
50
|
+
style/thesis_palette.py,sha256=Kxb4RtuMZk_o5oPocdTQC3Gl0Q1GrRMHos6Y9IaUphE,3926
|
|
51
|
+
cryoem_halfmap_qc-0.3.2.dist-info/METADATA,sha256=OE_HhQ8wx2fF9kujlZtTEHwuf76Dt3fvsWd8V8aMcds,9997
|
|
52
|
+
cryoem_halfmap_qc-0.3.2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
53
|
+
cryoem_halfmap_qc-0.3.2.dist-info/entry_points.txt,sha256=qGGvXnOvP-n5w53Xkt7nvlJkakXnDCKgOtNcvPXJWvQ,51
|
|
54
|
+
cryoem_halfmap_qc-0.3.2.dist-info/top_level.txt,sha256=1XtUN4SgNNGh7Yx5Ea94unaHqjYsG3BxCRcXypWX5gk,17
|
|
55
|
+
cryoem_halfmap_qc-0.3.2.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sarthak Mohanty
|
|
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.
|
cryoem_mrc/__init__.py
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""Cryo-EM MRC density map feature extraction pipeline."""
|
|
2
|
+
|
|
3
|
+
try:
|
|
4
|
+
from importlib.metadata import version as _pkg_version
|
|
5
|
+
|
|
6
|
+
__version__ = _pkg_version("cryoem-halfmap-qc")
|
|
7
|
+
except Exception:
|
|
8
|
+
__version__ = "0.3.2"
|
|
9
|
+
|
|
10
|
+
from .analysis import (
|
|
11
|
+
BinnedRelationship,
|
|
12
|
+
FeatureCorrelation,
|
|
13
|
+
MaskedAnalysisResult,
|
|
14
|
+
binned_feature_by_target,
|
|
15
|
+
build_contour_mask,
|
|
16
|
+
compute_feature_target_correlations,
|
|
17
|
+
half_map_local_metrics_chunked,
|
|
18
|
+
plot_feature_vs_target_scatter,
|
|
19
|
+
plot_halfmap_metric_histogram,
|
|
20
|
+
write_correlation_csv,
|
|
21
|
+
write_summary_text,
|
|
22
|
+
)
|
|
23
|
+
from .half_map_repro import (
|
|
24
|
+
half_map_local_metrics,
|
|
25
|
+
plot_half_map_metric_distributions,
|
|
26
|
+
save_half_map_metrics_mrc,
|
|
27
|
+
)
|
|
28
|
+
from .io import load_mrc, save_rigidity_mrc, save_volume_like_reference
|
|
29
|
+
from .local_fsc import compute_local_fsc_resolution, save_local_fsc_resolution_mrc
|
|
30
|
+
from .local_stats import sliding_local_statistics_pipeline
|
|
31
|
+
from .local_resolution_io import (
|
|
32
|
+
LocalResolutionGridReport,
|
|
33
|
+
LocalResolutionSource,
|
|
34
|
+
build_dataset_from_pipeline,
|
|
35
|
+
export_masked_feature_dataset,
|
|
36
|
+
load_local_resolution_map,
|
|
37
|
+
resample_local_resolution_onto_reference,
|
|
38
|
+
verify_local_resolution_matches_reference,
|
|
39
|
+
)
|
|
40
|
+
from .map_grid import (
|
|
41
|
+
FullHalfMapBundle,
|
|
42
|
+
GridAlignmentReport,
|
|
43
|
+
MapGrid,
|
|
44
|
+
ensure_same_grid,
|
|
45
|
+
load_full_and_half_maps,
|
|
46
|
+
load_map_grid,
|
|
47
|
+
resample_volume_onto_grid,
|
|
48
|
+
verify_grid_alignment,
|
|
49
|
+
verify_same_grid_as_reference,
|
|
50
|
+
)
|
|
51
|
+
from .multiscale import group_multiscale_features
|
|
52
|
+
from .pipeline import (
|
|
53
|
+
load_feature_maps,
|
|
54
|
+
run_pipeline,
|
|
55
|
+
save_feature_maps,
|
|
56
|
+
save_feature_maps_npy,
|
|
57
|
+
)
|
|
58
|
+
from .mechanics import (
|
|
59
|
+
compute_mechanics_headlines,
|
|
60
|
+
compute_mechanics_maps,
|
|
61
|
+
fluctuation_constraint_decomposition,
|
|
62
|
+
)
|
|
63
|
+
from .reliability import (
|
|
64
|
+
attach_reliability_to_features,
|
|
65
|
+
classify_build_zones,
|
|
66
|
+
compute_reliability_maps,
|
|
67
|
+
save_build_zone_mrc,
|
|
68
|
+
save_reliability_mrc,
|
|
69
|
+
)
|
|
70
|
+
from .rigidity import compute_rigidity_map
|
|
71
|
+
from .visualize import (
|
|
72
|
+
plot_central_orthogonal_slices,
|
|
73
|
+
plot_feature_slices,
|
|
74
|
+
plot_rigidity_inspection,
|
|
75
|
+
plot_volume_histogram,
|
|
76
|
+
rigidity_inspection_keys,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
__all__ = [
|
|
80
|
+
"load_mrc",
|
|
81
|
+
"save_volume_like_reference",
|
|
82
|
+
"save_rigidity_mrc",
|
|
83
|
+
"run_pipeline",
|
|
84
|
+
"save_feature_maps",
|
|
85
|
+
"save_feature_maps_npy",
|
|
86
|
+
"load_feature_maps",
|
|
87
|
+
"group_multiscale_features",
|
|
88
|
+
"compute_mechanics_headlines",
|
|
89
|
+
"compute_mechanics_maps",
|
|
90
|
+
"fluctuation_constraint_decomposition",
|
|
91
|
+
"attach_reliability_to_features",
|
|
92
|
+
"classify_build_zones",
|
|
93
|
+
"compute_reliability_maps",
|
|
94
|
+
"save_build_zone_mrc",
|
|
95
|
+
"save_reliability_mrc",
|
|
96
|
+
"compute_rigidity_map",
|
|
97
|
+
"plot_feature_slices",
|
|
98
|
+
"plot_rigidity_inspection",
|
|
99
|
+
"rigidity_inspection_keys",
|
|
100
|
+
"compute_local_fsc_resolution",
|
|
101
|
+
"save_local_fsc_resolution_mrc",
|
|
102
|
+
"LocalResolutionSource",
|
|
103
|
+
"LocalResolutionGridReport",
|
|
104
|
+
"load_local_resolution_map",
|
|
105
|
+
"resample_local_resolution_onto_reference",
|
|
106
|
+
"verify_local_resolution_matches_reference",
|
|
107
|
+
"export_masked_feature_dataset",
|
|
108
|
+
"build_dataset_from_pipeline",
|
|
109
|
+
"MapGrid",
|
|
110
|
+
"GridAlignmentReport",
|
|
111
|
+
"FullHalfMapBundle",
|
|
112
|
+
"load_map_grid",
|
|
113
|
+
"verify_grid_alignment",
|
|
114
|
+
"verify_same_grid_as_reference",
|
|
115
|
+
"resample_volume_onto_grid",
|
|
116
|
+
"ensure_same_grid",
|
|
117
|
+
"load_full_and_half_maps",
|
|
118
|
+
"sliding_local_statistics_pipeline",
|
|
119
|
+
"half_map_local_metrics",
|
|
120
|
+
"save_half_map_metrics_mrc",
|
|
121
|
+
"plot_half_map_metric_distributions",
|
|
122
|
+
"plot_central_orthogonal_slices",
|
|
123
|
+
"plot_volume_histogram",
|
|
124
|
+
"BinnedRelationship",
|
|
125
|
+
"FeatureCorrelation",
|
|
126
|
+
"MaskedAnalysisResult",
|
|
127
|
+
"binned_feature_by_target",
|
|
128
|
+
"build_contour_mask",
|
|
129
|
+
"compute_feature_target_correlations",
|
|
130
|
+
"half_map_local_metrics_chunked",
|
|
131
|
+
"plot_feature_vs_target_scatter",
|
|
132
|
+
"plot_halfmap_metric_histogram",
|
|
133
|
+
"write_correlation_csv",
|
|
134
|
+
"write_summary_text",
|
|
135
|
+
]
|