RNApolis 0.3.15__tar.gz → 0.3.17__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {rnapolis-0.3.15/src/RNApolis.egg-info → rnapolis-0.3.17}/PKG-INFO +1 -1
- {rnapolis-0.3.15 → rnapolis-0.3.17}/setup.py +1 -1
- {rnapolis-0.3.15 → rnapolis-0.3.17/src/RNApolis.egg-info}/PKG-INFO +1 -1
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/metareader.py +11 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/parser.py +13 -1
- {rnapolis-0.3.15 → rnapolis-0.3.17}/tests/test_annotator.py +7 -1
- {rnapolis-0.3.15 → rnapolis-0.3.17}/tests/test_parser.py +7 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/LICENSE +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/README.md +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/pyproject.toml +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/setup.cfg +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/RNApolis.egg-info/SOURCES.txt +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/RNApolis.egg-info/dependency_links.txt +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/RNApolis.egg-info/entry_points.txt +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/RNApolis.egg-info/requires.txt +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/RNApolis.egg-info/top_level.txt +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/annotator.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/clashfinder.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/common.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/molecule_filter.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/motif_extractor.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/rfam_folder.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/tertiary.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/transformer.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/src/rnapolis/util.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/tests/test_bugfixes.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/tests/test_common.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/tests/test_metareader.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/tests/test_quadruplexes.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/tests/test_rfam_folder.py +0 -0
- {rnapolis-0.3.15 → rnapolis-0.3.17}/tests/test_tertiary.py +0 -0
@@ -3,6 +3,7 @@ import argparse
|
|
3
3
|
from typing import IO, Dict, List
|
4
4
|
|
5
5
|
import orjson
|
6
|
+
import pandas as pd
|
6
7
|
from mmcif.io.IoAdapterPy import IoAdapterPy
|
7
8
|
from mmcif.io.PdbxReader import DataContainer
|
8
9
|
|
@@ -46,6 +47,10 @@ def main():
|
|
46
47
|
help="read the mmCIF file and list categories available inside",
|
47
48
|
action="store_true",
|
48
49
|
)
|
50
|
+
parser.add_argument(
|
51
|
+
"--csv-directory",
|
52
|
+
help="directory where to output CSV per each category",
|
53
|
+
)
|
49
54
|
args = parser.parse_args()
|
50
55
|
|
51
56
|
file = handle_input_file(args.path)
|
@@ -57,6 +62,12 @@ def main():
|
|
57
62
|
result = read_metadata(file, args.category)
|
58
63
|
print(orjson.dumps(result).decode("utf-8"))
|
59
64
|
|
65
|
+
if args.csv_directory:
|
66
|
+
for category in result:
|
67
|
+
with open(f"{args.csv_directory}/{category}.csv", "w") as f:
|
68
|
+
df = pd.DataFrame(result[category])
|
69
|
+
df.to_csv(f, index=False)
|
70
|
+
|
60
71
|
|
61
72
|
if __name__ == "__main__":
|
62
73
|
main()
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import logging
|
1
2
|
from typing import IO, Dict, List, Optional, Tuple, Union
|
2
3
|
|
3
4
|
from mmcif.io.IoAdapterPy import IoAdapterPy
|
@@ -5,6 +6,9 @@ from mmcif.io.IoAdapterPy import IoAdapterPy
|
|
5
6
|
from rnapolis.common import ResidueAuth, ResidueLabel
|
6
7
|
from rnapolis.tertiary import BASE_ATOMS, Atom, Residue3D, Structure3D
|
7
8
|
|
9
|
+
logging.basicConfig(level=logging.INFO)
|
10
|
+
logger = logging.getLogger(__name__)
|
11
|
+
|
8
12
|
|
9
13
|
def read_3d_structure(
|
10
14
|
cif_or_pdb: IO[str], model: Optional[int] = None, nucleic_acid_only: bool = False
|
@@ -104,6 +108,14 @@ def parse_cif(
|
|
104
108
|
auth_residue_name,
|
105
109
|
)
|
106
110
|
|
111
|
+
if label is None and auth is None:
|
112
|
+
# this should not happen in a valid mmCIF file
|
113
|
+
# skipping the line
|
114
|
+
logger.debug(
|
115
|
+
f"Cannot parse an atom line without chain name, residue number, and residue name: {row}"
|
116
|
+
)
|
117
|
+
continue
|
118
|
+
|
107
119
|
model = int(row_dict.get("pdbx_PDB_model_num", "1"))
|
108
120
|
atom_name = row_dict["label_atom_id"]
|
109
121
|
x = float(row_dict["Cartn_x"])
|
@@ -200,7 +212,7 @@ def parse_pdb(
|
|
200
212
|
if alternate_location != " ":
|
201
213
|
continue
|
202
214
|
atom_name = line[12:16].strip()
|
203
|
-
residue_name = line[
|
215
|
+
residue_name = line[17:20].strip()
|
204
216
|
chain_identifier = line[21]
|
205
217
|
residue_number = int(line[22:26].strip())
|
206
218
|
insertion_code = line[26] if line[26] != " " else None
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from collections import Counter
|
2
2
|
|
3
|
-
from rnapolis.annotator import extract_base_interactions
|
3
|
+
from rnapolis.annotator import extract_base_interactions, extract_secondary_structure
|
4
4
|
from rnapolis.parser import read_3d_structure
|
5
5
|
|
6
6
|
|
@@ -39,3 +39,9 @@ def test_1ehz():
|
|
39
39
|
assert (
|
40
40
|
False
|
41
41
|
), f"Interaction {element} occurs {count} times among {labels[i]} type: {duplicates}"
|
42
|
+
|
43
|
+
|
44
|
+
def test_8btk():
|
45
|
+
with open("tests/8btk_B7.cif") as f:
|
46
|
+
structure3d = read_3d_structure(f, 1)
|
47
|
+
assert extract_secondary_structure(structure3d, 1) is not None
|
@@ -9,3 +9,10 @@ def test_nucleic_acid_only():
|
|
9
9
|
with open("tests/184D.cif") as f:
|
10
10
|
structure3d = read_3d_structure(f, 1, nucleic_acid_only=True)
|
11
11
|
assert len(structure3d.residues) == 14
|
12
|
+
|
13
|
+
|
14
|
+
def test_1ato():
|
15
|
+
with open("tests/1ATO.pdb") as f:
|
16
|
+
structure3d = read_3d_structure(f)
|
17
|
+
sequence = "".join([residue.one_letter_name for residue in structure3d.residues])
|
18
|
+
assert sequence == "GGCACCUCCUCGCGGUGCC"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|