Skip to content

Commit

Permalink
Merge branch 'main' of github.com:prody/ProDy into ens_from_sel_ref
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesmkrieger committed Aug 14, 2024
2 parents ef29c97 + 34fa7be commit ae39296
Show file tree
Hide file tree
Showing 88 changed files with 108,190 additions and 423 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["2.7", "3.8", "3.9", "3.10"]
python-version: ["2.7", "3.8", "3.9", "3.10", "3.11"]

steps:
- uses: actions/checkout@v2
Expand All @@ -29,9 +29,9 @@ jobs:
if [[ ${{ matrix.python-version }} != "2.7" ]]; then conda config --add channels conda-forge; fi
conda create --yes -n test python=${{ matrix.python-version }}
source activate test
conda install --yes numpy scipy nose pyparsing requests
if [[ ${{ matrix.python-version }} == "2.7" ]]; then conda install --yes unittest2; else conda install --yes pdbfixer; fi
pip install mmtf-python
conda install --yes numpy scipy nose requests
if [[ ${{ matrix.python-version }} == "2.7" ]]; then conda install --yes unittest2; else conda install --yes pdbfixer mdtraj; fi
pip install mmtf-python scikit-learn
pip install .
python setup.py build_ext --inplace --force
- name: Test with pytest
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ __pycache__
*.pdb.gz
*.cif
*.cif.gz
*.mmtf
*.map
*.mrc
*.dcd

# Docs
/docs/_build/
Expand Down
4 changes: 2 additions & 2 deletions PKG-INFO
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Classifier: Topic :: Scientific/Engineering :: Chemistry
Requires: numpy (>=1.10)
Requires: pyparsing
Requires: pyparsing (<=3.1.1)
Requires: biopython
Requires: scipy
Provides: prody (2.1.2)
Provides: prody
53 changes: 53 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,57 @@ API is for interactive usage as well as application development. ProDy also
comes with several analysis applications and a graphical user interface for
visual analysis.

Further details are described in the ProDy papers:

| Bakan A, Meireles LM, Bahar I.
| *ProDy*: Protein Dynamics Inferred from Theory and Experiments.
| *Bioinformatics* **2011** 27(11):1575-1577.
| Bakan A, Dutta A, Mao W, Liu Y, Chennubhotla C, Lezon TR, Bahar I.
| *Evol* and *ProDy* for Bridging Protein Sequence Evolution and Structural Dynamics.
| *Bioinformatics* **2014** 30(18):2681-2683.
| Zhang S, Krieger JM, Zhang Y, Kaya C, Kaynak B, Mikulska-Ruminska K, Doruker P, Li H, Bahar I.
| *ProDy* 2.0: Increased Scale and Scope after 10 Years of Protein Dynamics Modelling with Python.
| *Bioinformatics* **2021** 37(20):3657-3659.
MODULES
--------

ProDy has a modular structure with modules inside various subpackages.

The main ones are:

