MultiMM 2.0.2__tar.gz → 2.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.
- multimm-2.1.1/PKG-INFO +151 -0
- multimm-2.1.1/README.md +106 -0
- {multimm-2.0.2 → multimm-2.1.1}/pyproject.toml +12 -1
- multimm-2.1.1/src/MultiMM.egg-info/PKG-INFO +151 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/SOURCES.txt +20 -1
- {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/requires.txt +5 -0
- multimm-2.1.1/src/multimm/__init__.py +11 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/bridge.py +2 -1
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/config.py +227 -13
- multimm-2.1.1/src/multimm/facts.py +50 -0
- multimm-2.1.1/src/multimm/hic_force.py +442 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/initial_structure_tools.py +7 -0
- multimm-2.1.1/src/multimm/logger.py +751 -0
- multimm-2.1.1/src/multimm/model.py +2086 -0
- multimm-2.1.1/src/multimm/plots.py +1801 -0
- multimm-2.1.1/src/multimm/quality_tests.py +889 -0
- multimm-2.1.1/src/multimm/read_hic.py +1185 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/run.py +246 -97
- multimm-2.1.1/src/multimm/structural_analysis.py +665 -0
- multimm-2.1.1/src/multimm/utils.py +1272 -0
- multimm-2.1.1/src/multimm/validation.py +1482 -0
- multimm-2.1.1/tests/test_config.py +102 -0
- multimm-2.1.1/tests/test_force_signs.py +173 -0
- multimm-2.1.1/tests/test_genes.py +68 -0
- multimm-2.1.1/tests/test_hic_force.py +69 -0
- multimm-2.1.1/tests/test_known_issues.py +25 -0
- multimm-2.1.1/tests/test_lamina.py +55 -0
- multimm-2.1.1/tests/test_logger.py +86 -0
- multimm-2.1.1/tests/test_loops.py +43 -0
- multimm-2.1.1/tests/test_nucleosomes.py +27 -0
- multimm-2.1.1/tests/test_presets.py +49 -0
- multimm-2.1.1/tests/test_read_hic.py +79 -0
- multimm-2.1.1/tests/test_run_validation.py +133 -0
- multimm-2.1.1/tests/test_simulations.py +58 -0
- multimm-2.1.1/tests/test_structure_tools.py +51 -0
- multimm-2.1.1/tests/test_utils.py +78 -0
- multimm-2.1.1/tests/test_validation_metrics.py +74 -0
- multimm-2.0.2/PKG-INFO +0 -623
- multimm-2.0.2/README.md +0 -587
- multimm-2.0.2/src/MultiMM.egg-info/PKG-INFO +0 -623
- multimm-2.0.2/src/multimm/__init__.py +0 -4
- multimm-2.0.2/src/multimm/logger.py +0 -51
- multimm-2.0.2/src/multimm/model.py +0 -1259
- multimm-2.0.2/src/multimm/plots.py +0 -801
- multimm-2.0.2/src/multimm/utils.py +0 -739
- multimm-2.0.2/src/multimm/validation.py +0 -746
- multimm-2.0.2/tests/test_run_validation.py +0 -88
- multimm-2.0.2/tests/test_simulations.py +0 -129
- {multimm-2.0.2 → multimm-2.1.1}/LICENSE +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/setup.cfg +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/dependency_links.txt +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/entry_points.txt +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/top_level.txt +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/args_definition.py +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/data/hg38_gtf_annotations.tsv +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/enums.py +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/forcefields/dna_histones_ff.xml +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/forcefields/ff.xml +0 -0
- {multimm-2.0.2 → multimm-2.1.1}/src/multimm/nucleosome_interpolation.py +0 -0
multimm-2.1.1/PKG-INFO
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: MultiMM
|
|
3
|
+
Version: 2.1.1
|
|
4
|
+
Summary: A tool for chromatin modeling from nucleosomes to chromosomal territories.
|
|
5
|
+
Author-email: Sebastian Korsak <s.korsak@datascience.edu.pl>
|
|
6
|
+
License: GNU General Public License v3.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/SFGLab/MultiMM
|
|
8
|
+
Project-URL: Documentation, https://sfglab.github.io/MultiMM/
|
|
9
|
+
Project-URL: Source, https://github.com/SFGLab/MultiMM
|
|
10
|
+
Project-URL: Issues, https://github.com/SFGLab/MultiMM/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/SFGLab/MultiMM/releases
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
14
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: numpy>=1.26.4
|
|
19
|
+
Requires-Dist: scipy>=1.11
|
|
20
|
+
Requires-Dist: pandas>=2.2.2
|
|
21
|
+
Requires-Dist: argparse>=1.4.0
|
|
22
|
+
Requires-Dist: matplotlib>=3.8.2
|
|
23
|
+
Requires-Dist: mdtraj>=1.9.9
|
|
24
|
+
Requires-Dist: seaborn>=0.12.2
|
|
25
|
+
Requires-Dist: scikit-learn>=1.3.0
|
|
26
|
+
Requires-Dist: configparser>=6.0.1
|
|
27
|
+
Requires-Dist: typing-extensions>=4.7.1
|
|
28
|
+
Requires-Dist: pyBigWig>=0.3.22
|
|
29
|
+
Requires-Dist: hilbertcurve>=2.0.5
|
|
30
|
+
Requires-Dist: tqdm>=4.65.2
|
|
31
|
+
Requires-Dist: pyvista[all]
|
|
32
|
+
Requires-Dist: OpenMM>=8.5.1
|
|
33
|
+
Requires-Dist: pydantic>=2.0.0
|
|
34
|
+
Requires-Dist: cooler>=0.10.2
|
|
35
|
+
Requires-Dist: scikit-image>=0.21.0
|
|
36
|
+
Provides-Extra: hic
|
|
37
|
+
Requires-Dist: hic-straw>=1.3.1; extra == "hic"
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: ruff; extra == "dev"
|
|
40
|
+
Requires-Dist: black; extra == "dev"
|
|
41
|
+
Requires-Dist: isort; extra == "dev"
|
|
42
|
+
Requires-Dist: docformatter; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest; extra == "dev"
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
<p align="center">
|
|
47
|
+
<img src="https://raw.githubusercontent.com/SFGLab/MultiMM/main/docs/assets/multimm_logo.png" alt="MultiMM" width="100%">
|
|
48
|
+
</p>
|
|
49
|
+
|
|
50
|
+
[](https://pypi.org/project/MultiMM/) · **[Documentation](https://sfglab.github.io/MultiMM/)** · [Source](https://github.com/SFGLab/MultiMM)
|
|
51
|
+
|
|
52
|
+
**MultiMM** is an [OpenMM](https://openmm.org)-based tool for building 3D models of chromatin, from single genomic regions to the whole human genome. It is *multiscale*: one energy function covers nucleosomes, loops and TADs, A/B compartments, chromosome territories and the nucleus. You give it loop calls, and optionally compartments or a Hi-C map, and it returns a 3D structure that you can open in any molecular viewer. The model is fast because it starts from a compact Hilbert-curve conformation and runs on GPUs through OpenMM.
|
|
53
|
+
|
|
54
|
+
<p align="center">
|
|
55
|
+
<img src="https://raw.githubusercontent.com/SFGLab/MultiMM/main/docs/assets/workflow.png" alt="MultiMM workflow" width="720">
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
## Scales of modelling
|
|
59
|
+
|
|
60
|
+
One energy function ties together five scales. Each is a different way of looking at the same chain of beads.
|
|
61
|
+
|
|
62
|
+
| Scale | What it means | How MultiMM models it |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| **Nucleosome / fibre** | DNA wrapped around histones, forming a ~10 nm fibre | Beads joined by bonds and angle (stiffness) terms, with excluded volume so beads do not overlap |
|
|
65
|
+
| **Loops** | Pairs of distant sites held together, e.g. by CTCF and cohesin | Harmonic springs between loop anchors, taken from your loop file |
|
|
66
|
+
| **TADs / Hi-C contacts** | Domains that fold together more than with their surroundings | Optional restraints derived from a Hi-C map by Boltzmann inversion |
|
|
67
|
+
| **A/B compartments** | Active (A) and inactive (B) chromatin that cluster by type | Soft attraction between beads of the same compartment type |
|
|
68
|
+
| **Chromosomes and nucleus** | Chromosome territories inside a nucleus, anchored at the lamina | Container wall, lamina and chromosome-block forces |
|
|
69
|
+
|
|
70
|
+
## Install
|
|
71
|
+
|
|
72
|
+
From PyPI:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pip install MultiMM
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
With [uv](https://docs.astral.sh/uv/) (fast, isolated):
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
uv pip install MultiMM # into the current environment
|
|
82
|
+
uv tool install MultiMM # or as a standalone command-line tool
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
For `.hic` Hi-C files, also install the optional reader (`pip install "MultiMM[hic]"`); `.cool` and `.mcool` files work out of the box.
|
|
86
|
+
|
|
87
|
+
Requires Python 3.10 or newer. Linux is the main platform; macOS works without CUDA. The documentation covers installation from source.
|
|
88
|
+
|
|
89
|
+
## Run
|
|
90
|
+
|
|
91
|
+
All settings live in one config file:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
MultiMM -c config.ini
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Any setting can also be overridden on the command line, for example `--n_beads 2000`.
|
|
98
|
+
|
|
99
|
+
## A config file
|
|
100
|
+
|
|
101
|
+
You only write what you want to change; everything else has a default.
|
|
102
|
+
|
|
103
|
+
```ini
|
|
104
|
+
[Main]
|
|
105
|
+
CHROM = chr1
|
|
106
|
+
LOC_START = 160_000_000
|
|
107
|
+
LOC_END = 173_000_000
|
|
108
|
+
N_BEADS = 5000
|
|
109
|
+
|
|
110
|
+
LOOPS_PATH = data/loops.bedpe ; chromatin loops
|
|
111
|
+
COMPARTMENT_PATH = data/compartments.bed ; optional A/B compartments
|
|
112
|
+
COB_USE_COMPARTMENT_BLOCKS = True
|
|
113
|
+
|
|
114
|
+
OUT_PATH = results/chr1_region
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Documentation
|
|
118
|
+
|
|
119
|
+
The full documentation, with the mathematics of every force and a table of all arguments, is written with [MkDocs](https://www.mkdocs.org) and its source is in [`docs/`](https://github.com/SFGLab/MultiMM/tree/main/docs). To read it locally:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
pip install mkdocs-material
|
|
123
|
+
mkdocs serve
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Development
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
git clone https://github.com/SFGLab/MultiMM.git
|
|
130
|
+
cd MultiMM
|
|
131
|
+
uv sync --extra dev # or: pip install -e ".[dev]"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Run the tests (all are quick checks, no full simulation, about half a minute):
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
uv run pytest -q # or: pytest -q
|
|
138
|
+
uv run pytest tests/test_force_signs.py # a single file
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Console output has four levels: no flag shows only the pipeline stages and progress bars; `-v` adds details, `-vv` adds statistics tables, `-vvv` is fully verbose.
|
|
142
|
+
|
|
143
|
+
## Citation
|
|
144
|
+
|
|
145
|
+
If you use MultiMM in your research, please cite:
|
|
146
|
+
|
|
147
|
+
> Korsak, Sevastianos, Krzysztof Banecki, and Dariusz Plewczynski. "Multiscale molecular modeling of chromatin with MultiMM: From nucleosomes to the whole genome." *Computational and Structural Biotechnology Journal* 23 (2024): 3537–3548.
|
|
148
|
+
|
|
149
|
+
## License
|
|
150
|
+
|
|
151
|
+
MultiMM is free software, distributed under the GNU General Public License v3.0.
|
multimm-2.1.1/README.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/SFGLab/MultiMM/main/docs/assets/multimm_logo.png" alt="MultiMM" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
[](https://pypi.org/project/MultiMM/) · **[Documentation](https://sfglab.github.io/MultiMM/)** · [Source](https://github.com/SFGLab/MultiMM)
|
|
6
|
+
|
|
7
|
+
**MultiMM** is an [OpenMM](https://openmm.org)-based tool for building 3D models of chromatin, from single genomic regions to the whole human genome. It is *multiscale*: one energy function covers nucleosomes, loops and TADs, A/B compartments, chromosome territories and the nucleus. You give it loop calls, and optionally compartments or a Hi-C map, and it returns a 3D structure that you can open in any molecular viewer. The model is fast because it starts from a compact Hilbert-curve conformation and runs on GPUs through OpenMM.
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<img src="https://raw.githubusercontent.com/SFGLab/MultiMM/main/docs/assets/workflow.png" alt="MultiMM workflow" width="720">
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
## Scales of modelling
|
|
14
|
+
|
|
15
|
+
One energy function ties together five scales. Each is a different way of looking at the same chain of beads.
|
|
16
|
+
|
|
17
|
+
| Scale | What it means | How MultiMM models it |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| **Nucleosome / fibre** | DNA wrapped around histones, forming a ~10 nm fibre | Beads joined by bonds and angle (stiffness) terms, with excluded volume so beads do not overlap |
|
|
20
|
+
| **Loops** | Pairs of distant sites held together, e.g. by CTCF and cohesin | Harmonic springs between loop anchors, taken from your loop file |
|
|
21
|
+
| **TADs / Hi-C contacts** | Domains that fold together more than with their surroundings | Optional restraints derived from a Hi-C map by Boltzmann inversion |
|
|
22
|
+
| **A/B compartments** | Active (A) and inactive (B) chromatin that cluster by type | Soft attraction between beads of the same compartment type |
|
|
23
|
+
| **Chromosomes and nucleus** | Chromosome territories inside a nucleus, anchored at the lamina | Container wall, lamina and chromosome-block forces |
|
|
24
|
+
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
From PyPI:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pip install MultiMM
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
With [uv](https://docs.astral.sh/uv/) (fast, isolated):
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
uv pip install MultiMM # into the current environment
|
|
37
|
+
uv tool install MultiMM # or as a standalone command-line tool
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
For `.hic` Hi-C files, also install the optional reader (`pip install "MultiMM[hic]"`); `.cool` and `.mcool` files work out of the box.
|
|
41
|
+
|
|
42
|
+
Requires Python 3.10 or newer. Linux is the main platform; macOS works without CUDA. The documentation covers installation from source.
|
|
43
|
+
|
|
44
|
+
## Run
|
|
45
|
+
|
|
46
|
+
All settings live in one config file:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
MultiMM -c config.ini
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Any setting can also be overridden on the command line, for example `--n_beads 2000`.
|
|
53
|
+
|
|
54
|
+
## A config file
|
|
55
|
+
|
|
56
|
+
You only write what you want to change; everything else has a default.
|
|
57
|
+
|
|
58
|
+
```ini
|
|
59
|
+
[Main]
|
|
60
|
+
CHROM = chr1
|
|
61
|
+
LOC_START = 160_000_000
|
|
62
|
+
LOC_END = 173_000_000
|
|
63
|
+
N_BEADS = 5000
|
|
64
|
+
|
|
65
|
+
LOOPS_PATH = data/loops.bedpe ; chromatin loops
|
|
66
|
+
COMPARTMENT_PATH = data/compartments.bed ; optional A/B compartments
|
|
67
|
+
COB_USE_COMPARTMENT_BLOCKS = True
|
|
68
|
+
|
|
69
|
+
OUT_PATH = results/chr1_region
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Documentation
|
|
73
|
+
|
|
74
|
+
The full documentation, with the mathematics of every force and a table of all arguments, is written with [MkDocs](https://www.mkdocs.org) and its source is in [`docs/`](https://github.com/SFGLab/MultiMM/tree/main/docs). To read it locally:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pip install mkdocs-material
|
|
78
|
+
mkdocs serve
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Development
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
git clone https://github.com/SFGLab/MultiMM.git
|
|
85
|
+
cd MultiMM
|
|
86
|
+
uv sync --extra dev # or: pip install -e ".[dev]"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Run the tests (all are quick checks, no full simulation, about half a minute):
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
uv run pytest -q # or: pytest -q
|
|
93
|
+
uv run pytest tests/test_force_signs.py # a single file
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Console output has four levels: no flag shows only the pipeline stages and progress bars; `-v` adds details, `-vv` adds statistics tables, `-vvv` is fully verbose.
|
|
97
|
+
|
|
98
|
+
## Citation
|
|
99
|
+
|
|
100
|
+
If you use MultiMM in your research, please cite:
|
|
101
|
+
|
|
102
|
+
> Korsak, Sevastianos, Krzysztof Banecki, and Dariusz Plewczynski. "Multiscale molecular modeling of chromatin with MultiMM: From nucleosomes to the whole genome." *Computational and Structural Biotechnology Journal* 23 (2024): 3537–3548.
|
|
103
|
+
|
|
104
|
+
## License
|
|
105
|
+
|
|
106
|
+
MultiMM is free software, distributed under the GNU General Public License v3.0.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "MultiMM"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.1.1"
|
|
8
8
|
description = "A tool for chromatin modeling from nucleosomes to chromosomal territories."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -34,9 +34,20 @@ dependencies = [
|
|
|
34
34
|
"pyvista[all]",
|
|
35
35
|
"OpenMM>=8.5.1",
|
|
36
36
|
"pydantic>=2.0.0",
|
|
37
|
+
"cooler>=0.10.2",
|
|
38
|
+
"scikit-image>=0.21.0",
|
|
37
39
|
]
|
|
38
40
|
|
|
41
|
+
[project.urls]
|
|
42
|
+
Homepage = "https://github.com/SFGLab/MultiMM"
|
|
43
|
+
Documentation = "https://sfglab.github.io/MultiMM/"
|
|
44
|
+
Source = "https://github.com/SFGLab/MultiMM"
|
|
45
|
+
Issues = "https://github.com/SFGLab/MultiMM/issues"
|
|
46
|
+
Changelog = "https://github.com/SFGLab/MultiMM/releases"
|
|
47
|
+
|
|
39
48
|
[project.optional-dependencies]
|
|
49
|
+
# .hic files need hic-straw, which compiles C++ code and may fail to install; .cool/.mcool do not need it
|
|
50
|
+
hic = ["hic-straw>=1.3.1"]
|
|
40
51
|
dev = [
|
|
41
52
|
"ruff",
|
|
42
53
|
"black",
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: MultiMM
|
|
3
|
+
Version: 2.1.1
|
|
4
|
+
Summary: A tool for chromatin modeling from nucleosomes to chromosomal territories.
|
|
5
|
+
Author-email: Sebastian Korsak <s.korsak@datascience.edu.pl>
|
|
6
|
+
License: GNU General Public License v3.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/SFGLab/MultiMM
|
|
8
|
+
Project-URL: Documentation, https://sfglab.github.io/MultiMM/
|
|
9
|
+
Project-URL: Source, https://github.com/SFGLab/MultiMM
|
|
10
|
+
Project-URL: Issues, https://github.com/SFGLab/MultiMM/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/SFGLab/MultiMM/releases
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
14
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: numpy>=1.26.4
|
|
19
|
+
Requires-Dist: scipy>=1.11
|
|
20
|
+
Requires-Dist: pandas>=2.2.2
|
|
21
|
+
Requires-Dist: argparse>=1.4.0
|
|
22
|
+
Requires-Dist: matplotlib>=3.8.2
|
|
23
|
+
Requires-Dist: mdtraj>=1.9.9
|
|
24
|
+
Requires-Dist: seaborn>=0.12.2
|
|
25
|
+
Requires-Dist: scikit-learn>=1.3.0
|
|
26
|
+
Requires-Dist: configparser>=6.0.1
|
|
27
|
+
Requires-Dist: typing-extensions>=4.7.1
|
|
28
|
+
Requires-Dist: pyBigWig>=0.3.22
|
|
29
|
+
Requires-Dist: hilbertcurve>=2.0.5
|
|
30
|
+
Requires-Dist: tqdm>=4.65.2
|
|
31
|
+
Requires-Dist: pyvista[all]
|
|
32
|
+
Requires-Dist: OpenMM>=8.5.1
|
|
33
|
+
Requires-Dist: pydantic>=2.0.0
|
|
34
|
+
Requires-Dist: cooler>=0.10.2
|
|
35
|
+
Requires-Dist: scikit-image>=0.21.0
|
|
36
|
+
Provides-Extra: hic
|
|
37
|
+
Requires-Dist: hic-straw>=1.3.1; extra == "hic"
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: ruff; extra == "dev"
|
|
40
|
+
Requires-Dist: black; extra == "dev"
|
|
41
|
+
Requires-Dist: isort; extra == "dev"
|
|
42
|
+
Requires-Dist: docformatter; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest; extra == "dev"
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
<p align="center">
|
|
47
|
+
<img src="https://raw.githubusercontent.com/SFGLab/MultiMM/main/docs/assets/multimm_logo.png" alt="MultiMM" width="100%">
|
|
48
|
+
</p>
|
|
49
|
+
|
|
50
|
+
[](https://pypi.org/project/MultiMM/) · **[Documentation](https://sfglab.github.io/MultiMM/)** · [Source](https://github.com/SFGLab/MultiMM)
|
|
51
|
+
|
|
52
|
+
**MultiMM** is an [OpenMM](https://openmm.org)-based tool for building 3D models of chromatin, from single genomic regions to the whole human genome. It is *multiscale*: one energy function covers nucleosomes, loops and TADs, A/B compartments, chromosome territories and the nucleus. You give it loop calls, and optionally compartments or a Hi-C map, and it returns a 3D structure that you can open in any molecular viewer. The model is fast because it starts from a compact Hilbert-curve conformation and runs on GPUs through OpenMM.
|
|
53
|
+
|
|
54
|
+
<p align="center">
|
|
55
|
+
<img src="https://raw.githubusercontent.com/SFGLab/MultiMM/main/docs/assets/workflow.png" alt="MultiMM workflow" width="720">
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
## Scales of modelling
|
|
59
|
+
|
|
60
|
+
One energy function ties together five scales. Each is a different way of looking at the same chain of beads.
|
|
61
|
+
|
|
62
|
+
| Scale | What it means | How MultiMM models it |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| **Nucleosome / fibre** | DNA wrapped around histones, forming a ~10 nm fibre | Beads joined by bonds and angle (stiffness) terms, with excluded volume so beads do not overlap |
|
|
65
|
+
| **Loops** | Pairs of distant sites held together, e.g. by CTCF and cohesin | Harmonic springs between loop anchors, taken from your loop file |
|
|
66
|
+
| **TADs / Hi-C contacts** | Domains that fold together more than with their surroundings | Optional restraints derived from a Hi-C map by Boltzmann inversion |
|
|
67
|
+
| **A/B compartments** | Active (A) and inactive (B) chromatin that cluster by type | Soft attraction between beads of the same compartment type |
|
|
68
|
+
| **Chromosomes and nucleus** | Chromosome territories inside a nucleus, anchored at the lamina | Container wall, lamina and chromosome-block forces |
|
|
69
|
+
|
|
70
|
+
## Install
|
|
71
|
+
|
|
72
|
+
From PyPI:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pip install MultiMM
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
With [uv](https://docs.astral.sh/uv/) (fast, isolated):
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
uv pip install MultiMM # into the current environment
|
|
82
|
+
uv tool install MultiMM # or as a standalone command-line tool
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
For `.hic` Hi-C files, also install the optional reader (`pip install "MultiMM[hic]"`); `.cool` and `.mcool` files work out of the box.
|
|
86
|
+
|
|
87
|
+
Requires Python 3.10 or newer. Linux is the main platform; macOS works without CUDA. The documentation covers installation from source.
|
|
88
|
+
|
|
89
|
+
## Run
|
|
90
|
+
|
|
91
|
+
All settings live in one config file:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
MultiMM -c config.ini
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Any setting can also be overridden on the command line, for example `--n_beads 2000`.
|
|
98
|
+
|
|
99
|
+
## A config file
|
|
100
|
+
|
|
101
|
+
You only write what you want to change; everything else has a default.
|
|
102
|
+
|
|
103
|
+
```ini
|
|
104
|
+
[Main]
|
|
105
|
+
CHROM = chr1
|
|
106
|
+
LOC_START = 160_000_000
|
|
107
|
+
LOC_END = 173_000_000
|
|
108
|
+
N_BEADS = 5000
|
|
109
|
+
|
|
110
|
+
LOOPS_PATH = data/loops.bedpe ; chromatin loops
|
|
111
|
+
COMPARTMENT_PATH = data/compartments.bed ; optional A/B compartments
|
|
112
|
+
COB_USE_COMPARTMENT_BLOCKS = True
|
|
113
|
+
|
|
114
|
+
OUT_PATH = results/chr1_region
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Documentation
|
|
118
|
+
|
|
119
|
+
The full documentation, with the mathematics of every force and a table of all arguments, is written with [MkDocs](https://www.mkdocs.org) and its source is in [`docs/`](https://github.com/SFGLab/MultiMM/tree/main/docs). To read it locally:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
pip install mkdocs-material
|
|
123
|
+
mkdocs serve
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Development
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
git clone https://github.com/SFGLab/MultiMM.git
|
|
130
|
+
cd MultiMM
|
|
131
|
+
uv sync --extra dev # or: pip install -e ".[dev]"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Run the tests (all are quick checks, no full simulation, about half a minute):
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
uv run pytest -q # or: pytest -q
|
|
138
|
+
uv run pytest tests/test_force_signs.py # a single file
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Console output has four levels: no flag shows only the pipeline stages and progress bars; `-v` adds details, `-vv` adds statistics tables, `-vvv` is fully verbose.
|
|
142
|
+
|
|
143
|
+
## Citation
|
|
144
|
+
|
|
145
|
+
If you use MultiMM in your research, please cite:
|
|
146
|
+
|
|
147
|
+
> Korsak, Sevastianos, Krzysztof Banecki, and Dariusz Plewczynski. "Multiscale molecular modeling of chromatin with MultiMM: From nucleosomes to the whole genome." *Computational and Structural Biotechnology Journal* 23 (2024): 3537–3548.
|
|
148
|
+
|
|
149
|
+
## License
|
|
150
|
+
|
|
151
|
+
MultiMM is free software, distributed under the GNU General Public License v3.0.
|
|
@@ -12,16 +12,35 @@ src/multimm/args_definition.py
|
|
|
12
12
|
src/multimm/bridge.py
|
|
13
13
|
src/multimm/config.py
|
|
14
14
|
src/multimm/enums.py
|
|
15
|
+
src/multimm/facts.py
|
|
16
|
+
src/multimm/hic_force.py
|
|
15
17
|
src/multimm/initial_structure_tools.py
|
|
16
18
|
src/multimm/logger.py
|
|
17
19
|
src/multimm/model.py
|
|
18
20
|
src/multimm/nucleosome_interpolation.py
|
|
19
21
|
src/multimm/plots.py
|
|
22
|
+
src/multimm/quality_tests.py
|
|
23
|
+
src/multimm/read_hic.py
|
|
20
24
|
src/multimm/run.py
|
|
25
|
+
src/multimm/structural_analysis.py
|
|
21
26
|
src/multimm/utils.py
|
|
22
27
|
src/multimm/validation.py
|
|
23
28
|
src/multimm/data/hg38_gtf_annotations.tsv
|
|
24
29
|
src/multimm/forcefields/dna_histones_ff.xml
|
|
25
30
|
src/multimm/forcefields/ff.xml
|
|
31
|
+
tests/test_config.py
|
|
32
|
+
tests/test_force_signs.py
|
|
33
|
+
tests/test_genes.py
|
|
34
|
+
tests/test_hic_force.py
|
|
35
|
+
tests/test_known_issues.py
|
|
36
|
+
tests/test_lamina.py
|
|
37
|
+
tests/test_logger.py
|
|
38
|
+
tests/test_loops.py
|
|
39
|
+
tests/test_nucleosomes.py
|
|
40
|
+
tests/test_presets.py
|
|
41
|
+
tests/test_read_hic.py
|
|
26
42
|
tests/test_run_validation.py
|
|
27
|
-
tests/test_simulations.py
|
|
43
|
+
tests/test_simulations.py
|
|
44
|
+
tests/test_structure_tools.py
|
|
45
|
+
tests/test_utils.py
|
|
46
|
+
tests/test_validation_metrics.py
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from .bridge import SimulationEngine as SimulationEngine
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def main(*args, **kwargs):
|
|
5
|
+
"""Command-line entry point (imported lazily so `python -m multimm.run` stays warning-free)."""
|
|
6
|
+
from .run import main as _main
|
|
7
|
+
|
|
8
|
+
return _main(*args, **kwargs)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
__version__ = "2.1.1"
|
|
@@ -8,7 +8,6 @@ import openmm
|
|
|
8
8
|
|
|
9
9
|
from .config import SimulationConfig
|
|
10
10
|
from .model import MultiMM
|
|
11
|
-
from .run import write_config
|
|
12
11
|
|
|
13
12
|
logger = logging.getLogger(__name__)
|
|
14
13
|
|
|
@@ -91,6 +90,7 @@ class SimulationEngine:
|
|
|
91
90
|
try:
|
|
92
91
|
base_out_path = config.OUT_PATH
|
|
93
92
|
|
|
93
|
+
from .run import write_config # lazy: keeps `python -m multimm.run` warning-free
|
|
94
94
|
write_config(config)
|
|
95
95
|
|
|
96
96
|
if config.GENERATE_ENSEMBLE and config.N_ENSEMBLE is not None:
|
|
@@ -141,6 +141,7 @@ class SimulationEngine:
|
|
|
141
141
|
os.makedirs(metadata_dir, exist_ok=True)
|
|
142
142
|
config_path = os.path.join(metadata_dir, "config_auto.ini")
|
|
143
143
|
|
|
144
|
+
from .run import write_config
|
|
144
145
|
write_config(config)
|
|
145
146
|
|
|
146
147
|
cmd = [
|