stjames 0.0.121__tar.gz → 0.0.123__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.
Potentially problematic release.
This version of stjames might be problematic. Click here for more details.
- {stjames-0.0.121/stjames.egg-info → stjames-0.0.123}/PKG-INFO +1 -1
- {stjames-0.0.121 → stjames-0.0.123}/pyproject.toml +1 -1
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/__init__.py +3 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/conformer_search.py +49 -2
- stjames-0.0.123/stjames/workflows/dna.py +13 -0
- stjames-0.0.123/stjames/workflows/msa.py +31 -0
- stjames-0.0.123/stjames/workflows/protein.py +15 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/protein_cofolding.py +5 -1
- stjames-0.0.123/stjames/workflows/rna.py +13 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/workflow.py +30 -16
- {stjames-0.0.121 → stjames-0.0.123/stjames.egg-info}/PKG-INFO +1 -1
- {stjames-0.0.121 → stjames-0.0.123}/stjames.egg-info/SOURCES.txt +4 -0
- {stjames-0.0.121 → stjames-0.0.123}/LICENSE +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/README.md +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/setup.cfg +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/__init__.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/_deprecated_solvent_settings.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/atom.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/atomium_stjames/__init__.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/atomium_stjames/data.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/atomium_stjames/mmcif.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/atomium_stjames/pdb.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/atomium_stjames/utilities.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/base.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/basis_set.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/calculation.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/compute_settings.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/constraint.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/correction.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/data/__init__.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/data/bragg_radii.json +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/data/elements.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/data/isotopes.json +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/data/nist_isotopes.json +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/data/read_nist_isotopes.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/data/symbol_element.json +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/engine.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/message.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/method.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/mode.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/molecule.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/opt_settings.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/optimization/__init__.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/optimization/freezing_string_method.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/pdb.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/periodic_cell.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/py.typed +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/scf_settings.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/settings.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/solvent.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/status.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/task.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/thermochem_settings.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/types.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/admet.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/basic_calculation.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/batch_docking.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/bde.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/conformer.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/descriptors.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/docking.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/double_ended_ts_search.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/electronic_properties.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/fukui.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/hydrogen_bond_basicity.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/ion_mobility.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/irc.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/macropka.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/molecular_dynamics.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/multistage_opt.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/nmr.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/pka.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/pose_analysis_md.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/protein_binder_design.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/redox_potential.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/scan.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/solubility.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/spin_states.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/strain.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames/workflows/tautomer.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames.egg-info/dependency_links.txt +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames.egg-info/requires.txt +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/stjames.egg-info/top_level.txt +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/tests/test_constraints.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/tests/test_from_extxyz.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/tests/test_molecule.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/tests/test_pdb.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/tests/test_rounding.py +0 -0
- {stjames-0.0.121 → stjames-0.0.123}/tests/test_settings.py +0 -0
|
@@ -18,6 +18,7 @@ from .ion_mobility import *
|
|
|
18
18
|
from .irc import *
|
|
19
19
|
from .macropka import *
|
|
20
20
|
from .molecular_dynamics import *
|
|
21
|
+
from .msa import *
|
|
21
22
|
from .multistage_opt import *
|
|
22
23
|
from .nmr import *
|
|
23
24
|
from .pka import *
|
|
@@ -49,6 +50,7 @@ WORKFLOW_NAME = Literal[
|
|
|
49
50
|
"irc",
|
|
50
51
|
"macropka",
|
|
51
52
|
"molecular_dynamics",
|
|
53
|
+
"msa",
|
|
52
54
|
"multistage_opt",
|
|
53
55
|
"nmr",
|
|
54
56
|
"pka",
|
|
@@ -81,6 +83,7 @@ WORKFLOW_MAPPING: dict[WORKFLOW_NAME, Workflow] = {
|
|
|
81
83
|
"macropka": MacropKaWorkflow, # type: ignore [dict-item]
|
|
82
84
|
"molecular_dynamics": MolecularDynamicsWorkflow, # type: ignore [dict-item]
|
|
83
85
|
"multistage_opt": MultiStageOptWorkflow, # type: ignore [dict-item]
|
|
86
|
+
"msa": MSAWorkflow, # type: ignore [dict-item]
|
|
84
87
|
"nmr": NMRSpectroscopyWorkflow, # type: ignore [dict-item]
|
|
85
88
|
"pka": pKaWorkflow, # type: ignore [dict-item]
|
|
86
89
|
"pose_analysis_md": PoseAnalysisMolecularDynamicsWorkflow, # type: ignore [dict-item]
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
from abc import ABC
|
|
4
4
|
from typing import Annotated, Literal, Self, Sequence, TypeVar
|
|
5
5
|
|
|
6
|
-
from pydantic import AfterValidator, BaseModel, Field, field_validator, model_validator
|
|
6
|
+
from pydantic import AfterValidator, BaseModel, Field, PositiveInt, field_validator, model_validator
|
|
7
7
|
|
|
8
|
-
from ..base import LowercaseStrEnum
|
|
8
|
+
from ..base import Base, LowercaseStrEnum
|
|
9
9
|
from ..constraint import Constraint
|
|
10
10
|
from ..method import Method, XTBMethod
|
|
11
11
|
from ..mode import Mode
|
|
@@ -41,6 +41,50 @@ class ScreeningSettings(BaseModel):
|
|
|
41
41
|
max_confs: int | None = None
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
class ConformerClusteringDescriptor(LowercaseStrEnum):
|
|
45
|
+
"""
|
|
46
|
+
Potential descriptors to employ in conformer clustering.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
SOLVENT_ACCESSIBLE_SURFACE_AREA = "solvent_accessible_surface_area"
|
|
50
|
+
POLAR_SOLVENT_ACCESSIBLE_SURACE_AREA = "polar_solvent_accessible_surface_area"
|
|
51
|
+
RADIUS_OF_GYRATION = "radius_of_gyration"
|
|
52
|
+
PLANE_OF_BEST_FIT = "plane_of_best_fit"
|
|
53
|
+
NORMALIZED_PRINCIPAL_MOMENT_RATIO_1 = "normalized_principal_moment_ratio_1"
|
|
54
|
+
NORMALIZED_PRINCIPAL_MOMENT_RATIO_2 = "normalized_principal_moment_ratio_2"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class ConformerClusteringSettings(Base):
|
|
58
|
+
"""
|
|
59
|
+
Settings for clustering conformers based on their three-dimensional properties.
|
|
60
|
+
|
|
61
|
+
The properties used for clustering by default are:
|
|
62
|
+
- Solvent-accessible surface area
|
|
63
|
+
- Polar solvent-accessible surface area
|
|
64
|
+
- Radius of gyration
|
|
65
|
+
- Plane of best fit
|
|
66
|
+
- Normalized principal moment ratios 1 and 2
|
|
67
|
+
|
|
68
|
+
Rowan uses k-means clustering to identify representative conformers.
|
|
69
|
+
This loosely follows Wilcken and co-workers (10.1007/s10822-020-00337-7).
|
|
70
|
+
|
|
71
|
+
:param num_clusters: the number of clusters to include
|
|
72
|
+
:param conformers_per_cluster: the number of compounds to pick from each cluster
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
descriptors: list[ConformerClusteringDescriptor] = [
|
|
76
|
+
ConformerClusteringDescriptor.SOLVENT_ACCESSIBLE_SURFACE_AREA,
|
|
77
|
+
ConformerClusteringDescriptor.POLAR_SOLVENT_ACCESSIBLE_SURACE_AREA,
|
|
78
|
+
ConformerClusteringDescriptor.RADIUS_OF_GYRATION,
|
|
79
|
+
ConformerClusteringDescriptor.PLANE_OF_BEST_FIT,
|
|
80
|
+
ConformerClusteringDescriptor.NORMALIZED_PRINCIPAL_MOMENT_RATIO_1,
|
|
81
|
+
ConformerClusteringDescriptor.NORMALIZED_PRINCIPAL_MOMENT_RATIO_2,
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
num_clusters: PositiveInt = 5
|
|
85
|
+
conformers_per_cluster: PositiveInt = 3
|
|
86
|
+
|
|
87
|
+
|
|
44
88
|
class ConformerGenSettings(BaseModel):
|
|
45
89
|
"""
|
|
46
90
|
Conformer generation settings.
|
|
@@ -302,6 +346,7 @@ class ConformerGenMixin(BaseModel):
|
|
|
302
346
|
:param constraints: constraints to add
|
|
303
347
|
:param nci: add a constraining potential for non-covalent interactions
|
|
304
348
|
:param max_confs: maximum number of conformers to keep
|
|
349
|
+
:param clustering_settings: how to cluster the conformers (if at all)
|
|
305
350
|
"""
|
|
306
351
|
|
|
307
352
|
conf_gen_mode: Mode = Mode.RAPID
|
|
@@ -310,6 +355,8 @@ class ConformerGenMixin(BaseModel):
|
|
|
310
355
|
nci: bool = False
|
|
311
356
|
max_confs: int | None = None
|
|
312
357
|
|
|
358
|
+
conformer_clustering_settings: ConformerClusteringSettings | None = None
|
|
359
|
+
|
|
313
360
|
@model_validator(mode="after")
|
|
314
361
|
def validate_and_build_conf_gen_settings(self) -> Self:
|
|
315
362
|
"""Validate and build the ConformerGenSettings."""
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from ..base import LowercaseStrEnum
|
|
2
|
+
from .workflow import ProteinSequenceWorkflow
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class MSAFormat(LowercaseStrEnum):
|
|
6
|
+
"""Format of the MSA."""
|
|
7
|
+
|
|
8
|
+
COLABFOLD_DEFAULT = "colabfold_default"
|
|
9
|
+
AF3_JSON = "af3_json"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class MSAWorkflow(ProteinSequenceWorkflow):
|
|
13
|
+
"""
|
|
14
|
+
Workflow for generating a MSA from protein sequences.
|
|
15
|
+
|
|
16
|
+
Inherited:
|
|
17
|
+
:param initial_protein_sequences: protein sequences of interest
|
|
18
|
+
|
|
19
|
+
New:
|
|
20
|
+
:param format: the format of the MSA return files
|
|
21
|
+
|
|
22
|
+
Results:
|
|
23
|
+
:param a3m_file: A3M file string
|
|
24
|
+
:param m8_file: M8 file string
|
|
25
|
+
:param af3_json_file: AF3 JSON file string
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
format: MSAFormat = MSAFormat.COLABFOLD_DEFAULT
|
|
29
|
+
a3m_file: str | None = None
|
|
30
|
+
m8_file: str | None = None
|
|
31
|
+
af3_json_file: str | None = None
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""Protein-related workflow data models."""
|
|
2
|
+
|
|
3
|
+
from ..base import Base
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ProteinSequence(Base):
|
|
7
|
+
"""
|
|
8
|
+
Protein sequence metadata including cyclic flag.
|
|
9
|
+
|
|
10
|
+
:param sequence: amino-acid sequence string
|
|
11
|
+
:param cyclic: whether this sequence forms a cyclic peptide (defaults to False)
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
sequence: str
|
|
15
|
+
cyclic: bool = False
|
|
@@ -68,10 +68,14 @@ class AffinityScore(BaseModel):
|
|
|
68
68
|
|
|
69
69
|
class ProteinCofoldingWorkflow(FASTAWorkflow):
|
|
70
70
|
"""
|
|
71
|
-
|
|
71
|
+
Workflow for predicting structures.
|
|
72
|
+
|
|
73
|
+
Especially protein structures. At least one biological sequence is required.
|
|
72
74
|
|
|
73
75
|
Inherited:
|
|
74
76
|
:param initial_protein_sequences: protein sequences of interest
|
|
77
|
+
:param initial_dna_sequences: DNA sequences of interest
|
|
78
|
+
:param initial_rna_sequences: RNA sequences of interest
|
|
75
79
|
:param initial_smiles_list: SMILES strings of interest
|
|
76
80
|
|
|
77
81
|
New:
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""Base classes for workflows."""
|
|
2
2
|
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
3
5
|
from pydantic import field_validator
|
|
4
6
|
|
|
5
7
|
from ..base import Base
|
|
@@ -7,6 +9,9 @@ from ..message import Message
|
|
|
7
9
|
from ..mode import Mode
|
|
8
10
|
from ..molecule import Molecule
|
|
9
11
|
from ..types import UUID
|
|
12
|
+
from .dna import DNASequence
|
|
13
|
+
from .protein import ProteinSequence
|
|
14
|
+
from .rna import RNASequence
|
|
10
15
|
|
|
11
16
|
|
|
12
17
|
class Workflow(Base):
|
|
@@ -22,31 +27,30 @@ class Workflow(Base):
|
|
|
22
27
|
return repr(self)
|
|
23
28
|
|
|
24
29
|
|
|
25
|
-
class ProteinSequence(Base):
|
|
26
|
-
"""
|
|
27
|
-
Protein sequence metadata including cyclic flag.
|
|
28
|
-
|
|
29
|
-
:param sequence: amino-acid sequence string
|
|
30
|
-
:param cyclic: whether this sequence forms a cyclic peptide (defaults to False)
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
sequence: str
|
|
34
|
-
cyclic: bool = False
|
|
35
|
-
|
|
36
|
-
|
|
37
30
|
class FASTAWorkflow(Workflow):
|
|
38
31
|
"""
|
|
39
|
-
Base class for Workflows that operate on
|
|
32
|
+
Base class for Workflows that operate on biological sequences and SMILES.
|
|
40
33
|
|
|
41
|
-
:param initial_protein_sequences:
|
|
34
|
+
:param initial_protein_sequences: protein sequences to evaluate, either plain sequence strings or ProteinSequence objects with metadata
|
|
35
|
+
:param initial_dna_sequences: DNA sequences to evaluate, either plain sequence strings or DNASequence objects with metadata
|
|
36
|
+
:param initial_rna_sequences: RNA sequences to evaluate, either plain sequence strings or RNASequence objects with metadata
|
|
42
37
|
:param initial_smiles_list: SMILES strings of interest
|
|
43
38
|
:param ligand_binding_affinity_index: optional index selecting which ligand affinity to evaluate
|
|
39
|
+
:raises ValueError: if none of the sequence lists are provided
|
|
44
40
|
"""
|
|
45
41
|
|
|
46
|
-
initial_protein_sequences: list[ProteinSequence] | list[str]
|
|
47
|
-
|
|
42
|
+
initial_protein_sequences: list[ProteinSequence] | list[str] = []
|
|
43
|
+
initial_dna_sequences: list[DNASequence] = []
|
|
44
|
+
initial_rna_sequences: list[RNASequence] = []
|
|
45
|
+
initial_smiles_list: list[str] = []
|
|
48
46
|
ligand_binding_affinity_index: int | None = None
|
|
49
47
|
|
|
48
|
+
def model_post_init(self, __context: Any) -> None:
|
|
49
|
+
if not (self.initial_protein_sequences or self.initial_dna_sequences or self.initial_rna_sequences):
|
|
50
|
+
raise ValueError(
|
|
51
|
+
"Provide at least one of `initial_protein_sequences`, `initial_dna_sequences`, or `initial_rna_sequences`.",
|
|
52
|
+
)
|
|
53
|
+
|
|
50
54
|
|
|
51
55
|
class SMILESWorkflow(Workflow):
|
|
52
56
|
"""
|
|
@@ -95,6 +99,16 @@ class MoleculeWorkflow(Workflow):
|
|
|
95
99
|
return mode
|
|
96
100
|
|
|
97
101
|
|
|
102
|
+
class ProteinSequenceWorkflow(Workflow):
|
|
103
|
+
"""
|
|
104
|
+
Base class for Workflows that operate on protein sequences.
|
|
105
|
+
|
|
106
|
+
:param initial_protein_sequences: protein sequences to evaluate, either plain sequence strings or ProteinSequence objects with metadata
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
initial_protein_sequences: list[ProteinSequence] | list[str] = []
|
|
110
|
+
|
|
111
|
+
|
|
98
112
|
class DBCalculation(Base):
|
|
99
113
|
"""Encodes a calculation that's in the database. This isn't terribly useful by itself."""
|
|
100
114
|
|
|
@@ -53,6 +53,7 @@ stjames/workflows/bde.py
|
|
|
53
53
|
stjames/workflows/conformer.py
|
|
54
54
|
stjames/workflows/conformer_search.py
|
|
55
55
|
stjames/workflows/descriptors.py
|
|
56
|
+
stjames/workflows/dna.py
|
|
56
57
|
stjames/workflows/docking.py
|
|
57
58
|
stjames/workflows/double_ended_ts_search.py
|
|
58
59
|
stjames/workflows/electronic_properties.py
|
|
@@ -62,13 +63,16 @@ stjames/workflows/ion_mobility.py
|
|
|
62
63
|
stjames/workflows/irc.py
|
|
63
64
|
stjames/workflows/macropka.py
|
|
64
65
|
stjames/workflows/molecular_dynamics.py
|
|
66
|
+
stjames/workflows/msa.py
|
|
65
67
|
stjames/workflows/multistage_opt.py
|
|
66
68
|
stjames/workflows/nmr.py
|
|
67
69
|
stjames/workflows/pka.py
|
|
68
70
|
stjames/workflows/pose_analysis_md.py
|
|
71
|
+
stjames/workflows/protein.py
|
|
69
72
|
stjames/workflows/protein_binder_design.py
|
|
70
73
|
stjames/workflows/protein_cofolding.py
|
|
71
74
|
stjames/workflows/redox_potential.py
|
|
75
|
+
stjames/workflows/rna.py
|
|
72
76
|
stjames/workflows/scan.py
|
|
73
77
|
stjames/workflows/solubility.py
|
|
74
78
|
stjames/workflows/spin_states.py
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|