- :mod:`~prody.atomic`` handles all :class:`~prody.atomic.Atomic` objects including :class:`~prody.atomic.AtomGroup` and :class:`.Selection`

- :mod:`~prody.database` interfaces with databases such as CATH, DALI, UniProt and Pfam

- :mod:`~prody.dynamics` provides all the modules for normal mode analysis with various elastic network models,
as well as PCA, SignDy (:mod:`~prody.dynamics.signature`), hybrid methods such as :mod:`~prody.dynamics.clustenm`,
allosteric signal propagation methods :mod:`~prody.dynamics.perturb` (PRS) and :func:`~prody.dynamics.analysis.calcHitTime` (Markovian hitting time),
and various analysis and plotting functions.

- :mod:`~prody.ensemble` enables construction of heterogeneous structural ensembles for exploring dynamics from experiments and simulations

- :mod:`~prody.proteins` provides various modules for parsing different kinds of protein structure files including PDB, mmCIF, MMTF and maps,
as well as tools to align and compare structures, and analysis of :mod:`~prody.proteins.interactions` within and between proteins (InSty) and
find :mod:`~prody.proteins.waterbridges` (WatFinder).

- :mod:`~prody.sequence` has all the sequence alignment and evolutionary analysis tools of Evol


Smaller ones include:

- :mod:`~prody.chromatin` specific to chromatin dynamics (ChromDy) including :mod:`~prody.chromatin.hic` and :mod:`~prody.chromatin.cluster`

- :mod:`~prody.compounds` for parsing small molecule compounds/ligands from the PDB and related databases

- :mod:`~prody.domain_decomposition` for Spectrus dynamical domain decomposition

- :mod:`~prody.trajectory` for trajectories in DCD format

- :mod:`~prody.utilities`


GETTING PRODY
-------------
Expand All @@ -45,6 +96,8 @@ DOCUMENTATION

* Changes: http://prody.csb.pitt.edu/manual/release

See also https://github.com/prody/ProDy-website for latest versions.


SOURCE CODE
-----------
Expand Down
27 changes: 20 additions & 7 deletions docs/about/people.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,15 @@ including *SignDy* and Adaptive ANM.
the *cryo-EM* module, :mod:`.protein.emdmap`.

`Burak Kaynak`_ contributed significantly to the development of
:mod:`.domain_decomposition` and :mod:`.dynamics.essa`,
and is in the process of adding other modules too.
:mod:`.domain_decomposition`, :mod:`.dynamics.essa`, and
:mod:`.dynamics.clustenm`.

`Karolina Mikulska-Ruminska`_ contributed significantly to the development of
:mod:`.protein.interactions` (*InSty*), :mod:`.protein.waterbridges`
(*WatFinder*), and :mod:`.dynamics.mechstiff` (*MechStiff*).

`Anthony Bogetti`_ is overseeing the overall development of *ProDy* since
2024.

`Anindita Dutta`_ contributed to the development of *Evol*,
:mod:`.database` and :mod:`.sequence` modules.
Expand All @@ -52,26 +59,32 @@ contributions and feedback from the following individuals:

`Ying Liu`_ provided the code for Perturbation Response Scanning method.

`Frane Doljanin`_ provided the code for the water bridge detection.

`Kian Ho`_ contributed with bug fixes and unit tests for DSSP functions.

`Gökçen Eraslan`_ contributed with bug fixes and development and maintenance
insights.



.. _Ahmet Bakan: https://scholar.google.com/citations?user=-QAYVgMAAAAJ&hl=en
.. _Cihan Kaya: https://www.linkedin.com/in/cihan-kaya/
.. _Bahar Lab: http://www.ccbb.pitt.edu/faculty/bahar/
.. _Bahar Lab: http://www.bahargroup.org/Faculty/bahar/
.. _University of Pittsburgh: http://www.pitt.edu/
.. _Anindita Dutta: http://www.linkedin.com/pub/anindita-dutta/5a/568/a90
.. _Wenzhi Mao: http://www.linkedin.com/pub/wenzhi-mao/2a/29a/29
.. _Lidio Meireles: http://www.linkedin.com/in/lidio
.. _Ying Liu: http://www.linkedin.com/pub/ying-liu/15/48b/5a9
.. _Kian Ho: https://github.com/kianho
.. _Gökçen Eraslan: http://blog.yeredusuncedernegi.com/
.. _Tim Lezon: http://www.csb.pitt.edu/Faculty/Lezon/
.. _Tim Lezon: https://scholar.google.pl/citations?user=1MwNI3EAAAAJ&hl=pl&oi=ao
.. _Chakra Chennubhotla: http://www.csb.pitt.edu/Faculty/Chakra/
.. _She (John) Zhang: https://www.linkedin.com/in/she-zhang-49164399/
.. _Hongchun Li: http://www.pitt.edu/~hongchun/
.. _James Krieger: http://www.csb.pitt.edu/Faculty/bahar/lab.html
.. _Yan Zhang: https://www.csb.pitt.edu/Faculty/bahar/lab.html
.. _Burak Kaynak: https://www.csb.pitt.edu/Faculty/bahar/lab.html
.. _James Krieger: https://scholar.google.pl/citations?user=DoiCjkUAAAAJ&hl=pl
.. _Yan Zhang: https://scholar.google.pl/citations?user=VxwU0pgAAAAJ&hl=pl&oi=sra
.. _Burak Kaynak: https://scholar.google.pl/citations?user=gP8RokwAAAAJ&hl=pl&oi=ao
.. _Karolina Mikulska-Ruminska: https://scholar.google.pl/citations?user=IpyPHRwAAAAJ&hl=pl
.. _Anthony Bogetti: https://scholar.google.pl/citations?hl=pl&user=9qQClIcAAAAJ
.. _Frane Doljanin: https://github.com/fdoljanin
2 changes: 1 addition & 1 deletion docs/apps/prody/prody.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ optional arguments:

subcommands:
{anm,gnm,pca,eda,align,blast,biomol,catdcd,contacts,fetch,select,energy,clustenm}
anm perform anisotropic network model calculations
anm perform anisotropic network model normal mode analysis calculations
gnm perform Gaussian network model calculations
pca perform principal component analysis calculations
eda perform essential dynamics analysis calculations
Expand Down
2 changes: 1 addition & 1 deletion docs/docs
4 changes: 2 additions & 2 deletions docs/reference/dynamics/signature.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Signature Dynamics of Protein Families
======================================
Signature Dynamics of Protein Families (SignDy)
===============================================

.. automodule:: prody.dynamics.signature
:members:
4 changes: 2 additions & 2 deletions docs/reference/proteins/interactions.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Interactions Tools
======================
Interactions and Stability (InSty)
===================================

.. automodule:: prody.proteins.interactions
:members:
Expand Down
6 changes: 6 additions & 0 deletions docs/reference/proteins/waterbridges.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Water bridge finder (WatFinder)
===================================

.. automodule:: prody.proteins.waterbridges
:members:
:undoc-members:
4 changes: 4 additions & 0 deletions docs/release/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ Release Notes
:maxdepth: 2
:glob:

v2.4_series
v2.3_series
v2.2_series
v2.1_series
v2.0_series
v1.11_series
v1.10_series
Expand Down
2 changes: 1 addition & 1 deletion prody/apps/prody_apps/prody_anm.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ def prody_anm(pdb, **kwargs):
def addCommand(commands):

subparser = commands.add_parser('anm',
help='perform anisotropic network model calculations')
help='perform anisotropic network model normal mode analysis calculations')

subparser.add_argument('--quiet', help="suppress info messages to stderr",
action=Quiet, nargs=0)
Expand Down
5 changes: 3 additions & 2 deletions prody/apps/prody_apps/prody_catdcd.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,9 @@ def prody_catdcd(*dcd, **kwargs):
out = prody.DCDFile(output, 'w')
count = 0
stride = kwargs.get('stride', 1)
goto = stride != 1
slc = slice(kwargs.get('first', 0), kwargs.get('last', -1),
first = kwargs.get('first', 0)
goto = stride != 1 or first != 0
slc = slice(first, kwargs.get('last', -1),
stride).indices(len(traj)+1)
for i in range(*slc):
if goto:
Expand Down
43 changes: 39 additions & 4 deletions prody/apps/prody_apps/prody_clustenm.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,12 @@
('t_steps_i', 'number of 2.0 fs MD time steps for initial structure', 1000),
('t_steps_g', 'number of 2.0 fs MD time steps in each generation, can be tuple of floats', '7500'),
('multiple', 'whether each conformer will be saved as a separate PDB file', False),
('write_params', 'whether to write parameters', False)]:
('write_params', 'whether to write parameters', False),
('fitmap', 'map to fit by filtering conformations like MDeNMD-EMFit', None),
('fit_resolution', 'resolution for blurring structures for fitting cc', 5),
('map_cutoff', 'min_cutoff for passing map for fitting', 0),
('replace_filtered', 'whether to keep sampling again to replace filtered conformers', False),
('platform', 'openmm platform (OpenCL, CUDA, CPU or None)', None)]:

DEFAULTS[key] = val
HELPTEXT[key] = txt
Expand All @@ -67,6 +72,13 @@ def prody_clustenm(pdb, **kwargs):
import prody
LOGGER = prody.LOGGER

fitmap = kwargs.pop('fitmap')
map_cutoff = kwargs.pop('map_cutoff')
if fitmap is not None:
fitmap = prody.parseEMD(fitmap, min_cutoff=map_cutoff)

fit_resolution = kwargs.pop('fit_resolution')

selstr = kwargs.pop('select')
prefix = kwargs.pop('prefix')
sparse = kwargs.pop('sparse')
Expand All @@ -75,6 +87,7 @@ def prody_clustenm(pdb, **kwargs):
model = kwargs.pop('model')
altloc = kwargs.pop('altloc')
turbo = kwargs.pop('turbo')
nproc = kwargs.pop('nproc')

ngens = kwargs.pop('ngens')
nconfs = kwargs.pop('nconfs')
Expand Down Expand Up @@ -142,7 +155,9 @@ def prody_clustenm(pdb, **kwargs):
t_steps_g=eval(t_steps_g),
outlier=outlier, mzscore=mzscore,
sparse=sparse, kdtree=kdtree, turbo=turbo,
parallel=parallel, **kwargs)
parallel=parallel, fitmap=fitmap,
fit_resolution=fit_resolution,
nproc=nproc, **kwargs)

single = not kwargs.pop('multiple')
outname = join(outdir, prefix)
Expand Down Expand Up @@ -188,7 +203,7 @@ def addCommand(commands):
$ prody clustenm 1aar -s "calpha and chain A and resnum < 70" -A""",
test_examples=[0, 1])

group = addNMAParameters(subparser, include_nproc=False)
group = addNMAParameters(subparser, include_nproc=True)

group.add_argument('-c', '--cutoff', dest='cutoff', type=str,
default=DEFAULTS['cutoff'], metavar='FLOAT',
Expand Down Expand Up @@ -256,7 +271,7 @@ def addCommand(commands):
default=DEFAULTS['ionicStrength'], metavar='FLOAT',
help=HELPTEXT['ionicStrength'] + ' (default: %(default)s)')

group.add_argument('-P', '--padding', dest='padding', type=float,
group.add_argument('-Q', '--padding', dest='padding', type=float,
default=DEFAULTS['padding'], metavar='FLOAT',
help=HELPTEXT['padding'] + ' (default: %(default)s)')

Expand Down Expand Up @@ -307,6 +322,26 @@ def addCommand(commands):
group.add_argument('-p', '--file-prefix', dest='prefix', type=str,
default=DEFAULTS['prefix'], metavar='STR',
help=HELPTEXT['prefix'] + ' (default: pdb%(default)s)')

group.add_argument('-q', '--fitmap', dest='fitmap', type=str,
default=DEFAULTS['fitmap'], metavar='STR',
help=HELPTEXT['fitmap'] + ' (default: %(default)s)')

group.add_argument('-r', '--fit_resolution', dest='fit_resolution', type=float,
default=DEFAULTS['fit_resolution'], metavar='FLOAT',
help=HELPTEXT['fit_resolution'] + ' (default: %(default)s)')

group.add_argument('-u', '--map_cutoff', dest='map_cutoff', type=float,
default=DEFAULTS['map_cutoff'], metavar='FLOAT',
help=HELPTEXT['map_cutoff'] + ' (default: %(default)s)')

group.add_argument('-O', '--replace_filtered', dest='replace_filtered',
action='store_true',
default=DEFAULTS['replace_filtered'], help=HELPTEXT['replace_filtered'])

group.add_argument('-V', '--platform', dest='platform', type=str,
default=DEFAULTS['platform'], metavar='STR',
help=HELPTEXT['platform'] + ' (default: %(default)s)')

subparser.add_argument('pdb', help='PDB identifier or filename')

Expand Down
7 changes: 6 additions & 1 deletion prody/apps/prody_apps/prody_select.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,10 @@ def prody_select(selstr, *pdbs, **kwargs):
suffix = kwargs.get('suffix', '_selected')
output = kwargs.get('output', None)
altloc = kwargs.get('altloc', 'all')
uniteChains = kwargs.get('uniteChains', False)

for pdb in pdbs:
pdb = parsePDB(pdb, altloc=altloc)
pdb = parsePDB(pdb, altloc=altloc, unite_chains=uniteChains)

pdbselect = pdb.select(selstr)
if pdbselect is None:
Expand Down Expand Up @@ -89,6 +90,10 @@ def addCommand(commands):
type=str, default='_selected',
help=('output filename suffix (default: %(default)s)'))

group.add_argument('-u', '--unite-chains', dest='uniteChains',
action='store_true',
default=False, help=('unite chains if using mmCIF (default False)'))

subparser.add_argument('select', help='atom selection string')
subparser.add_argument('pdb', nargs='+',
help='PDB identifier(s) or filename(s)')
Expand Down
2 changes: 1 addition & 1 deletion prody/atomic/atom.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ def toTEMPyAtom(self):
self.getAltloc(), self.getIcode(),
self.getCharge(), self.getElement(),
self.getOccupancy(), self.getResname(),
None, self.getACSIndex(), self.getChid(),
self.getACSIndex(), self.getChid(),
self.getResnum())


Expand Down
Loading

0 comments on commit ae39296

Please sign in to comment.