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.
- rnavigate-1.1.0/LICENSE +21 -0
- rnavigate-1.1.0/PKG-INFO +75 -0
- rnavigate-1.1.0/README.md +28 -0
- rnavigate-1.1.0/RNAvigate.egg-info/PKG-INFO +75 -0
- rnavigate-1.1.0/RNAvigate.egg-info/SOURCES.txt +61 -0
- rnavigate-1.1.0/RNAvigate.egg-info/dependency_links.txt +1 -0
- rnavigate-1.1.0/RNAvigate.egg-info/requires.txt +26 -0
- rnavigate-1.1.0/RNAvigate.egg-info/top_level.txt +1 -0
- rnavigate-1.1.0/pyproject.toml +83 -0
- rnavigate-1.1.0/rnavigate/__init__.py +63 -0
- rnavigate-1.1.0/rnavigate/analysis/__init__.py +18 -0
- rnavigate-1.1.0/rnavigate/analysis/auroc.py +198 -0
- rnavigate-1.1.0/rnavigate/analysis/check_sequence.py +171 -0
- rnavigate-1.1.0/rnavigate/analysis/deltashape.py +361 -0
- rnavigate-1.1.0/rnavigate/analysis/fragmapper.py +463 -0
- rnavigate-1.1.0/rnavigate/analysis/logcompare.py +239 -0
- rnavigate-1.1.0/rnavigate/analysis/lowss.py +311 -0
- rnavigate-1.1.0/rnavigate/data/__init__.py +78 -0
- rnavigate-1.1.0/rnavigate/data/alignments.py +927 -0
- rnavigate-1.1.0/rnavigate/data/annotation.py +456 -0
- rnavigate-1.1.0/rnavigate/data/colors.py +154 -0
- rnavigate-1.1.0/rnavigate/data/data.py +620 -0
- rnavigate-1.1.0/rnavigate/data/interactions.py +1750 -0
- rnavigate-1.1.0/rnavigate/data/pdb.py +271 -0
- rnavigate-1.1.0/rnavigate/data/profile.py +1080 -0
- rnavigate-1.1.0/rnavigate/data/secondary_structure.py +1433 -0
- rnavigate-1.1.0/rnavigate/data_loading.py +214 -0
- rnavigate-1.1.0/rnavigate/examples/__init__.py +178 -0
- rnavigate-1.1.0/rnavigate/examples/rmrp_data/__init__.py +0 -0
- rnavigate-1.1.0/rnavigate/examples/rnasep_data/__init__.py +0 -0
- rnavigate-1.1.0/rnavigate/examples/rrna_fragmap_data/__init__.py +0 -0
- rnavigate-1.1.0/rnavigate/examples/tpp_data/__init__.py +0 -0
- rnavigate-1.1.0/rnavigate/helper_functions.py +223 -0
- rnavigate-1.1.0/rnavigate/plots/__init__.py +81 -0
- rnavigate-1.1.0/rnavigate/plots/alignment.py +115 -0
- rnavigate-1.1.0/rnavigate/plots/arc.py +350 -0
- rnavigate-1.1.0/rnavigate/plots/circle.py +221 -0
- rnavigate-1.1.0/rnavigate/plots/disthist.py +209 -0
- rnavigate-1.1.0/rnavigate/plots/functions/__init__.py +55 -0
- rnavigate-1.1.0/rnavigate/plots/functions/circle.py +74 -0
- rnavigate-1.1.0/rnavigate/plots/functions/functions.py +337 -0
- rnavigate-1.1.0/rnavigate/plots/functions/ss.py +312 -0
- rnavigate-1.1.0/rnavigate/plots/functions/tracks.py +227 -0
- rnavigate-1.1.0/rnavigate/plots/heatmap.py +245 -0
- rnavigate-1.1.0/rnavigate/plots/linreg.py +284 -0
- rnavigate-1.1.0/rnavigate/plots/mol.py +280 -0
- rnavigate-1.1.0/rnavigate/plots/ntdist.py +131 -0
- rnavigate-1.1.0/rnavigate/plots/plots.py +348 -0
- rnavigate-1.1.0/rnavigate/plots/profile.py +253 -0
- rnavigate-1.1.0/rnavigate/plots/qc.py +262 -0
- rnavigate-1.1.0/rnavigate/plots/roc.py +181 -0
- rnavigate-1.1.0/rnavigate/plots/skyline.py +287 -0
- rnavigate-1.1.0/rnavigate/plots/sm.py +416 -0
- rnavigate-1.1.0/rnavigate/plots/ss.py +180 -0
- rnavigate-1.1.0/rnavigate/plotting_functions.py +1622 -0
- rnavigate-1.1.0/rnavigate/rnavigate.py +363 -0
- rnavigate-1.1.0/rnavigate/styles.py +247 -0
- rnavigate-1.1.0/rnavigate/transcriptomics/__init__.py +20 -0
- rnavigate-1.1.0/rnavigate/transcriptomics/bed.py +185 -0
- rnavigate-1.1.0/rnavigate/transcriptomics/eclip.py +262 -0
- rnavigate-1.1.0/rnavigate/transcriptomics/transcriptome.py +343 -0
- rnavigate-1.1.0/setup.cfg +4 -0
- rnavigate-1.1.0/tests/test_import.py +65 -0
rnavigate-1.1.0/LICENSE
ADDED
|
@@ -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.
|
rnavigate-1.1.0/PKG-INFO
ADDED
|
@@ -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 @@
|
|
|
1
|
+
|
|
@@ -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
|