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.
Files changed (59) hide show
  1. multimm-2.1.1/PKG-INFO +151 -0
  2. multimm-2.1.1/README.md +106 -0
  3. {multimm-2.0.2 → multimm-2.1.1}/pyproject.toml +12 -1
  4. multimm-2.1.1/src/MultiMM.egg-info/PKG-INFO +151 -0
  5. {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/SOURCES.txt +20 -1
  6. {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/requires.txt +5 -0
  7. multimm-2.1.1/src/multimm/__init__.py +11 -0
  8. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/bridge.py +2 -1
  9. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/config.py +227 -13
  10. multimm-2.1.1/src/multimm/facts.py +50 -0
  11. multimm-2.1.1/src/multimm/hic_force.py +442 -0
  12. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/initial_structure_tools.py +7 -0
  13. multimm-2.1.1/src/multimm/logger.py +751 -0
  14. multimm-2.1.1/src/multimm/model.py +2086 -0
  15. multimm-2.1.1/src/multimm/plots.py +1801 -0
  16. multimm-2.1.1/src/multimm/quality_tests.py +889 -0
  17. multimm-2.1.1/src/multimm/read_hic.py +1185 -0
  18. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/run.py +246 -97
  19. multimm-2.1.1/src/multimm/structural_analysis.py +665 -0
  20. multimm-2.1.1/src/multimm/utils.py +1272 -0
  21. multimm-2.1.1/src/multimm/validation.py +1482 -0
  22. multimm-2.1.1/tests/test_config.py +102 -0
  23. multimm-2.1.1/tests/test_force_signs.py +173 -0
  24. multimm-2.1.1/tests/test_genes.py +68 -0
  25. multimm-2.1.1/tests/test_hic_force.py +69 -0
  26. multimm-2.1.1/tests/test_known_issues.py +25 -0
  27. multimm-2.1.1/tests/test_lamina.py +55 -0
  28. multimm-2.1.1/tests/test_logger.py +86 -0
  29. multimm-2.1.1/tests/test_loops.py +43 -0
  30. multimm-2.1.1/tests/test_nucleosomes.py +27 -0
  31. multimm-2.1.1/tests/test_presets.py +49 -0
  32. multimm-2.1.1/tests/test_read_hic.py +79 -0
  33. multimm-2.1.1/tests/test_run_validation.py +133 -0
  34. multimm-2.1.1/tests/test_simulations.py +58 -0
  35. multimm-2.1.1/tests/test_structure_tools.py +51 -0
  36. multimm-2.1.1/tests/test_utils.py +78 -0
  37. multimm-2.1.1/tests/test_validation_metrics.py +74 -0
  38. multimm-2.0.2/PKG-INFO +0 -623
  39. multimm-2.0.2/README.md +0 -587
  40. multimm-2.0.2/src/MultiMM.egg-info/PKG-INFO +0 -623
  41. multimm-2.0.2/src/multimm/__init__.py +0 -4
  42. multimm-2.0.2/src/multimm/logger.py +0 -51
  43. multimm-2.0.2/src/multimm/model.py +0 -1259
  44. multimm-2.0.2/src/multimm/plots.py +0 -801
  45. multimm-2.0.2/src/multimm/utils.py +0 -739
  46. multimm-2.0.2/src/multimm/validation.py +0 -746
  47. multimm-2.0.2/tests/test_run_validation.py +0 -88
  48. multimm-2.0.2/tests/test_simulations.py +0 -129
  49. {multimm-2.0.2 → multimm-2.1.1}/LICENSE +0 -0
  50. {multimm-2.0.2 → multimm-2.1.1}/setup.cfg +0 -0
  51. {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/dependency_links.txt +0 -0
  52. {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/entry_points.txt +0 -0
  53. {multimm-2.0.2 → multimm-2.1.1}/src/MultiMM.egg-info/top_level.txt +0 -0
  54. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/args_definition.py +0 -0
  55. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/data/hg38_gtf_annotations.tsv +0 -0
  56. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/enums.py +0 -0
  57. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/forcefields/dna_histones_ff.xml +0 -0
  58. {multimm-2.0.2 → multimm-2.1.1}/src/multimm/forcefields/ff.xml +0 -0
  59. {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
+ [![PyPI](https://img.shields.io/pypi/v/MultiMM)](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.
@@ -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
+ [![PyPI](https://img.shields.io/pypi/v/MultiMM)](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.0.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
+ [![PyPI](https://img.shields.io/pypi/v/MultiMM)](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
@@ -14,6 +14,8 @@ tqdm>=4.65.2
14
14
  pyvista[all]
15
15
  OpenMM>=8.5.1
16
16
  pydantic>=2.0.0
17
+ cooler>=0.10.2
18
+ scikit-image>=0.21.0
17
19
 
18
20
  [dev]
19
21
  ruff
@@ -21,3 +23,6 @@ black
21
23
  isort
22
24
  docformatter
23
25
  pytest
26
+
27
+ [hic]
28
+ hic-straw>=1.3.1
@@ -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 = [