RNAvigate 1.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.
Files changed (63) hide show
  1. rnavigate-1.1.0/LICENSE +21 -0
  2. rnavigate-1.1.0/PKG-INFO +75 -0
  3. rnavigate-1.1.0/README.md +28 -0
  4. rnavigate-1.1.0/RNAvigate.egg-info/PKG-INFO +75 -0
  5. rnavigate-1.1.0/RNAvigate.egg-info/SOURCES.txt +61 -0
  6. rnavigate-1.1.0/RNAvigate.egg-info/dependency_links.txt +1 -0
  7. rnavigate-1.1.0/RNAvigate.egg-info/requires.txt +26 -0
  8. rnavigate-1.1.0/RNAvigate.egg-info/top_level.txt +1 -0
  9. rnavigate-1.1.0/pyproject.toml +83 -0
  10. rnavigate-1.1.0/rnavigate/__init__.py +63 -0
  11. rnavigate-1.1.0/rnavigate/analysis/__init__.py +18 -0
  12. rnavigate-1.1.0/rnavigate/analysis/auroc.py +198 -0
  13. rnavigate-1.1.0/rnavigate/analysis/check_sequence.py +171 -0
  14. rnavigate-1.1.0/rnavigate/analysis/deltashape.py +361 -0
  15. rnavigate-1.1.0/rnavigate/analysis/fragmapper.py +463 -0
  16. rnavigate-1.1.0/rnavigate/analysis/logcompare.py +239 -0
  17. rnavigate-1.1.0/rnavigate/analysis/lowss.py +311 -0
  18. rnavigate-1.1.0/rnavigate/data/__init__.py +78 -0
  19. rnavigate-1.1.0/rnavigate/data/alignments.py +927 -0
  20. rnavigate-1.1.0/rnavigate/data/annotation.py +456 -0
  21. rnavigate-1.1.0/rnavigate/data/colors.py +154 -0
  22. rnavigate-1.1.0/rnavigate/data/data.py +620 -0
  23. rnavigate-1.1.0/rnavigate/data/interactions.py +1750 -0
  24. rnavigate-1.1.0/rnavigate/data/pdb.py +271 -0
  25. rnavigate-1.1.0/rnavigate/data/profile.py +1080 -0
  26. rnavigate-1.1.0/rnavigate/data/secondary_structure.py +1433 -0
  27. rnavigate-1.1.0/rnavigate/data_loading.py +214 -0
  28. rnavigate-1.1.0/rnavigate/examples/__init__.py +178 -0
  29. rnavigate-1.1.0/rnavigate/examples/rmrp_data/__init__.py +0 -0
  30. rnavigate-1.1.0/rnavigate/examples/rnasep_data/__init__.py +0 -0
  31. rnavigate-1.1.0/rnavigate/examples/rrna_fragmap_data/__init__.py +0 -0
  32. rnavigate-1.1.0/rnavigate/examples/tpp_data/__init__.py +0 -0
  33. rnavigate-1.1.0/rnavigate/helper_functions.py +223 -0
  34. rnavigate-1.1.0/rnavigate/plots/__init__.py +81 -0
  35. rnavigate-1.1.0/rnavigate/plots/alignment.py +115 -0
  36. rnavigate-1.1.0/rnavigate/plots/arc.py +350 -0
  37. rnavigate-1.1.0/rnavigate/plots/circle.py +221 -0
  38. rnavigate-1.1.0/rnavigate/plots/disthist.py +209 -0
  39. rnavigate-1.1.0/rnavigate/plots/functions/__init__.py +55 -0
  40. rnavigate-1.1.0/rnavigate/plots/functions/circle.py +74 -0
  41. rnavigate-1.1.0/rnavigate/plots/functions/functions.py +337 -0
  42. rnavigate-1.1.0/rnavigate/plots/functions/ss.py +312 -0
  43. rnavigate-1.1.0/rnavigate/plots/functions/tracks.py +227 -0
  44. rnavigate-1.1.0/rnavigate/plots/heatmap.py +245 -0
  45. rnavigate-1.1.0/rnavigate/plots/linreg.py +284 -0
  46. rnavigate-1.1.0/rnavigate/plots/mol.py +280 -0
  47. rnavigate-1.1.0/rnavigate/plots/ntdist.py +131 -0
  48. rnavigate-1.1.0/rnavigate/plots/plots.py +348 -0
  49. rnavigate-1.1.0/rnavigate/plots/profile.py +253 -0
  50. rnavigate-1.1.0/rnavigate/plots/qc.py +262 -0
  51. rnavigate-1.1.0/rnavigate/plots/roc.py +181 -0
  52. rnavigate-1.1.0/rnavigate/plots/skyline.py +287 -0
  53. rnavigate-1.1.0/rnavigate/plots/sm.py +416 -0
  54. rnavigate-1.1.0/rnavigate/plots/ss.py +180 -0
  55. rnavigate-1.1.0/rnavigate/plotting_functions.py +1622 -0
  56. rnavigate-1.1.0/rnavigate/rnavigate.py +363 -0
  57. rnavigate-1.1.0/rnavigate/styles.py +247 -0
  58. rnavigate-1.1.0/rnavigate/transcriptomics/__init__.py +20 -0
  59. rnavigate-1.1.0/rnavigate/transcriptomics/bed.py +185 -0
  60. rnavigate-1.1.0/rnavigate/transcriptomics/eclip.py +262 -0
  61. rnavigate-1.1.0/rnavigate/transcriptomics/transcriptome.py +343 -0
  62. rnavigate-1.1.0/setup.cfg +4 -0
  63. rnavigate-1.1.0/tests/test_import.py +65 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Patrick Irving and the Weeks Lab at The University of North Carolina at Chapel Hill
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,75 @@
1
+ Metadata-Version: 2.4
2
+ Name: RNAvigate
3
+ Version: 1.1.0
4
+ Summary: RNA visualization and graphical analysis toolset
5
+ Author-email: Patrick Irving <psirving@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/Weeks-UNC/RNAvigate
8
+ Project-URL: Documentation, https://rnavigate.readthedocs.io/en/latest/
9
+ Project-URL: Bug Tracker, https://github.com/Weeks-UNC/RNAvigate/issues
10
+ Keywords: RNA,chemical probing,visualization,bioinformatics,structural biology
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
17
+ Classifier: Topic :: Scientific/Engineering :: Visualization
18
+ Classifier: Intended Audience :: Science/Research
19
+ Requires-Python: >=3.9
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: biopython>=1.78
23
+ Requires-Dist: ipython>=8.18.1
24
+ Requires-Dist: jedi>=0.19.2
25
+ Requires-Dist: matplotlib>=3.8
26
+ Requires-Dist: numpy>=1.20.1
27
+ Requires-Dist: openpyxl>=3.1.2
28
+ Requires-Dist: pandas>=1.4.4
29
+ Requires-Dist: py3dmol>=2.0.0
30
+ Requires-Dist: requests
31
+ Requires-Dist: scikit-learn>=1.0.2
32
+ Requires-Dist: scipy>=1.6.2
33
+ Requires-Dist: seaborn>=0.13.0
34
+ Requires-Dist: statsmodels>=0.14.1
35
+ Provides-Extra: dev
36
+ Requires-Dist: ipykernel>=6.6.0; extra == "dev"
37
+ Requires-Dist: jupyter>=1.0.0; extra == "dev"
38
+ Requires-Dist: pytest>=7.0; extra == "dev"
39
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
40
+ Requires-Dist: ruff>=0.4; extra == "dev"
41
+ Provides-Extra: docs
42
+ Requires-Dist: sphinx; extra == "docs"
43
+ Requires-Dist: sphinx-autobuild; extra == "docs"
44
+ Requires-Dist: sphinx-rtd-theme; extra == "docs"
45
+ Requires-Dist: nbsphinx; extra == "docs"
46
+ Dynamic: license-file
47
+
48
+ RNAvigate
49
+ =========
50
+
51
+ RNAvigate is a toolset to explore, compare, and visualize chemical probing data,
52
+ structure models, and annotations between experimental samples.
53
+
54
+ **For non-coders**, RNAvigate is designed to be easy to learn. Reach out to me if you
55
+ want help onboarding for your group. Using RNAvigate in a Jupyter Notebook will
56
+ transform how you explore data, document thoughts, and share transparent and reproducible analyses.
57
+
58
+ **For coders**, RNAvigate is extremely flexible and a great package for scripting
59
+ and standardizing plots and analyses as part of a bigger workflow.
60
+
61
+ * [**_Click here for the full documentation_**](https://rnavigate.readthedocs.io/en/latest/)
62
+
63
+ ## Reach out
64
+
65
+ Coders and non-coders, **reach out** if you have any comments or issues at all!
66
+ I love to help users and to learn how you are using this tool.
67
+
68
+ Please, use GitHub Issues **_liberally_** or email me. "Issues" can be:
69
+
70
+ - a "dumb" question (my favorite kind) or a complicated one.
71
+ - *any* comment or suggestion for the documentation or the code.
72
+ - a cool thing that you did with RNAvigate.
73
+ - a report of a bug or unclear error.
74
+ - a request for help on acheiving a desired vizualization or analysis.
75
+ - a request for advice on any chemical probing matter.
@@ -0,0 +1,28 @@
1
+ RNAvigate
2
+ =========
3
+
4
+ RNAvigate is a toolset to explore, compare, and visualize chemical probing data,
5
+ structure models, and annotations between experimental samples.
6
+
7
+ **For non-coders**, RNAvigate is designed to be easy to learn. Reach out to me if you
8
+ want help onboarding for your group. Using RNAvigate in a Jupyter Notebook will
9
+ transform how you explore data, document thoughts, and share transparent and reproducible analyses.
10
+
11
+ **For coders**, RNAvigate is extremely flexible and a great package for scripting
12
+ and standardizing plots and analyses as part of a bigger workflow.
13
+
14
+ * [**_Click here for the full documentation_**](https://rnavigate.readthedocs.io/en/latest/)
15
+
16
+ ## Reach out
17
+
18
+ Coders and non-coders, **reach out** if you have any comments or issues at all!
19
+ I love to help users and to learn how you are using this tool.
20
+
21
+ Please, use GitHub Issues **_liberally_** or email me. "Issues" can be:
22
+
23
+ - a "dumb" question (my favorite kind) or a complicated one.
24
+ - *any* comment or suggestion for the documentation or the code.
25
+ - a cool thing that you did with RNAvigate.
26
+ - a report of a bug or unclear error.
27
+ - a request for help on acheiving a desired vizualization or analysis.
28
+ - a request for advice on any chemical probing matter.
@@ -0,0 +1,75 @@
1
+ Metadata-Version: 2.4
2
+ Name: RNAvigate
3
+ Version: 1.1.0
4
+ Summary: RNA visualization and graphical analysis toolset
5
+ Author-email: Patrick Irving <psirving@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/Weeks-UNC/RNAvigate
8
+ Project-URL: Documentation, https://rnavigate.readthedocs.io/en/latest/
9
+ Project-URL: Bug Tracker, https://github.com/Weeks-UNC/RNAvigate/issues
10
+ Keywords: RNA,chemical probing,visualization,bioinformatics,structural biology
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
17
+ Classifier: Topic :: Scientific/Engineering :: Visualization
18
+ Classifier: Intended Audience :: Science/Research
19
+ Requires-Python: >=3.9
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: biopython>=1.78
23
+ Requires-Dist: ipython>=8.18.1
24
+ Requires-Dist: jedi>=0.19.2
25
+ Requires-Dist: matplotlib>=3.8
26
+ Requires-Dist: numpy>=1.20.1
27
+ Requires-Dist: openpyxl>=3.1.2
28
+ Requires-Dist: pandas>=1.4.4
29
+ Requires-Dist: py3dmol>=2.0.0
30
+ Requires-Dist: requests
31
+ Requires-Dist: scikit-learn>=1.0.2
32
+ Requires-Dist: scipy>=1.6.2
33
+ Requires-Dist: seaborn>=0.13.0
34
+ Requires-Dist: statsmodels>=0.14.1
35
+ Provides-Extra: dev
36
+ Requires-Dist: ipykernel>=6.6.0; extra == "dev"
37
+ Requires-Dist: jupyter>=1.0.0; extra == "dev"
38
+ Requires-Dist: pytest>=7.0; extra == "dev"
39
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
40
+ Requires-Dist: ruff>=0.4; extra == "dev"
41
+ Provides-Extra: docs
42
+ Requires-Dist: sphinx; extra == "docs"
43
+ Requires-Dist: sphinx-autobuild; extra == "docs"
44
+ Requires-Dist: sphinx-rtd-theme; extra == "docs"
45
+ Requires-Dist: nbsphinx; extra == "docs"
46
+ Dynamic: license-file
47
+
48
+ RNAvigate
49
+ =========
50
+
51
+ RNAvigate is a toolset to explore, compare, and visualize chemical probing data,
52
+ structure models, and annotations between experimental samples.
53
+
54
+ **For non-coders**, RNAvigate is designed to be easy to learn. Reach out to me if you
55
+ want help onboarding for your group. Using RNAvigate in a Jupyter Notebook will
56
+ transform how you explore data, document thoughts, and share transparent and reproducible analyses.
57
+
58
+ **For coders**, RNAvigate is extremely flexible and a great package for scripting
59
+ and standardizing plots and analyses as part of a bigger workflow.
60
+
61
+ * [**_Click here for the full documentation_**](https://rnavigate.readthedocs.io/en/latest/)
62
+
63
+ ## Reach out
64
+
65
+ Coders and non-coders, **reach out** if you have any comments or issues at all!
66
+ I love to help users and to learn how you are using this tool.
67
+
68
+ Please, use GitHub Issues **_liberally_** or email me. "Issues" can be:
69
+
70
+ - a "dumb" question (my favorite kind) or a complicated one.
71
+ - *any* comment or suggestion for the documentation or the code.
72
+ - a cool thing that you did with RNAvigate.
73
+ - a report of a bug or unclear error.
74
+ - a request for help on acheiving a desired vizualization or analysis.
75
+ - a request for advice on any chemical probing matter.
@@ -0,0 +1,61 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ RNAvigate.egg-info/PKG-INFO
5
+ RNAvigate.egg-info/SOURCES.txt
6
+ RNAvigate.egg-info/dependency_links.txt
7
+ RNAvigate.egg-info/requires.txt
8
+ RNAvigate.egg-info/top_level.txt
9
+ rnavigate/__init__.py
10
+ rnavigate/data_loading.py
11
+ rnavigate/helper_functions.py
12
+ rnavigate/plotting_functions.py
13
+ rnavigate/rnavigate.py
14
+ rnavigate/styles.py
15
+ rnavigate/analysis/__init__.py
16
+ rnavigate/analysis/auroc.py
17
+ rnavigate/analysis/check_sequence.py
18
+ rnavigate/analysis/deltashape.py
19
+ rnavigate/analysis/fragmapper.py
20
+ rnavigate/analysis/logcompare.py
21
+ rnavigate/analysis/lowss.py
22
+ rnavigate/data/__init__.py
23
+ rnavigate/data/alignments.py
24
+ rnavigate/data/annotation.py
25
+ rnavigate/data/colors.py
26
+ rnavigate/data/data.py
27
+ rnavigate/data/interactions.py
28
+ rnavigate/data/pdb.py
29
+ rnavigate/data/profile.py
30
+ rnavigate/data/secondary_structure.py
31
+ rnavigate/examples/__init__.py
32
+ rnavigate/examples/rmrp_data/__init__.py
33
+ rnavigate/examples/rnasep_data/__init__.py
34
+ rnavigate/examples/rrna_fragmap_data/__init__.py
35
+ rnavigate/examples/tpp_data/__init__.py
36
+ rnavigate/plots/__init__.py
37
+ rnavigate/plots/alignment.py
38
+ rnavigate/plots/arc.py
39
+ rnavigate/plots/circle.py
40
+ rnavigate/plots/disthist.py
41
+ rnavigate/plots/heatmap.py
42
+ rnavigate/plots/linreg.py
43
+ rnavigate/plots/mol.py
44
+ rnavigate/plots/ntdist.py
45
+ rnavigate/plots/plots.py
46
+ rnavigate/plots/profile.py
47
+ rnavigate/plots/qc.py
48
+ rnavigate/plots/roc.py
49
+ rnavigate/plots/skyline.py
50
+ rnavigate/plots/sm.py
51
+ rnavigate/plots/ss.py
52
+ rnavigate/plots/functions/__init__.py
53
+ rnavigate/plots/functions/circle.py
54
+ rnavigate/plots/functions/functions.py
55
+ rnavigate/plots/functions/ss.py
56
+ rnavigate/plots/functions/tracks.py
57
+ rnavigate/transcriptomics/__init__.py
58
+ rnavigate/transcriptomics/bed.py
59
+ rnavigate/transcriptomics/eclip.py
60
+ rnavigate/transcriptomics/transcriptome.py
61
+ tests/test_import.py
@@ -0,0 +1,26 @@
1
+ biopython>=1.78
2
+ ipython>=8.18.1
3
+ jedi>=0.19.2
4
+ matplotlib>=3.8
5
+ numpy>=1.20.1
6
+ openpyxl>=3.1.2
7
+ pandas>=1.4.4
8
+ py3dmol>=2.0.0
9
+ requests
10
+ scikit-learn>=1.0.2
11
+ scipy>=1.6.2
12
+ seaborn>=0.13.0
13
+ statsmodels>=0.14.1
14
+
15
+ [dev]
16
+ ipykernel>=6.6.0
17
+ jupyter>=1.0.0
18
+ pytest>=7.0
19
+ pytest-cov>=4.0
20
+ ruff>=0.4
21
+
22
+ [docs]
23
+ sphinx
24
+ sphinx-autobuild
25
+ sphinx-rtd-theme
26
+ nbsphinx
@@ -0,0 +1 @@
1
+ rnavigate
@@ -0,0 +1,83 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "RNAvigate"
7
+ version = "1.1.0"
8
+ description = "RNA visualization and graphical analysis toolset"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ authors = [
12
+ { name = "Patrick Irving", email = "psirving@gmail.com" },
13
+ ]
14
+ keywords = ["RNA", "chemical probing", "visualization", "bioinformatics", "structural biology"]
15
+ classifiers = [
16
+ "Programming Language :: Python :: 3",
17
+ "Programming Language :: Python :: 3.9",
18
+ "Programming Language :: Python :: 3.10",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Topic :: Scientific/Engineering :: Bio-Informatics",
22
+ "Topic :: Scientific/Engineering :: Visualization",
23
+ "Intended Audience :: Science/Research",
24
+ ]
25
+ requires-python = ">=3.9"
26
+ dependencies = [
27
+ "biopython>=1.78",
28
+ "ipython>=8.18.1",
29
+ "jedi>=0.19.2",
30
+ "matplotlib>=3.8",
31
+ "numpy>=1.20.1",
32
+ "openpyxl>=3.1.2",
33
+ "pandas>=1.4.4",
34
+ "py3dmol>=2.0.0",
35
+ "requests",
36
+ "scikit-learn>=1.0.2",
37
+ "scipy>=1.6.2",
38
+ "seaborn>=0.13.0",
39
+ "statsmodels>=0.14.1",
40
+ ]
41
+
42
+ [project.optional-dependencies]
43
+ dev = [
44
+ "ipykernel>=6.6.0",
45
+ "jupyter>=1.0.0",
46
+ "pytest>=7.0",
47
+ "pytest-cov>=4.0",
48
+ "ruff>=0.4",
49
+ ]
50
+ docs = [
51
+ "sphinx",
52
+ "sphinx-autobuild",
53
+ "sphinx-rtd-theme",
54
+ "nbsphinx",
55
+ ]
56
+
57
+ [tool.pytest.ini_options]
58
+ testpaths = ["tests"]
59
+ python_files = ["test_*.py"]
60
+ python_classes = ["Test*"]
61
+ python_functions = ["test_*"]
62
+
63
+ [project.urls]
64
+ Homepage = "https://github.com/Weeks-UNC/RNAvigate"
65
+ Documentation = "https://rnavigate.readthedocs.io/en/latest/"
66
+ "Bug Tracker" = "https://github.com/Weeks-UNC/RNAvigate/issues"
67
+
68
+ [tool.ruff]
69
+ target-version = "py39"
70
+ line-length = 88
71
+ exclude = ["docs/"]
72
+
73
+ [tool.ruff.lint]
74
+ select = ["E", "F", "W", "I"]
75
+ # Some files have load-order-dependent imports due to circular imports that must be
76
+ # resolved before alphabetical sorting can be enforced.
77
+ # See the high-priority "Fix circular imports" item in TODO.md.
78
+ ignore = ["E501", "I001"] # line-length and import ordering
79
+
80
+ [tool.ruff.format]
81
+
82
+ [tool.setuptools.packages.find]
83
+ include = ["rnavigate", "rnavigate.*"]
@@ -0,0 +1,63 @@
1
+ """RNAvigate
2
+
3
+ RNA visualization and graphical analysis toolset
4
+
5
+ A Jupyter-compatible toolset for visually exploring RNA structure and chemical
6
+ probing data.
7
+ """
8
+
9
+ from rnavigate.rnavigate import Sample
10
+ from rnavigate.plotting_functions import (
11
+ plot_options,
12
+ plot_alignment,
13
+ plot_arcs,
14
+ plot_arcs_compare,
15
+ plot_circle,
16
+ plot_disthist,
17
+ plot_heatmap,
18
+ plot_linreg,
19
+ plot_mol,
20
+ plot_ntdist,
21
+ plot_profile,
22
+ plot_qc,
23
+ plot_roc,
24
+ plot_shapemapper,
25
+ plot_skyline,
26
+ plot_ss,
27
+ )
28
+ from rnavigate import analysis
29
+ from rnavigate import data
30
+ from rnavigate import plots
31
+ from rnavigate import styles
32
+ from rnavigate import transcriptomics
33
+
34
+ __version__ = "1.0.0"
35
+ __author__ = "Patrick S. Irving"
36
+ __email__ = "psirving@email.unc.edu"
37
+
38
+ __all__ = [
39
+ "Sample",
40
+ # plotting functions
41
+ "plot_options",
42
+ "plot_alignment",
43
+ "plot_arcs",
44
+ "plot_arcs_compare",
45
+ "plot_circle",
46
+ "plot_disthist",
47
+ "plot_heatmap",
48
+ "plot_linreg",
49
+ "plot_mol",
50
+ "plot_ntdist",
51
+ "plot_profile",
52
+ "plot_qc",
53
+ "plot_roc",
54
+ "plot_shapemapper",
55
+ "plot_skyline",
56
+ "plot_ss",
57
+ # modules
58
+ "analysis",
59
+ "data",
60
+ "plots",
61
+ "styles",
62
+ "transcriptomics",
63
+ ]
@@ -0,0 +1,18 @@
1
+ from rnavigate.analysis.logcompare import LogCompare
2
+ from rnavigate.analysis.lowss import LowSS
3
+ from rnavigate.analysis.deltashape import DeltaSHAPE, DeltaSHAPEProfile
4
+ from rnavigate.analysis.auroc import WindowedAUROC
5
+ from rnavigate.analysis.fragmapper import FragMaP, Fragmapper, FragmapperReplicates
6
+ from rnavigate.analysis.check_sequence import SequenceChecker
7
+
8
+ __all__ = [
9
+ "LogCompare",
10
+ "LowSS",
11
+ "DeltaSHAPE",
12
+ "DeltaSHAPEProfile",
13
+ "WindowedAUROC",
14
+ "FragMaP",
15
+ "Fragmapper",
16
+ "FragmapperReplicates",
17
+ "SequenceChecker",
18
+ ]
@@ -0,0 +1,198 @@
1
+ """Windowed AUROC assesses agreement between reactivities and base-pairing."""
2
+
3
+ import numpy as np
4
+ from sklearn.metrics import auc, roc_curve
5
+
6
+ from rnavigate import plots
7
+
8
+
9
+ # TODO: refactor as subclass of rnavigate.Sample
10
+ class WindowedAUROC:
11
+ """Compute and display windowed AUROC analysis.
12
+
13
+ This analysis computes the ROC curve over a sliding window for the
14
+ performance of per-nucleotide data (usually SHAPE-MaP or DMS-MaP Normalized
15
+ reactivity) in predicting the base-pairing status of each nucleotide. The
16
+ area under this curve (AUROC) is displayed compared to the median across
17
+ the RNA. Below, an arc plot displays the secondary structure and
18
+ per-nucleotide profile.
19
+
20
+ AUROC values (should) range from 0.5 (no predictive power) to 1.0
21
+ (perfect predictive power). A value of 0.5 indicates that the reactivity
22
+ profile does not fit the structure prediction well. These regions are good
23
+ candidates for further investigation with ensemble deconvolution.
24
+
25
+ References
26
+ ----------
27
+ Lan, T.C.T., Allan, M.F., Malsick, L.E. et al. Secondary structural
28
+ ensembles of the SARS-CoV-2 RNA genome in infected cells. Nat Commun
29
+ 13, 1128 (2022). https://doi.org/10.1038/s41467-022-28603-2
30
+
31
+ Methods
32
+ -------
33
+ __init__: Computes the AUROC array and AUROC median.
34
+ plot_auroc: Displays the AUROC analysis over the given region.
35
+ Returns Plot object
36
+
37
+ Attributes
38
+ ----------
39
+ sample : rnavigate.Sample
40
+ sample to retrieve profile and secondary structure
41
+ structure : str
42
+ Data keyword of sample pointing to secondary structure
43
+ e.g. sample.data[structure]
44
+ profile : str
45
+ Data keyword of sample pointing to profile
46
+ e.g. sample.data[profile]
47
+ sequence : the sequence string of sample.data[structure]
48
+ window: the size of the windows
49
+ nt_length: the length of sequence string
50
+ auroc: the auroc numpy array, length = nt_length, padded with np.nan
51
+ median_auroc: the median of the auroc array
52
+ """
53
+
54
+ def __init__(
55
+ self,
56
+ sample,
57
+ window=81,
58
+ profile="default_profile",
59
+ structure="default_structure",
60
+ ):
61
+ """Compute the AUROC for all windows. AUROC is a measure of how well a
62
+ reactivity profile predicts paired vs. unpaired nucleotide status.
63
+
64
+ Parameters
65
+ ----------
66
+ sample : rnav.Sample
67
+ Your rnavigate sample
68
+ window : int, optional
69
+ number of nucleotides to include in window
70
+ Defaults to 81.
71
+ profile (str, optional): data keyword of provided sample pointing
72
+ to a profile.
73
+ Defaults to "default_profile"
74
+ structure (str, optional): data keyword of provided sample pointing
75
+ to a secondary structure.
76
+ Defaults to "default_structure"
77
+ """
78
+ # ensure sample contains profile and structure data
79
+ for data in [profile, structure]:
80
+ assert data in sample.data.keys(), f"Sample missing {data} data"
81
+
82
+ # store basic information
83
+ self.sample = sample
84
+ self.structure = sample.get_data(structure)
85
+ self.profile = sample.get_data(profile)
86
+ self.sequence = self.structure.sequence
87
+ self.window = window
88
+ self.nt_length = self.structure.length
89
+
90
+ # get Norm_profile array and structure array
91
+ profile = self.profile.data["Norm_profile"].values
92
+ pair_nts = self.structure.pair_nts
93
+
94
+ # for each possible window: compute auroc and populate array
95
+ self.auroc = np.full(len(profile), np.nan)
96
+ pad = window // 2
97
+ for i in range(pad, len(profile) - pad):
98
+ # get profile and structure values within window
99
+ win_profile = profile[i - pad : i + pad + 1]
100
+ win_ct = pair_nts[i - pad : i + pad + 1]
101
+ # ignore positions where profile is nan
102
+ valid = ~np.isnan(win_profile)
103
+ # y: classification (paired or unpaired)
104
+ y = win_ct[valid] == 0
105
+ scores = win_profile[valid]
106
+ # skip this window if there are less than 10 paired or unpaired nts
107
+ if (sum(y) < 10) or (sum(~y) < 10):
108
+ continue
109
+ # add window auroc to array
110
+ tpr, fpr, _ = roc_curve(y, scores)
111
+ self.auroc[i] = auc(tpr, fpr)
112
+
113
+ self.auroc_median = np.nanmedian(self.auroc)
114
+
115
+ def plot_auroc(self, region=None):
116
+ """Plot the result of the windowed AUROC analysis, with arc plot of
117
+ structure and reactivity profile.
118
+
119
+ Args:
120
+ region (list of int: length 2, optional): Start and end nucleotide
121
+ positions to plot. Defaults to [1, RNA length].
122
+ """
123
+ if region is None:
124
+ start = 1
125
+ stop = self.nt_length
126
+ region = [start, stop]
127
+ region_length = self.nt_length
128
+ else:
129
+ start, stop = region
130
+ region_length = stop - start + 1
131
+
132
+ plot = plots.AP(1, region_length, cols=1, rows=1, region=region)
133
+ ax = plot.axes[0, 0]
134
+
135
+ # fill between auroc values and median, using secondary ax
136
+ x_values = np.arange(start, stop + 1)
137
+ auc_ax = ax.twinx()
138
+ auc_ax.set_ylim(0.5, 1.6)
139
+ auc_ax.set_yticks([0.5, self.auroc_median, 1.0])
140
+ auc_ax.fill_between(
141
+ x_values,
142
+ self.auroc[start - 1 : stop],
143
+ self.auroc_median,
144
+ fc="0.3",
145
+ lw=0,
146
+ )
147
+ plots.adjust_spines(auc_ax, ["left"])
148
+ plots.clip_spines(auc_ax, ["left"])
149
+
150
+ # add structure and reactivity profile track
151
+ plot.plot_data(
152
+ sequence=self.structure,
153
+ structure=self.structure,
154
+ structure2=None,
155
+ interactions=None,
156
+ interactions2=None,
157
+ profile=self.profile,
158
+ label="label",
159
+ seqbar=False,
160
+ title=False,
161
+ annotations=[],
162
+ plot_error=False,
163
+ )
164
+
165
+ # Place Track Labels
166
+ ax.set_title(
167
+ f"{self.sample.sample}\n{start} - {stop}",
168
+ loc="left",
169
+ fontdict={"fontsize": 48},
170
+ )
171
+ ax.text(
172
+ 1.002,
173
+ 6 / 8,
174
+ "Secondary\nStructure",
175
+ transform=ax.transAxes,
176
+ fontsize=36,
177
+ va="center",
178
+ )
179
+ ax.text(
180
+ 1.002,
181
+ 2 / 8,
182
+ f"{self.window}-nt window\nAUROC",
183
+ transform=ax.transAxes,
184
+ va="center",
185
+ fontsize=36,
186
+ )
187
+
188
+ # limits, ticks, spines, and grid
189
+ ax.set_ylim([-305, 315])
190
+ ax.set_xticks(ticks=[x for x in range(500, stop, 500) if x > start])
191
+ ax.set_xticks(ticks=[x for x in range(100, stop, 100) if x > start], minor=True)
192
+ ax.tick_params(axis="x", which="major", labelsize=36)
193
+ plots.adjust_spines(ax, ["bottom"])
194
+ ax.grid(axis="x")
195
+
196
+ # set figure size so that 100 ax units == 1 inch
197
+ plot.set_figure_size(height_ax_rel=1 / 100, width_ax_rel=1 / 100)
198
+ return plot