From e5d1ede1f65d105428a68287a43aec3709ea1a55 Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 10 Dec 2015 14:09:48 +0100 Subject: [PATCH 01/18] Doc for installation --- doc-api/source/conf.py | 2 +- doc-api/source/index.rst | 15 ++++++++++-- doc-api/source/installation.rst | 42 +++++++++++++++++++++++++++++++++ doc/installation.md | 22 ----------------- 4 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 doc-api/source/installation.rst delete mode 100644 doc/installation.md diff --git a/doc-api/source/conf.py b/doc-api/source/conf.py index 729e4fa..f821daf 100644 --- a/doc-api/source/conf.py +++ b/doc-api/source/conf.py @@ -109,7 +109,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'alabaster' +html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the diff --git a/doc-api/source/index.rst b/doc-api/source/index.rst index 6fc9c82..a88f6c8 100644 --- a/doc-api/source/index.rst +++ b/doc-api/source/index.rst @@ -3,8 +3,18 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to PBxplore API's documentation! -======================================== +Welcome to PBxplore's documentation! +==================================== + +PBxplore is a suite of tools dedicated to Protein Block analysis. + +PBxplore +-------- + +.. toctree:: + :maxdepth: 1 + + installation PBxplore API cookbook --------------------- @@ -16,6 +26,7 @@ PBxplore API cookbook ./notebooks/WritePB ./notebooks/Deformability + PBxplore API reference ---------------------- diff --git a/doc-api/source/installation.rst b/doc-api/source/installation.rst new file mode 100644 index 0000000..a678141 --- /dev/null +++ b/doc-api/source/installation.rst @@ -0,0 +1,42 @@ +Installation +============ + +Although it's not possible to cover all possible ways to install PBxplore on any operating system, +we try in this document to provide few guidelines regarding PBxplore setup. + +Supported Platforms +------------------- + +Currently, ``PBxplore`` run with Python 2.7, 3.3 and 3.4 on Linux and Mac OS X. + + +Dependencies +------------ + +To use ``PBxplore``, the following libraries have to be installed. + + `NumPy `_ >= 1.6.0 + Numpy is the base package for numerical computing in python. + +Optionally, ``PBxplore`` can use the following packages: + + `MDAnalysis `_ >= 0.11 + We use MDAnalysis for loading trajectories. + See the full supported list + `here `_. + + `Matplotlib `_ >= 1.4.0 + All ploting functions use `matplotlib` package. + + `Weblogo3 `_ + `Weblogo3` is required to create logo from PB sequences. + + +Installing PBxplore +------------------- + +Once dependencies installed, the most straightforward way is to use `pip`: + +.. code-block:: bash + + $ pip install pbxplore diff --git a/doc/installation.md b/doc/installation.md deleted file mode 100644 index 5d8526f..0000000 --- a/doc/installation.md +++ /dev/null @@ -1,22 +0,0 @@ -Although it not possible to cover all possible ways to install PBxplore on any operating system, we try in this document to provide few tips and tricks regarding PBxplore setup. - -# Linux - -On Ubuntu-based operating systems (version 14.04 in this example), first install all PBxplore requirements: - - sudo apt-get install -y python python-numpy - sudo apt-get install -y r-base - -Then optionnal packages: - - pip install --user mdanalysis - pip install --user weblogo - -Eventually, PBxplore itself - - git clone git@github.com:pierrepo/PBxplore.git - - -# Mac - -# Windows From b954ce8e12b3831553df611939fe1154afa26dfd Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 10 Dec 2015 16:29:22 +0100 Subject: [PATCH 02/18] Doc for Protein Blocks --- {doc => doc-api/source}/img/1AY7_B.jpg | Bin {doc => doc-api/source}/img/PBs.jpg | Bin doc-api/source/index.rst | 1 + doc-api/source/intro_PB.rst | 37 +++++++++++++++++++++++++ doc/intro.PBs.md | 21 -------------- 5 files changed, 38 insertions(+), 21 deletions(-) rename {doc => doc-api/source}/img/1AY7_B.jpg (100%) rename {doc => doc-api/source}/img/PBs.jpg (100%) create mode 100644 doc-api/source/intro_PB.rst delete mode 100644 doc/intro.PBs.md diff --git a/doc/img/1AY7_B.jpg b/doc-api/source/img/1AY7_B.jpg similarity index 100% rename from doc/img/1AY7_B.jpg rename to doc-api/source/img/1AY7_B.jpg diff --git a/doc/img/PBs.jpg b/doc-api/source/img/PBs.jpg similarity index 100% rename from doc/img/PBs.jpg rename to doc-api/source/img/PBs.jpg diff --git a/doc-api/source/index.rst b/doc-api/source/index.rst index a88f6c8..bd3a977 100644 --- a/doc-api/source/index.rst +++ b/doc-api/source/index.rst @@ -15,6 +15,7 @@ PBxplore :maxdepth: 1 installation + intro_PB PBxplore API cookbook --------------------- diff --git a/doc-api/source/intro_PB.rst b/doc-api/source/intro_PB.rst new file mode 100644 index 0000000..bfdd8a9 --- /dev/null +++ b/doc-api/source/intro_PB.rst @@ -0,0 +1,37 @@ +Protein Blocks +============== + +Protein Blocks (PBs) are structural prototypes defined by `de Brevern `_ *et al* in 2000 [#]_. +The 3-dimensional local structure of a protein backbone can be modelized as an 1-dimensional sequence of PBs. In principle, any conformation of any amino acid could be represented by one of the sixteen available Protein Blocks. + + +PBs are labeled from a to p (see :ref:`PB-fig`): the PBs *m* and *d* can be roughly described as prototypes for alpha-helix and central beta-strand, respectively. PBs **a** to **c** primarily represent beta-strand N-caps and PBs **e** and **f**, beta-strand C-caps; PBs **a** to **j** are specific to coils, PBs **k** and **l** to alpha-helix N-caps, and PBs **n** to **p** to alpha-helix C-caps. + +.. _PB-fig: +.. figure:: img/PBs.jpg + :align: center + + Figure 1 + + Schematic representation of the sixteen protein blocks, labeled from *a* to *p* + (Creative commons CC-BY). + + +.. _pdb_1AY7: +.. figure:: img/1AY7_B.jpg + :align: center + + Figure 2 + + 3D representation of the barstar protein (PDB ID `1AY7 `_, chain B) + (Creative commons CC-BY). + + +For instance, the 3D structure of the barstar protein represented in :ref:`pdb_1AY7` can be translated in a 1D-sequence of Protein Blocks: :: + + ZZdddfklpcbfklmmmmmmmmnopafklgoiaklmmmmmmmmpacddddddehkllmmmmnnommmmmmmmmmmmmmnopacddddZZ + +The conformations of the 89 residues of the barstar are translated into a sequence of 89 protein blocks. Note that "Z" corresponds to amino acids for which a protein block cannot be assigned. As a matter of fact, the assignment of a given residue *n* requires is based on the conformations of residues *n-1*, *n-1*, *n*, *n+1* and *n+2*. Therefore, a protein block cannot be assigned to the two first (N-termini) and two last (C-termini) residues of a polypeptide chain. + + +.. [#] A. G. de Brevern, C. Etchebest, and S. Hazout. Bayesian Probabilistic Approach for Predicting Backbone Structures in Terms of Protein Blocks. *Proteins* **41**:271-87 (2000). diff --git a/doc/intro.PBs.md b/doc/intro.PBs.md deleted file mode 100644 index aac58ff..0000000 --- a/doc/intro.PBs.md +++ /dev/null @@ -1,21 +0,0 @@ -# Introduction to Protein Blocks - -Protein Blocks (PBs) are structural prototypes defined by [de Brevern](http://www.dsimb.inserm.fr/~debrevern/index.php) *et al* in 2000 [1]. The 3-dimensional local structure of a protein backbone can be modelized as an 1-dimensional sequence of PBs. In principle, any conformation of any amino acid could be represented by one of the sixteen available Protein Blocks. PBs are labeled from a to p (see Figure 1): the PBs *m* and *d* can be roughly described as prototypes for alpha-helix and central beta-strand, respectively. PBs *a* to *c* primarily represent beta-strand N-caps and PBs *e* and *f*, beta-strand C-caps; PBs *a* to *j* are specific to coils, PBs *k* and *l* to alpha-helix N-caps, and PBs *n* to *p* to alpha-helix C-caps. - -!["Fig. 1. PBs"](img/PBs.jpg) - -**Figure 1:** Schematic representation of the sixteen protein blocks, labeled from *a* to *p* (Creative commons CC-BY). - - -!["Fig. 2. Barstar protein"](img/1AY7_B.jpg) - -**Figure 2:** 3D representation of the barstar protein (PDB ID [1AY7](http://www.rcsb.org/pdb/explore/explore.do?pdbId=1AY7), chain B) (Creative commons CC-BY). - -For instance, the 3D structure of the barstar protein represented in Figure 2 can be translated in a 1D-sequence of Protein Blocks: - - ZZdddfklpcbfklmmmmmmmmnopafklgoiaklmmmmmmmmpacddddddehkllmmmmnnommmmmmmmmmmmmmnopacddddZZ - -The conformations of the 89 residues of the barstar are translated into a sequence of 89 protein blocks. Note that "Z" corresponds to amino acids for which a protein block cannot be assigned. As a matter of fact, the assignment of a given residue *n* requires is based on the conformations of residues *n-1*, *n-1*, *n*, *n+1* and *n+2*. Therefore, a protein block cannot be assigned to the two first (N-termini) and two last (C-termini) residues of a polypeptide chain. - - -[1] A. G. de Brevern, C. Etchebest, and S. Hazout. Bayesian Probabilistic Approach for Predicting Backbone Structures in Terms of Protein Blocks. *Proteins* **41**:271-87 (2000). From 1af1d56cb4f56f9c443bb5f10dcf19f9dad0cad3 Mon Sep 17 00:00:00 2001 From: Hubert Date: Fri, 11 Dec 2015 17:02:41 +0100 Subject: [PATCH 03/18] Doc for PBassign --- doc-api/source/PBassign.rst | 182 +++++++++++++++++++++++++++++++ doc-api/source/index.rst | 7 +- doc-api/source/installation.rst | 6 +- doc-api/source/utilization.rst | 47 ++++++++ doc/demontrastation.md | 19 ---- doc/single.structure.analysis.md | 176 ------------------------------ 6 files changed, 238 insertions(+), 199 deletions(-) create mode 100644 doc-api/source/PBassign.rst create mode 100644 doc-api/source/utilization.rst delete mode 100644 doc/demontrastation.md delete mode 100644 doc/single.structure.analysis.md diff --git a/doc-api/source/PBassign.rst b/doc-api/source/PBassign.rst new file mode 100644 index 0000000..dc8fc50 --- /dev/null +++ b/doc-api/source/PBassign.rst @@ -0,0 +1,182 @@ +PBassign +========== + +``PBassign`` assigns a PB sequence to a protein structure. + +.. note:: The following examples use ``PBdata`` and the demo files. + See :ref:`Demo files ` for more information. + + +Example +------- + +.. code-block:: bash + + $ PBassign -p `PBdata`/3ICH.pdb -o 3ICH + Read 1 chain(s) in demo/3ICH.pdb + wrote 3ICH.PB.fasta + +Content of `3ICH.PB.fasta`: :: + + >demo1/3ICH.pdb | chain A + ZZccdfbdcdddddehjbdebjcdddddfklmmmlmmmmmmmmnopnopajeopacfbdc + ehibacehiamnonopgocdfkbjbdcdfblmbccfbghiacdddebehiafkbccddfb + dcfklgokaccfbdcfbhklmmmmmmmpccdfkopafbacddfbgcddddfbacddddZZ + +Note that Protein Blocs assignment is only possible for proteins (as its name suggests). +As a consequence, processed PDB files must contain protein structures **only** (please remove any other molecule). +In addition, the PDB parser implemented here is pretty straightforward. +Be sure your PDB files complies with the `ATOM field `_ +of the `PDB format `_. + + +Usage +----- + +Here’s the ``PBassign`` help text. :: + + Usage: PBassign [options] -p file.pdb|dir [-p file2.pdb] -o output_root_name -g gro_file -x xtc_file + + Options: + --version show program's version number and exit + -h, --help show this help message and exit + + Mandatory arguments: + -p P name of pdb file or directory containing pdb files + -o O root name for results + -x X name of xtc file (Gromacs) + -g G name of gro file (Gromacs) + + Optional arguments: + --phipsi writes phi and psi angle + --flat writes one PBs sequence per line + + +`-p` option +``````````` + +can be used several times. For instance: + +.. code-block:: bash + + $ PBassign -p `PBdata`/3ICH.pdb -p `PBdata`/1BTA.pdb -p `PBdata`/1AY7.pdb -o test1 + 3 PDB file(s) to process + Read 1 chain(s) in demo/3ICH.pdb + Read 1 chain(s) in demo/1BTA.pdb + Read 2 chain(s) in demo/1AY7.pdb + wrote test1.PB.fasta + + +All PB assignments are written in the same output file. If a PDB file contains several chains +and/or models, PBs assignments are also written in a single output file. +From the previous example, the ouput of `test1.PB.fasta` is: :: + + >demo/3ICH.pdb | chain A + ZZccdfbdcdddddehjbdebjcdddddfklmmmlmmmmmmmmnopnopajeopacfbdc + ehibacehiamnonopgocdfkbjbdcdfblmbccfbghiacdddebehiafkbccddfb + dcfklgokaccfbdcfbhklmmmmmmmpccdfkopafbacddfbgcddddfbacddddZZ + >demo/1BTA.pdb | chain A + ZZdddfklonbfklmmmmmmmmnopafklnoiaklmmmmmnoopacddddddehkllmmm + mngoilmmmmmmmmmmmmnopacdcddZZ + >demo/1AY7.pdb | chain A + ZZbjadfklmcfklmmmmmmmmnnpaafbfkgopacehlnomaccddehjaccdddddeh + klpnbjadcdddfbehiacddfegolaccdddfkZZ + >demo/1AY7.pdb | chain B + ZZcddfklpcbfklmmmmmmmmnopafklgoiaklmmmmmmmmpacddddddehkllmmm + mnnommmmmmmmmmmmmmnopacddddZZ + + +One can also use the `-p` option to provide a directory containing PDB files as an input. +``PBassign`` will process all PDB files located in the `PBdata` directory: + +.. code-block:: bash + + $ PBassign -p `PBdata`/ -o test2 + 8 PDB file(s) to process + Read 2 chain(s) in demo/1AY7.pdb + Read 90 chain(s) in demo/psi_md_traj_1.pdb + Read 10 chain(s) in demo/2LFU.pdb + Read 90 chain(s) in demo/psi_md_traj_2.pdb + Read 1 chain(s) in demo/3ICH.pdb + Read 90 chain(s) in demo/psi_md_traj_3.pdb + Read 190 chain(s) in demo/beta3_IEGF12.pdb + Read 1 chain(s) in demo/1BTA.pdb + wrote test2.PB.fasta + + +`-x` and `-g` options +````````````````````` + +.. warning:: These options require the installation of python library `MDAnalysis `_ + +Instead using the `-p` option, the protein structures could come +from a molecular dynamics simulation file from Gromacs. +For this, you have to specify a '.xtc' file with the `-x` option and a '.gro' file with the `-g` option. + +.. code-block:: bash + + $ PBassign -x `PBdata`/md_traj_4.xtc -g `PBdata`/md_traj_4.gro -o md_traj_4 + PBs assigned for demo/md.xtc | frame 1 + PBs assigned for demo/md.xtc | frame 2 + PBs assigned for demo/md.xtc | frame 3 + PBs assigned for demo/md.xtc | frame 4 + ... + PBs assigned for demo/md.xtc | frame 198 + PBs assigned for demo/md.xtc | frame 199 + PBs assigned for demo/md.xtc | frame 200 + PBs assigned for demo/md.xtc | frame 201 + wrote md_traj_4.PB.fasta + + +`--phipsi` option +````````````````` + +generates an additionnal file with the +`phi and psi angles `_ +for each residue. + +.. code-block:: bash + + $ PBassign -p `PBdata`/1BTA.pdb -o 1BTA --phipsi + 1 PDB file(s) to process + Read 1 chain(s) in demo/1BTA.pdb + wrote 1BTA.PB.fasta + wrote 1BTA.PB.phipsi + +Content of `1BTA.PB.phipsi`: :: + + demo/1BTA.pdb | chain A 1 None -171.66 + demo/1BTA.pdb | chain A 2 -133.80 153.74 + demo/1BTA.pdb | chain A 3 -134.66 157.30 + demo/1BTA.pdb | chain A 4 -144.49 118.60 + demo/1BTA.pdb | chain A 5 -100.13 92.99 + demo/1BTA.pdb | chain A 6 -83.49 104.24 + demo/1BTA.pdb | chain A 7 -64.77 -43.25 + demo/1BTA.pdb | chain A 8 -44.48 -25.89 + demo/1BTA.pdb | chain A 9 -94.91 -47.18 + demo/1BTA.pdb | chain A 10 -41.31 133.74 + [snip] + +The first part of the line is the comment also found in the fasta file. +The last thee columns are, from left to right, the residue number, the phi angle and the psi angle. +The phi angle of the first residue and the psi angle of the last residue cannot be computed. + + +`--flat` option +``````````````` + +formats the PBs assignment with one sequence per line. + +.. code-block:: bash + + $ PBassign -p `PBdata`/1BTA.pdb -o 1BTA --flat + 1 PDB file(s) to process + Read 1 chain(s) in demo/1BTA.pdb + wrote 1BTA.PB.fasta + wrote 1BTA.PB.flat + +Content of `1BTA.PB.flat`: :: + + ZZdddfklonbfklmmmmmmmmnopafklnoiaklmmmmmnoopacddddddehkllmmmmngoilmmmmmmmmmmmmnopacdcddZZ + + diff --git a/doc-api/source/index.rst b/doc-api/source/index.rst index bd3a977..5b98ac2 100644 --- a/doc-api/source/index.rst +++ b/doc-api/source/index.rst @@ -14,8 +14,13 @@ PBxplore .. toctree:: :maxdepth: 1 - installation intro_PB + installation + utilization + PBassign + PBcount + + PBxplore API cookbook --------------------- diff --git a/doc-api/source/installation.rst b/doc-api/source/installation.rst index a678141..faf5d75 100644 --- a/doc-api/source/installation.rst +++ b/doc-api/source/installation.rst @@ -7,18 +7,18 @@ we try in this document to provide few guidelines regarding PBxplore setup. Supported Platforms ------------------- -Currently, ``PBxplore`` run with Python 2.7, 3.3 and 3.4 on Linux and Mac OS X. +Currently, `PBxplore` run with Python 2.7, 3.3 and 3.4 on Linux and Mac OS X. Dependencies ------------ -To use ``PBxplore``, the following libraries have to be installed. +To use `PBxplore`, the following libraries have to be installed. `NumPy `_ >= 1.6.0 Numpy is the base package for numerical computing in python. -Optionally, ``PBxplore`` can use the following packages: +Optionally, `PBxplore` can use the following packages: `MDAnalysis `_ >= 0.11 We use MDAnalysis for loading trajectories. diff --git a/doc-api/source/utilization.rst b/doc-api/source/utilization.rst new file mode 100644 index 0000000..31c054d --- /dev/null +++ b/doc-api/source/utilization.rst @@ -0,0 +1,47 @@ +Utilization +=========== + +2 ways to use `PBxplore`: + - command-line scripts + - API + +Command-line scripts +-------------------- + +PBxplore is bundle with a suite of command-line tools. +Once installed, they should be available in your ``$PATH``. +Here the list: + +- :doc:`PBassign ` assign :doc:`Protein Blocks (PBs) ` + from a set of protein structures. +- PBcount computes the frequency of PBs at each position along the amino acid sequence. +- PBstast generates frequency and logo plots, and estimates the (_Neq_). +- PBclust use clustering algorithm (k-means) to re-group similar PBs sequences. + + +API +--- + + + +.. _demo: + +Demo files +---------- + +PBxplore provides scripts to demonstrate its functionalities. These scripts +guide the user through the different command line tools of PBxplore. + +3 demonstration scripts are available: + +* `run_demo1_assignation.sh` demonstrates the how to use ``PBassign`` to assign + Protein Block sequences to protein structures; +* `run_demo2_statistics.sh` demonstrates how to analyse protein dynamics using + PBxplore; +* finally, `run_demo2_clusters.sh` demonstrates how to use ``PBclust`` to cluster + Protein Block sequences. + +In addition to the scripts, PBxplore bundles input files to test and get +accustom with the software and the python library. Call the ``PBdata`` program to +display where these files are stored. With the `--list` and `--list-abs` +arguments ``PBdata`` list the available name and absolute path, respectively. diff --git a/doc/demontrastation.md b/doc/demontrastation.md deleted file mode 100644 index 557e602..0000000 --- a/doc/demontrastation.md +++ /dev/null @@ -1,19 +0,0 @@ -PBxplore demonstration -====================== - -PBxplore provides scripts to demonstrate its functionalities. These scripts -guide the user through the different command line tools of PBxplore. - -3 demonstration scripts are available: - -* `run_demo1_assignation.sh` demonstrates the how to use `PBassign` to assign - Protein Block sequences to protein structures; -* `run_demo2_statistics.sh` demonstrates how to analyse protein dynamics using - PBxplore; -* finally, `run_demo2_clusters.sh`demonstrates how to use `PBclust` to cluster - Protein Block sequences. - -In addition to the scripts, PBxplore bundles input files to test and get -accustom with the software and the python library. Call the `PBdata` program to -display where these files are stored. With the `--list` and `--list-abs` -arguments `PBdata` list the available name and absolute path, respectively. diff --git a/doc/single.structure.analysis.md b/doc/single.structure.analysis.md deleted file mode 100644 index ffd7f30..0000000 --- a/doc/single.structure.analysis.md +++ /dev/null @@ -1,176 +0,0 @@ -# Single structure analysis - -**PBassign.py** assigns a PB sequence to a protein structure. - - ./PBassign.py -p demo1/3ICH.pdb -o 3ICH - -Output: - - 1 PDB file(s) to process - read PB definitions: 16 PBs x 8 angles - demo1/3ICH.pdb - PBs assigned for demo1/3ICH.pdb | chain A - wrote 3ICH.PB.fasta - -Content of `3ICH.PB.fasta`: - - >demo1/3ICH.pdb | chain A - ZZccdfbdcdddddehjbdebjcdddddfklmmmlmmmmmmmmnopnopajeopacfbdc - ehibacehiamnonopgocdfkbjbdcdfblmbccfbghiacdddebehiafkbccddfb - dcfklgokaccfbdcfbhklmmmmmmmpccdfkopafbacddfbgcddddfbacddddZZ - -Note that Protein Blocs assignment is only possible for proteins (as its name suggests). As a consequence, processed PDB files must contain protein structures **only** (please remove any other molecule). In addition, the PDB parser implemented here is pretty straightforward. Be sure your PDB files complies with the [ATOM field](http://www.wwpdb.org/documentation/format33/sect9.html#ATOM) of the [PDB format](http://www.wwpdb.org/documentation/format33/v3.3.html) and that the protein structure is coherent. - - Usage: PBassign.py [options] -p file.pdb|dir [-p file2.pdb] -o output_root_name -g gro_file -x xtc_file - - Options: - --version show program's version number and exit - -h, --help show this help message and exit - - Mandatory arguments: - -p P name of pdb file or directory containing pdb files - -o O root name for results - -x X name of xtc file (Gromacs) - -g G name of gro file (Gromacs) - - Optional arguments: - --phipsi writes phi and psi angle - --flat writes one PBs sequence per line - -## `-p` option -can be used several times. For instance: - - ./PBassign.py -p demo1/3ICH.pdb -p demo1/1BTA.pdb -p demo1/1AY7.pdb -o test1 - -Output: - - 3 PDB file(s) to process - read PB definitions: 16 PBs x 8 angles - demo1/3ICH.pdb - PBs assigned for demo1/3ICH.pdb | chain A - demo1/1BTA.pdb - PBs assigned for demo1/1BTA.pdb | chain A - demo1/1AY7.pdb - PBs assigned for demo1/1AY7.pdb | chain A - PBs assigned for demo1/1AY7.pdb | chain B - wrote test1.PB.fasta - -All PB assignments are written in the same output file. If a PDB file contains several chains and/or models, PBs assignments are also written in a single output file. From the previous example, the ouput of `test1.PB.fasta` is: - - >demo1/3ICH.pdb | chain A - ZZccdfbdcdddddehjbdebjcdddddfklmmmlmmmmmmmmnopnopajeopacfbdc - ehibacehiamnonopgocdfkbjbdcdfblmbccfbghiacdddebehiafkbccddfb - dcfklgokaccfbdcfbhklmmmmmmmpccdfkopafbacddfbgcddddfbacddddZZ - >demo1/1BTA.pdb | chain A - ZZdddfklonbfklmmmmmmmmnopafklnoiaklmmmmmnoopacddddddehkllmmm - mngoilmmmmmmmmmmmmnopacdcddZZ - >demo1/1AY7.pdb | chain A - ZZbjadfklmcfklmmmmmmmmnnpaafbfkgopacehlnomaccddehjaccdddddeh - klpnbjadcdddfbehiacddfegolaccdddfkZZ - >demo1/1AY7.pdb | chain B - ZZcddfklpcbfklmmmmmmmmnopafklgoiaklmmmmmmmmpacddddddehkllmmm - mnnommmmmmmmmmmmmmnopacddddZZ - -One can also use the `-p` option to provide a directory containing PDB files as an input: - - ./PBassign.py -p demo1/ -o test2 - -`PBassign.py` will process all PDB files located in the `demo1` directory: - - 4 PDB file(s) to process - read PB definitions: 16 PBs x 8 angles - demo1/2LFU.pdb - PBs assigned for demo1/2LFU.pdb | model 1 | chain A - PBs assigned for demo1/2LFU.pdb | model 2 | chain A - PBs assigned for demo1/2LFU.pdb | model 3 | chain A - PBs assigned for demo1/2LFU.pdb | model 4 | chain A - PBs assigned for demo1/2LFU.pdb | model 5 | chain A - PBs assigned for demo1/2LFU.pdb | model 6 | chain A - PBs assigned for demo1/2LFU.pdb | model 7 | chain A - PBs assigned for demo1/2LFU.pdb | model 8 | chain A - PBs assigned for demo1/2LFU.pdb | model 9 | chain A - PBs assigned for demo1/2LFU.pdb | model 10 | chain A - demo1/1AY7.pdb - PBs assigned for demo1/1AY7.pdb | chain A - PBs assigned for demo1/1AY7.pdb | chain B - demo1/3ICH.pdb - PBs assigned for demo1/3ICH.pdb | chain A - demo1/1BTA.pdb - PBs assigned for demo1/1BTA.pdb | chain A - wrote test2.PB.fasta - -## `-x` and `-g` options -These options require the installation of python library MDAnalysis (https://code.google.com/p/mdanalysis/wiki/Install). - -Instead using the `-p` option, the protein structures could come from a molecular dynamic simulation file from Gromacs. -For this, you have to specify a '.xtc' file with the `-x` option and a '.gro' file with the `-g` option. - - ./PBassign.py -x demo2/md_traj_4.xtc -g demo2/md_traj_4.gro -o md_traj_4 - -Output: - - read PB definitions: 16 PBs x 8 angles - PBs assigned for demo2/md.xtc | frame 1 - PBs assigned for demo2/md.xtc | frame 2 - PBs assigned for demo2/md.xtc | frame 3 - PBs assigned for demo2/md.xtc | frame 4 - ... - PBs assigned for demo2/md.xtc | frame 198 - PBs assigned for demo2/md.xtc | frame 199 - PBs assigned for demo2/md.xtc | frame 200 - PBs assigned for demo2/md.xtc | frame 201 - wrote md_traj_4.PB.fasta - - -## `--phipsi` option - -generates an additionnal file with the [phi and psi angles](http://en.wikipedia.org/wiki/Dihedral_angle#Dihedral_angles_of_biological_molecules) for each residue. - - ./PBassign.py -p demo1/1BTA.pdb -o 1BTA --phipsi - -Output: - - 1 PDB file(s) to process - read PB definitions: 16 PBs x 8 angles - demo1/1BTA.pdb - PBs assigned for demo1/1BTA.pdb | chain A - wrote 1BTA.PB.fasta - wrote 1BTA.PB.phipsi - -Content of `1BTA.PB.phipsi`: - - demo1/1BTA.pdb | chain A 1 None -171.66 - demo1/1BTA.pdb | chain A 2 -133.80 153.74 - demo1/1BTA.pdb | chain A 3 -134.66 157.30 - demo1/1BTA.pdb | chain A 4 -144.49 118.60 - demo1/1BTA.pdb | chain A 5 -100.13 92.99 - demo1/1BTA.pdb | chain A 6 -83.49 104.24 - demo1/1BTA.pdb | chain A 7 -64.77 -43.25 - demo1/1BTA.pdb | chain A 8 -44.48 -25.89 - demo1/1BTA.pdb | chain A 9 -94.91 -47.18 - demo1/1BTA.pdb | chain A 10 -41.31 133.74 - [snip] - -The first part of the line is the comment also found in the fasta file. The last thee columns are, from left to right, the residue number, the phi angle and the psi angle. The phi angle of the first residue and the psi angle of the last residue cannot be computed. - - -## `--flat` option - -formats the PBs assignment with one sequence per line. - - ./PBassign.py -p demo1/1BTA.pdb -o 1BTA --flat - -Output: - - 1 PDB file(s) to process - read PB definitions: 16 PBs x 8 angles - demo1/1BTA.pdb - PBs assigned for demo1/1BTA.pdb | chain A - wrote 1BTA.PB.fasta - wrote 1BTA.PB.flat - -Content of `1BTA.PB.flat`: - - ZZdddfklonbfklmmmmmmmmnopafklnoiaklmmmmmnoopacddddddehkllmmmmngoilmmmmmmmmmmmmnopacdcddZZ - - From 23ac5c9c5fde0a2aed9b3d94646ac3cebae4b93a Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 14 Dec 2015 11:58:49 +0100 Subject: [PATCH 04/18] Doc for PBcount --- doc-api/source/PBcount.rst | 89 ++++++++++++++++++++++++++++++++++ doc-api/source/utilization.rst | 3 +- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 doc-api/source/PBcount.rst diff --git a/doc-api/source/PBcount.rst b/doc-api/source/PBcount.rst new file mode 100644 index 0000000..790e40a --- /dev/null +++ b/doc-api/source/PBcount.rst @@ -0,0 +1,89 @@ +PBcount +======= + +``PBcount`` computes the frequency of PBs at each position along the amino acid sequence. + +.. note:: The following examples use ``PBdata`` and the demo files. + See :ref:`Demo files ` for more information. + +Example +------- + +.. code-block:: bash + + $ PBcount -f `PBdata`/psi_md_traj_1.PB.fasta -o psi_md_traj_1 + read 90 sequences in demo/psi_md_traj_1.PB.fasta + wrote psi_md_traj_1.PB.count + +Content of `psi_md_traj_1.PB.count`: :: + + a b c d e f g h i j k l m n o p + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 3 0 0 0 0 0 90 0 0 0 0 0 0 0 0 0 0 + 4 0 0 0 0 0 1 0 0 0 0 89 0 0 0 0 0 + [snip] + 51 0 0 0 0 0 22 0 40 0 0 28 0 0 0 0 0 + 52 0 23 0 0 0 0 0 0 38 1 1 27 0 0 0 0 + 53 62 0 21 0 0 0 0 0 0 0 0 0 0 0 0 7 + 54 0 0 90 0 0 0 0 0 0 0 0 0 0 0 0 0 + 55 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Note that residues 1, 2, 55 and 56 have a null count of all PBs. +These residues are the first and last residues of the structure and no PB can be assigned to them. + +Usage +----- + +Here’s the ``PBcount`` help text. :: + + usage: PBcount [-h] -f F -o O [--first-residue FIRST_RESIDUE] + + Compute PB frequency along protein sequence. + + optional arguments: + -h, --help show this help message and exit + -f F name(s) of the PBs file (in fasta format) + -o O name for results + --first-residue FIRST_RESIDUE + define first residue number (1 by default) + + +`-f` option +``````````` + +can be used several times: + +.. code-block:: bash + + $ PBcount -f `PBdata`/psi_md_traj_1.PB.fasta -f `PBdata`/psi_md_traj_2.PB.fasta -f `PBdata`/psi_md_traj_3.PB.fasta -o psi_md_traj_all + read 90 sequences in demo/psi_md_traj_1.PB.fasta + read 90 sequences in demo/psi_md_traj_2.PB.fasta + read 90 sequences in demo/psi_md_traj_3.PB.fasta + wrote psi_md_traj_all.PB.count + + +`--first-residue` option +```````````````````````` + +By default, the number of the first residue is 1, this option allows +to adjust the number associated to the first residue (and to the followings automaticaly). + +.. code-block:: bash + + $ PBcount --first-residue 5 -f `PBdata`/psi_md_traj_1.PB.fasta -o psi_md_traj_1_shifted + read 90 sequences in demo/psi_md_traj_1.PB.fasta + wrote psi_md_traj_1_shifted.PB.count + + +Content of `psi_md_traj_1_shifted.PB.count`: :: + + a b c d e f g h i j k l m n o p + 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 7 0 0 0 0 0 90 0 0 0 0 0 0 0 0 0 0 + 8 0 0 0 0 0 1 0 0 0 0 89 0 0 0 0 0 + 9 0 89 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 10 0 0 86 0 0 3 0 0 0 0 0 0 1 0 0 0 + [snip] diff --git a/doc-api/source/utilization.rst b/doc-api/source/utilization.rst index 31c054d..3782152 100644 --- a/doc-api/source/utilization.rst +++ b/doc-api/source/utilization.rst @@ -14,7 +14,8 @@ Here the list: - :doc:`PBassign ` assign :doc:`Protein Blocks (PBs) ` from a set of protein structures. -- PBcount computes the frequency of PBs at each position along the amino acid sequence. +- :doc:`PBcount ` computes the frequency of PBs at each position + along the amino acid sequence. - PBstast generates frequency and logo plots, and estimates the (_Neq_). - PBclust use clustering algorithm (k-means) to re-group similar PBs sequences. From a8d1ca412faebb39482aaa92b100838a6323f744 Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 14 Dec 2015 14:14:27 +0100 Subject: [PATCH 05/18] Reference for Weblogo --- doc-api/source/installation.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc-api/source/installation.rst b/doc-api/source/installation.rst index faf5d75..8b30c09 100644 --- a/doc-api/source/installation.rst +++ b/doc-api/source/installation.rst @@ -28,7 +28,7 @@ Optionally, `PBxplore` can use the following packages: `Matplotlib `_ >= 1.4.0 All ploting functions use `matplotlib` package. - `Weblogo3 `_ + `Weblogo3 `_ [#]_ `Weblogo3` is required to create logo from PB sequences. @@ -40,3 +40,7 @@ Once dependencies installed, the most straightforward way is to use `pip`: .. code-block:: bash $ pip install pbxplore + + +.. [#] G. E. Crooks, G. Hon, J.-M. Chandonia, and S. E. Brenner. WebLogo: A Sequence Logo Generator. + *Genome Research* **14**: 1188–90 (2004) doi:10.1101/gr.849004 From ce47d9af5ef0ea8458332368425aaa248af80fd3 Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 14 Dec 2015 14:14:56 +0100 Subject: [PATCH 06/18] Add Neq definition --- doc-api/source/intro_PB.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/doc-api/source/intro_PB.rst b/doc-api/source/intro_PB.rst index bfdd8a9..eaf2d34 100644 --- a/doc-api/source/intro_PB.rst +++ b/doc-api/source/intro_PB.rst @@ -34,4 +34,25 @@ For instance, the 3D structure of the barstar protein represented in :ref:`pdb_1 The conformations of the 89 residues of the barstar are translated into a sequence of 89 protein blocks. Note that "Z" corresponds to amino acids for which a protein block cannot be assigned. As a matter of fact, the assignment of a given residue *n* requires is based on the conformations of residues *n-1*, *n-1*, *n*, *n+1* and *n+2*. Therefore, a protein block cannot be assigned to the two first (N-termini) and two last (C-termini) residues of a polypeptide chain. +.. _Neq: + +Neq +--- + +*Neq* is calculated as follows: + +.. _Neq-fig: +.. figure:: img/Neq.jpg + :align: center + + Figure 3 + + Neq formula + +Where **fx** is the probability of PB **x**. **Neq** quantifies the average number of PBs +at a given position in the protein sequence. +A **Neq** value of 1 indicates that only one type of PB is observed, +while a value of 16 is equivalent to a random distribution. + + .. [#] A. G. de Brevern, C. Etchebest, and S. Hazout. Bayesian Probabilistic Approach for Predicting Backbone Structures in Terms of Protein Blocks. *Proteins* **41**:271-87 (2000). From dfc11e336a1cba3e892c035bb9f11f600a3b5542 Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 14 Dec 2015 14:17:07 +0100 Subject: [PATCH 07/18] Doc for PBstat --- doc-api/source/PBstat.rst | 172 ++++++++++++++++++ {doc => doc-api/source}/img/Neq.jpg | Bin .../source}/img/psi_md_traj_all.PB.Neq.jpg | Bin .../source}/img/psi_md_traj_all.PB.logo.jpg | Bin .../source}/img/psi_md_traj_all.PB.map.jpg | Bin .../psi_md_traj_all_frame.PB.Neq.15-42.jpg | Bin .../psi_md_traj_all_frame.PB.logo.15-42.jpg | Bin .../psi_md_traj_all_frame.PB.map.15-42.jpg | Bin doc-api/source/index.rst | 1 + doc-api/source/utilization.rst | 2 +- 10 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 doc-api/source/PBstat.rst rename {doc => doc-api/source}/img/Neq.jpg (100%) rename {doc => doc-api/source}/img/psi_md_traj_all.PB.Neq.jpg (100%) rename {doc => doc-api/source}/img/psi_md_traj_all.PB.logo.jpg (100%) rename {doc => doc-api/source}/img/psi_md_traj_all.PB.map.jpg (100%) rename {doc => doc-api/source}/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg (100%) rename {doc => doc-api/source}/img/psi_md_traj_all_frame.PB.logo.15-42.jpg (100%) rename {doc => doc-api/source}/img/psi_md_traj_all_frame.PB.map.15-42.jpg (100%) diff --git a/doc-api/source/PBstat.rst b/doc-api/source/PBstat.rst new file mode 100644 index 0000000..cffde6d --- /dev/null +++ b/doc-api/source/PBstat.rst @@ -0,0 +1,172 @@ +PBstat +====== + +``PBstat`` generates frequency and logo plots, and estimates something similar +to entropy called the equivalent number of PBs (:ref:`Neq `). + +.. note:: The following examples use ``PBdata`` and the demo files. + See :ref:`Demo files ` for more information. + +.. warning:: To generate map or *Neq* plot, `Matplotlib `_ is required. + +.. warning:: To generate Weblogo-like representations, + `Weblogo3 `_ is required. + + + +Example +------- + +.. code-block:: bash + + $ PBstat -f `PBdata`/psi_md_traj_all.PB.count --map --neq --logo -o psi_md_traj_all + Index of first residue is: 1 + wrote psi_md_traj_all.PB.map.png + wrote psi_md_traj_all.PB.Neq + wrote psi_md_traj_all.PB.Neq.png + wrote psi_md_traj_all.PB.logo.png + + +Usage +----- + +Here’s the ``PBstat`` help text. :: + + usage: PBstat [-h] -f F -o O [--map] [--neq] [--logo] + [--image-format {pdf,png,jpg}] [--residue-min RESIDUE_MIN] + [--residue-max RESIDUE_MAX] + + Statistical analysis and graphical representations of PBs. + + optional arguments: + -h, --help show this help message and exit + -f F name of file that contains PBs frequency (count) + -o O name for results + --map generate map of the distribution of PBs along protein + sequence + --neq compute Neq and generate Neq plot along protein + sequence + --logo generate logo representation of PBs frequency along + protein sequence + --image-format {pdf,png,jpg} + File format for all image output. + --residue-min RESIDUE_MIN + defines lower bound of residue frame + --residue-max RESIDUE_MAX + defines upper bound of residue frame + + +`--map` option +`````````````` + +generates map of the distribution of PBs along protein sequence. + +.. warning:: This option requires `Matplotlib `_. + +.. code-block:: bash + + $ PBstat -f `PBdata`/psi_md_traj_all.PB.count --map -o psi_md_traj_all + Index of first residue is: 1 + wrote psi_md_traj_all.PB.map.png + + +.. figure:: img/psi_md_traj_all.PB.map.jpg + :align: center + + Distribution of PBs + + +The color range goes from red to blue. For a given position in the protein sequence, +blue corresponds to a null frequency (meaning the particular PB is never met a this position) and +red corresponds to a frequency of 1 (meaning the particular PB is always found at this position). + +`--neq` option +`````````````` + +computes *Neq* and generates *Neq* plot along protein sequence. + +.. warning:: This option requires `Matplotlib `_. + +.. code-block:: bash + + $ PBstat -f `PBdata`/psi_md_traj_all.PB.count --neq -o psi_md_traj_all + Index of first residue is: 1 + wrote psi_md_traj_all.PB.Neq + wrote psi_md_traj_all.PB.Neq.png + + +Content of `psi_md_traj_all.PB.Neq`: :: + + resid Neq + 1 1.00 + 2 1.00 + 3 2.03 + 4 1.92 + 5 3.12 + 6 2.14 + [snip] + + +.. figure:: img/psi_md_traj_all.PB.Neq.jpg + :align: center + + Neq versus residue number + + +`--logo` option +``````````````` + +generates WebLogo-like representation of PBs frequency along protein sequence. + +.. warning:: This option requires `Weblogo3 `_. + +.. code-block:: bash + + $ PBstat -f `PBdata`/psi_md_traj_all.PB.count --logo -o psi_md_traj_all + Index of first residue is: 1 + wrote psi_md_traj_all.PB.logo.png + + +.. figure:: img/psi_md_traj_all.PB.logo.jpg + :align: center + + Logo representation of PBs frequency + + + +`--residue-min` and `--residue-max` options +``````````````````````````````````````````` + +These options define the lower and upper bound of residue frame. + +.. code-block:: bash + + $ PBstat -f `PBdata`/psi_md_traj_all.PB.count --map --neq --logo -o psi_md_traj_all_frame --residue-min 15 --residue-max 42 + Index of first residue is: 1 + wrote psi_md_traj_all_frame.PB.map.15-42.png + wrote psi_md_traj_all_frame.PB.Neq.15-42 + wrote psi_md_traj_all_frame.PB.Neq.15-42.png + wrote psi_md_traj_all_frame.PB.logo.15-42.png + + +.. figure:: img/psi_md_traj_all_frame.PB.map.15-42.jpg + :align: center + + PBs distribution with residue frame + +.. figure:: img/psi_md_traj_all_frame.PB.Neq.15-42.jpg + :align: center + + Neq versus residue number with residue frame + +.. figure:: img/psi_md_traj_all_frame.PB.logo.15-42.jpg + :align: center + + Logo representation of PBs frequency + + +`--image-format` option +``````````````````````` + +All figure can be produced in either PNG, PDF, or JPEG format. +The `--image-format` option allows to control the file format of the image outputs. diff --git a/doc/img/Neq.jpg b/doc-api/source/img/Neq.jpg similarity index 100% rename from doc/img/Neq.jpg rename to doc-api/source/img/Neq.jpg diff --git a/doc/img/psi_md_traj_all.PB.Neq.jpg b/doc-api/source/img/psi_md_traj_all.PB.Neq.jpg similarity index 100% rename from doc/img/psi_md_traj_all.PB.Neq.jpg rename to doc-api/source/img/psi_md_traj_all.PB.Neq.jpg diff --git a/doc/img/psi_md_traj_all.PB.logo.jpg b/doc-api/source/img/psi_md_traj_all.PB.logo.jpg similarity index 100% rename from doc/img/psi_md_traj_all.PB.logo.jpg rename to doc-api/source/img/psi_md_traj_all.PB.logo.jpg diff --git a/doc/img/psi_md_traj_all.PB.map.jpg b/doc-api/source/img/psi_md_traj_all.PB.map.jpg similarity index 100% rename from doc/img/psi_md_traj_all.PB.map.jpg rename to doc-api/source/img/psi_md_traj_all.PB.map.jpg diff --git a/doc/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg b/doc-api/source/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg similarity index 100% rename from doc/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg rename to doc-api/source/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg diff --git a/doc/img/psi_md_traj_all_frame.PB.logo.15-42.jpg b/doc-api/source/img/psi_md_traj_all_frame.PB.logo.15-42.jpg similarity index 100% rename from doc/img/psi_md_traj_all_frame.PB.logo.15-42.jpg rename to doc-api/source/img/psi_md_traj_all_frame.PB.logo.15-42.jpg diff --git a/doc/img/psi_md_traj_all_frame.PB.map.15-42.jpg b/doc-api/source/img/psi_md_traj_all_frame.PB.map.15-42.jpg similarity index 100% rename from doc/img/psi_md_traj_all_frame.PB.map.15-42.jpg rename to doc-api/source/img/psi_md_traj_all_frame.PB.map.15-42.jpg diff --git a/doc-api/source/index.rst b/doc-api/source/index.rst index 5b98ac2..fdfec3c 100644 --- a/doc-api/source/index.rst +++ b/doc-api/source/index.rst @@ -19,6 +19,7 @@ PBxplore utilization PBassign PBcount + PBstat diff --git a/doc-api/source/utilization.rst b/doc-api/source/utilization.rst index 3782152..bd84905 100644 --- a/doc-api/source/utilization.rst +++ b/doc-api/source/utilization.rst @@ -16,7 +16,7 @@ Here the list: from a set of protein structures. - :doc:`PBcount ` computes the frequency of PBs at each position along the amino acid sequence. -- PBstast generates frequency and logo plots, and estimates the (_Neq_). +- :doc:`PBstat ` generates frequency and logo plots, and estimates the :ref:`Neq `. - PBclust use clustering algorithm (k-means) to re-group similar PBs sequences. From ab13ca63791fd379f8b5464bcfa5bac076695c06 Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 14 Dec 2015 14:26:54 +0100 Subject: [PATCH 08/18] Doc for PBclust --- doc-api/source/PBclust.rst | 121 +++++++++++++++++++++++++++++++++ doc-api/source/index.rst | 1 + doc-api/source/utilization.rst | 2 +- 3 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 doc-api/source/PBclust.rst diff --git a/doc-api/source/PBclust.rst b/doc-api/source/PBclust.rst new file mode 100644 index 0000000..5eddb02 --- /dev/null +++ b/doc-api/source/PBclust.rst @@ -0,0 +1,121 @@ +PBclust +======= + +.. warning:: NOT UPDATED. + +Once converted to PB sequences, conformations of a same protein can be clustered +based on PB similarities. + + +Example +------- + +.. code-block:: bash + + $ PBclust -f `PBdata`/psi_md_traj_all.PB.fasta -o psi_md_traj_all --clusters 5 + read 270 sequences in demo2/psi_md_traj_all.PB.fasta + read substitution matrix + Building distance matrix + 100% + wrote psi_md_traj_all.PB.dist + R clustering: OK + cluster 1: 90 sequences (33%) + cluster 2: 55 sequences (20%) + cluster 3: 35 sequences (13%) + cluster 4: 35 sequences (13%) + cluster 5: 55 sequences (20%) + wrote psi_md_traj_all.PB.clust + + +Cluster 1 is the biggest cluster with 33% of all conformations. +`psi_md_traj_all.PB.dist` contains the matrix distance between all PB sequences. + +Content of `psi_md_traj_all.PB.clust` (clustering results): :: + + SEQ_CLU "psi_md_traj_1.pdb | model 0" 1 + SEQ_CLU "psi_md_traj_1.pdb | model 1" 1 + SEQ_CLU "psi_md_traj_1.pdb | model 2" 1 + [snip] + ... + [snip] + SEQ_CLU "psi_md_traj_3.pdb | model 31" 4 + SEQ_CLU "psi_md_traj_3.pdb | model 32" 4 + SEQ_CLU "psi_md_traj_3.pdb | model 33" 5 + SEQ_CLU "psi_md_traj_3.pdb | model 34" 5 + [snip] + ... + [snip] + SEQ_CLU "psi_md_traj_3.pdb | model 88" 5 + SEQ_CLU "psi_md_traj_3.pdb | model 89" 5 + MED_CLU "psi_md_traj_1.pdb | model 65" 1 + MED_CLU "psi_md_traj_2.pdb | model 33" 2 + MED_CLU "psi_md_traj_2.pdb | model 74" 3 + MED_CLU "psi_md_traj_3.pdb | model 0" 4 + MED_CLU "psi_md_traj_3.pdb | model 87" 5 + + +Usage +----- + +Here’s the ``PBclust`` help text. :: + + usage: PBclust [-h] -f F -o O (--clusters CLUSTERS | --compare) + + Cluster protein structures based on their PB sequences. + + optional arguments: + -h, --help show this help message and exit + -f F name(s) of the PBs file (in fasta format) + -o O name for results + --clusters CLUSTERS number of wanted clusters + --compare compare the first sequence versus all others + + +`--compare` option +`````````````````` + +compares, position by position, the first sequence found in the fasta file against all others. +The result of the comparison is a score between O (identical) and 9 (different). + +.. code-block:: bash + + $ PBclust -f `PBdata`/psi_md_traj_all.PB.fasta -o psi_md_traj_all --compare + read 270 sequences in demo2/psi_md_traj_all.PB.fasta + read substitution matrix + Normalized substitution matrix (between 0 and 9) + [[0 3 2 3 4 3 3 4 2 3 5 3 5 4 3 3] + [3 0 3 3 3 4 3 2 2 3 3 2 5 3 3 2] + [2 3 0 3 4 3 2 4 3 4 5 5 5 4 3 2] + [3 3 3 0 2 3 4 4 3 3 5 5 9 6 5 4] + [4 3 4 2 0 2 2 2 4 3 3 4 7 4 5 5] + [3 4 3 3 2 0 3 3 4 2 3 3 5 5 4 5] + [3 3 2 4 2 3 0 3 3 3 4 3 3 2 2 1] + [4 2 4 4 2 3 3 0 3 1 2 3 5 4 2 4] + [2 2 3 3 4 4 3 3 0 2 2 2 5 3 3 2] + [3 3 4 3 3 2 3 1 2 0 2 2 4 4 3 3] + [5 3 5 5 3 3 4 2 2 2 0 3 3 3 4 4] + [3 2 5 5 4 3 3 3 2 2 3 0 3 2 2 4] + [5 5 5 9 7 5 3 5 5 4 3 3 0 2 3 3] + [4 3 4 6 4 5 2 4 3 4 3 2 2 0 2 2] + [3 3 3 5 5 4 2 2 3 3 4 2 3 2 0 2] + [3 2 2 4 5 5 1 4 2 3 4 4 3 2 2 0]] + Compare first sequence (psi_md_traj_1.pdb | model 0) with others + wrote psi_md_traj_all.PB.compare.fasta + +Content of `psi_md_traj_all.PB.compare.fasta`: :: + + >psi_md_traj_1.pdb | model 0 vs psi_md_traj_1.pdb | model 1 + 00000002000000000020000000000002000200000000000230002000 + >psi_md_traj_1.pdb | model 0 vs psi_md_traj_1.pdb | model 2 + 00000002000000000005000000000002000243000000055230000000 + >psi_md_traj_1.pdb | model 0 vs psi_md_traj_1.pdb | model 3 + 00000002000000000020000000000002000200000000055230002000 + [snip] + ... + [snip] + >psi_md_traj_1.pdb | model 0 vs psi_md_traj_3.pdb | model 87 + 00302523340000000005000000035032000323300000335220000000 + >psi_md_traj_1.pdb | model 0 vs psi_md_traj_3.pdb | model 88 + 00302523350500000005000000032232000323300000555225000000 + >psi_md_traj_1.pdb | model 0 vs psi_md_traj_3.pdb | model 89 + 00333522250000000025000000035032000323300002035020002000 diff --git a/doc-api/source/index.rst b/doc-api/source/index.rst index fdfec3c..f58d863 100644 --- a/doc-api/source/index.rst +++ b/doc-api/source/index.rst @@ -20,6 +20,7 @@ PBxplore PBassign PBcount PBstat + PBclust diff --git a/doc-api/source/utilization.rst b/doc-api/source/utilization.rst index bd84905..735e89a 100644 --- a/doc-api/source/utilization.rst +++ b/doc-api/source/utilization.rst @@ -17,7 +17,7 @@ Here the list: - :doc:`PBcount ` computes the frequency of PBs at each position along the amino acid sequence. - :doc:`PBstat ` generates frequency and logo plots, and estimates the :ref:`Neq `. -- PBclust use clustering algorithm (k-means) to re-group similar PBs sequences. +- :doc:`PBclust ` use clustering algorithm (k-means) to re-group similar PBs sequences. API From 4c6a0aa03c3bdcdc80dae09881ed3dd54257bcc3 Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 14 Dec 2015 14:27:18 +0100 Subject: [PATCH 09/18] Remove old documentation written in Markdown --- doc/img/md_traj.PB.map.frame.jpg | Bin 35965 -> 0 bytes doc/multiple.conformation.analysis.md | 383 -------------------------- 2 files changed, 383 deletions(-) delete mode 100644 doc/img/md_traj.PB.map.frame.jpg delete mode 100644 doc/multiple.conformation.analysis.md diff --git a/doc/img/md_traj.PB.map.frame.jpg b/doc/img/md_traj.PB.map.frame.jpg deleted file mode 100644 index f541eaf64e967e1d0cd57648bb9ab24983d5a7a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35965 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 NHU0nhr{uqn{vR@8;Zy(s diff --git a/doc/multiple.conformation.analysis.md b/doc/multiple.conformation.analysis.md deleted file mode 100644 index bcca817..0000000 --- a/doc/multiple.conformation.analysis.md +++ /dev/null @@ -1,383 +0,0 @@ -# Multiple conformation analysis # - -The PBs assignment of several conformations (generated by molecular dynamics or whatever method you want) of the same protein can be analyzed statistically. Such analysis is a two-steps process: - -1. `PBcount.py` computes the frequency of PBs at each position along the amino acid sequence. -2. `PBstat.py` generates frequency and logo plots, and estimates something similar to entropy called the equivalent number of PBs (_Neq_). - -*Neq* is calculated as follows: - -![Neq](img/Neq.jpg) - -Where *fx* is the probability of PB *x*. *Neq* quantifies the average number of PBs at a given position in the protein sequence. A *Neq* value of 1 indicates that only one type of PB is observed, while a value of 16 is equivalent to a random distribution. - -eventually, another option is to [cluster structures](#cluster) protein conformations based on their PB sequences. - ----- - -## `PBcount.py` - -For this example, first perform PB assignment (with `PBassign.py`): - - ./PBassign.py -p ./demo2/psi_md_traj_1.pdb -o psi_md_traj_1 - -Output: - - 1 PDB file(s) to process - Read 90 chain(s) in ./demo2/psi_md_traj_1.pdb - PBs assigned for ./demo2/psi_md_traj_1.pdb | model 0 - PBs assigned for ./demo2/psi_md_traj_1.pdb | model 1 - PBs assigned for ./demo2/psi_md_traj_1.pdb | model 2 - [snip] - PBs assigned for ./demo2/psi_md_traj_1.pdb | model 87 - PBs assigned for ./demo2/psi_md_traj_1.pdb | model 88 - PBs assigned for ./demo2/psi_md_traj_1.pdb | model 89 - wrote psi_md_traj_1.PB.fasta - -Then compute PBs frequency: - - ./PBcount.py -f psi_md_traj_1.PB.fasta -o psi_md_traj_1 - -Output: - - read 90 sequences in psi_md_traj_1.PB.fasta - wrote psi_md_traj_1.PB.count - -Content of `psi_md_traj_1.PB.count`: - - a b c d e f g h i j k l m n o p - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 3 0 0 0 0 0 90 0 0 0 0 0 0 0 0 0 0 - 4 0 0 0 0 0 1 0 0 0 0 89 0 0 0 0 0 - [snip] - 51 0 0 0 0 0 22 0 40 0 0 28 0 0 0 0 0 - 52 0 23 0 0 0 0 0 0 38 1 1 27 0 0 0 0 - 53 62 0 21 0 0 0 0 0 0 0 0 0 0 0 0 7 - 54 0 0 90 0 0 0 0 0 0 0 0 0 0 0 0 0 - 55 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -Note that residues 1, 2, 55 and 56 have a null count of all PBs. These residues are the first and last residues of the structure and no PB can be assigned to them. - -### Usage - - usage: PBcount.py [-h] -f F -o O [--first-residue FIRST_RESIDUE] - - Compute PB frequency along protein sequence. - - optional arguments: - -h, --help show this help message and exit - -f F name(s) of the PBs file (in fasta format) - -o O name for results - --first-residue FIRST_RESIDUE - define first residue number (1 by default) - - -### `-f` option - -can be used several times: - - ./PBcount.py -f demo2/psi_md_traj_1.PB.fasta -f demo2/psi_md_traj_2.PB.fasta -f demo2/psi_md_traj_3.PB.fasta -o psi_md_traj_all - -Output: - - read 90 sequences in demo2/psi_md_traj_1.PB.fasta - read 90 sequences in demo2/psi_md_traj_2.PB.fasta - read 90 sequences in demo2/psi_md_traj_3.PB.fasta - wrote psi_md_traj_all.PB.count - -### `--first-residue` option - -By default, the number of the first residue is 1, this option allows to adjust the number associated to the first residue (and to the followings automaticaly). - - ./PBcount.py --first-residue 5 -f demo2/psi_md_traj_1.PB.fasta -o psi_md_traj_1_shifted - -Output: - - read 90 sequences in demo2/psi_md_traj_1.PB.fasta - first residue will be numbered 5 - wrote psi_md_traj_1_shifted.PB.count - -Content of `psi_md_traj_1_shifted.PB.count`: - - a b c d e f g h i j k l m n o p - 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 7 0 0 0 0 0 90 0 0 0 0 0 0 0 0 0 0 - 8 0 0 0 0 0 1 0 0 0 0 89 0 0 0 0 0 - 9 0 89 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - 10 0 0 86 0 0 3 0 0 0 0 0 0 1 0 0 0 - [snip] - - ----- - -## `PBstat.py` - -generates frequency and logo plots and estimates *Neq*. - -To generate map or *Neq* plot, PBxplore requires R to be installed and present in the user environment. - -To generate Weblogo-like represations, PBxplore requires weblogo to be installed and present in the user environment. - -Example: - - ./PBstat.py -f demo2/psi_md_traj_all.PB.count --map --neq --logo -o psi_md_traj_all - -Output: - - Index of first residue is: 1 - wrote psi_md_traj_all.PB.map.png - - wrote psi_md_traj_all.PB.Neq - wrote psi_md_traj_all.PB.Neq.png - - wrote psi_md_traj_all.PB.logo.png - -### Usage - - usage: PBstat.py [-h] -f F -o O [--map] [--neq] [--logo] - [--image-format {pdf,png,jpg}] [--residue-min RESIDUE_MIN] - [--residue-max RESIDUE_MAX] - - Statistical analysis and graphical representations of PBs. - - optional arguments: - -h, --help show this help message and exit - -f F name of file that contains PBs frequency (count) - -o O name for results - --map generate map of the distribution of PBs along protein - sequence - --neq compute Neq and generate Neq plot along protein - sequence - --logo generate logo representation of PBs frequency along - protein sequence - --image-format {pdf,png,jpg} - File format for all image output. - --residue-min RESIDUE_MIN - defines lower bound of residue frame - --residue-max RESIDUE_MAX - defines upper bound of residue frame - -### `--map` option - -generates map of the distribution of PBs along protein sequence. - -Example: - - ./PBstat.py -f demo2/psi_md_traj_all.PB.count --map -o psi_md_traj_all - -Output: - - Index of first residue is: 1 - wrote psi_md_traj_all.PB.map.png - -Graph: - -![Distribution of PBs](img/psi_md_traj_all.PB.map.jpg) - -The color range goes from red to blue. For a given position in the protein sequence, blue corresponds to a null frequency (meaning the particular PB is never met a this position) and red corresponds to a frequency of 1 (meaning the particular PB is always found at this position). - -### `--neq` option - -computes *Neq* and generates *Neq* plot along protein sequence. - -Example: - - ./PBstat.py -f demo2/psi_md_traj_all.PB.count --neq -o psi_md_traj_all - -Output: - - Index of first residue is: 1 - wrote psi_md_traj_all.PB.Neq - wrote psi_md_traj_all.PB.Neq.png - -Content of `psi_md_traj_all.PB.Neq`: - - resid Neq - 1 1.00 - 2 1.00 - 3 2.03 - 4 1.92 - 5 3.12 - 6 2.14 - [snip] - -Graph: - -![Neq versus residue number](img/psi_md_traj_all.PB.Neq.jpg) - - -### `--logo` option - -generates WebLogo-like representation of PBs frequency along protein sequence. This option requires Weblogo [1] to be installed. - -Example: - - ./PBstat.py -f demo2/psi_md_traj_all.PB.count --logo -o psi_md_traj_all - -Output: - - Index of first residue is: 1 - wrote psi_md_traj_all.PB.logo.png - -Graph: - -![Logo representation of PBs frequency](img/psi_md_traj_all.PB.logo.jpg) - - -### `--residue-min` and `--residue-max` options - -These options define the lower and upper bound of residue frame. - - ./PBstat.py -f demo2/psi_md_traj_all.PB.count --map --neq --logo -o psi_md_traj_all_frame --residue-min 15 --residue-max 42 - -Output: - - Index of first residue is: 1 - wrote psi_md_traj_all_frame.PB.map.15-42.png - - wrote psi_md_traj_all_frame.PB.Neq.15-42 - wrote psi_md_traj_all_frame.PB.Neq.15-42.png - - wrote psi_md_traj_all_frame.PB.logo.15-42.png - -PBs distribution: - -![PBs distribution with residue frame](img/psi_md_traj_all_frame.PB.map.15-42.jpg) - -Neq versus residue number: - -![Neq versus residue number with residue frame](img/psi_md_traj_all_frame.PB.Neq.15-42.jpg) - -Logo representation of PBs frequency: - -![Logo representation of PBs frequency](img/psi_md_traj_all_frame.PB.logo.15-42.jpg) - - -### `--image-format` option - -All figure can be produced in either PNG, PDF, or JPEG format. The `--image-format` option allows to control the file format of the image outputs. - -## Clustering of protein structures - -Once converted to PB sequences, conformations of a same protein can be clustered based on PB similarities with `PBclust.py`. - -Example: - - ./PBclust.py -f demo2/psi_md_traj_all.PB.fasta -o psi_md_traj_all --clusters 5 - -Output: - - read 270 sequences in demo2/psi_md_traj_all.PB.fasta - read substitution matrix - Building distance matrix - 100% - wrote psi_md_traj_all.PB.dist - R clustering: OK - cluster 1: 90 sequences (33%) - cluster 2: 55 sequences (20%) - cluster 3: 35 sequences (13%) - cluster 4: 35 sequences (13%) - cluster 5: 55 sequences (20%) - wrote psi_md_traj_all.PB.clust - -Cluster 1 is the biggest cluster with 33% of all conformations. - - -`psi_md_traj_all.PB.dist` contains the matrix distance between all PB sequences. - - -Content of `psi_md_traj_all.PB.clust` (clustering results): - - SEQ_CLU "psi_md_traj_1.pdb | model 0" 1 - SEQ_CLU "psi_md_traj_1.pdb | model 1" 1 - SEQ_CLU "psi_md_traj_1.pdb | model 2" 1 - [snip] - ... - [snip] - SEQ_CLU "psi_md_traj_3.pdb | model 31" 4 - SEQ_CLU "psi_md_traj_3.pdb | model 32" 4 - SEQ_CLU "psi_md_traj_3.pdb | model 33" 5 - SEQ_CLU "psi_md_traj_3.pdb | model 34" 5 - [snip] - ... - [snip] - SEQ_CLU "psi_md_traj_3.pdb | model 88" 5 - SEQ_CLU "psi_md_traj_3.pdb | model 89" 5 - MED_CLU "psi_md_traj_1.pdb | model 65" 1 - MED_CLU "psi_md_traj_2.pdb | model 33" 2 - MED_CLU "psi_md_traj_2.pdb | model 74" 3 - MED_CLU "psi_md_traj_3.pdb | model 0" 4 - MED_CLU "psi_md_traj_3.pdb | model 87" 5 - - -### Usage - - usage: PBclust.py [-h] -f F -o O (--clusters CLUSTERS | --compare) - - Cluster protein structures based on their PB sequences. - - optional arguments: - -h, --help show this help message and exit - -f F name(s) of the PBs file (in fasta format) - -o O name for results - --clusters CLUSTERS number of wanted clusters - --compare compare the first sequence versus all others - - -### `--compare` option - -compares, position by position, the first sequence found in the fasta file against all others. The result of the comparison is a score between O (identical) and 9 (different). - -Example: - - ./PBclust.py -f demo2/psi_md_traj_all.PB.fasta -o psi_md_traj_all --compare - -Output: - - read 270 sequences in demo2/psi_md_traj_all.PB.fasta - read substitution matrix - Normalized substitution matrix (between 0 and 9) - [[0 3 2 3 4 3 3 4 2 3 5 3 5 4 3 3] - [3 0 3 3 3 4 3 2 2 3 3 2 5 3 3 2] - [2 3 0 3 4 3 2 4 3 4 5 5 5 4 3 2] - [3 3 3 0 2 3 4 4 3 3 5 5 9 6 5 4] - [4 3 4 2 0 2 2 2 4 3 3 4 7 4 5 5] - [3 4 3 3 2 0 3 3 4 2 3 3 5 5 4 5] - [3 3 2 4 2 3 0 3 3 3 4 3 3 2 2 1] - [4 2 4 4 2 3 3 0 3 1 2 3 5 4 2 4] - [2 2 3 3 4 4 3 3 0 2 2 2 5 3 3 2] - [3 3 4 3 3 2 3 1 2 0 2 2 4 4 3 3] - [5 3 5 5 3 3 4 2 2 2 0 3 3 3 4 4] - [3 2 5 5 4 3 3 3 2 2 3 0 3 2 2 4] - [5 5 5 9 7 5 3 5 5 4 3 3 0 2 3 3] - [4 3 4 6 4 5 2 4 3 4 3 2 2 0 2 2] - [3 3 3 5 5 4 2 2 3 3 4 2 3 2 0 2] - [3 2 2 4 5 5 1 4 2 3 4 4 3 2 2 0]] - Compare first sequence (psi_md_traj_1.pdb | model 0) with others - wrote psi_md_traj_all.PB.compare.fasta - -Content of `psi_md_traj_all.PB.compare.fasta`: - - >psi_md_traj_1.pdb | model 0 vs psi_md_traj_1.pdb | model 1 - 00000002000000000020000000000002000200000000000230002000 - >psi_md_traj_1.pdb | model 0 vs psi_md_traj_1.pdb | model 2 - 00000002000000000005000000000002000243000000055230000000 - >psi_md_traj_1.pdb | model 0 vs psi_md_traj_1.pdb | model 3 - 00000002000000000020000000000002000200000000055230002000 - [snip] - ... - [snip] - >psi_md_traj_1.pdb | model 0 vs psi_md_traj_3.pdb | model 87 - 00302523340000000005000000035032000323300000335220000000 - >psi_md_traj_1.pdb | model 0 vs psi_md_traj_3.pdb | model 88 - 00302523350500000005000000032232000323300000555225000000 - >psi_md_traj_1.pdb | model 0 vs psi_md_traj_3.pdb | model 89 - 00333522250000000025000000035032000323300002035020002000 - -# References - -[1] G. E. Crooks, G. Hon, J.-M. Chandonia, and S. E. Brenner. WebLogo: A Sequence Logo Generator. *Genome Research* **14**: 1188–90 (2004) -doi:10.1101/gr.849004 http://weblogo.threeplusone.com/ From 4b569074387292cb402c1277045f175ab6d85d46 Mon Sep 17 00:00:00 2001 From: Hubert Date: Tue, 15 Dec 2015 14:30:12 +0100 Subject: [PATCH 10/18] Enhances installation documentation --- doc-api/source/installation.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc-api/source/installation.rst b/doc-api/source/installation.rst index 8b30c09..5237118 100644 --- a/doc-api/source/installation.rst +++ b/doc-api/source/installation.rst @@ -42,5 +42,16 @@ Once dependencies installed, the most straightforward way is to use `pip`: $ pip install pbxplore +PBxplore can also be installed for the current user only: + +.. code-block:: bash + + $ pip install --user pbxplore + + +See the documentation of `pip `_ for more information. +You may also want to look at `virtualenv `_. + + .. [#] G. E. Crooks, G. Hon, J.-M. Chandonia, and S. E. Brenner. WebLogo: A Sequence Logo Generator. *Genome Research* **14**: 1188–90 (2004) doi:10.1101/gr.849004 From 268a6a0d396df8605d14ff603233fb224413deb2 Mon Sep 17 00:00:00 2001 From: Hubert Date: Tue, 15 Dec 2015 14:37:12 +0100 Subject: [PATCH 11/18] Citation for MDAnalysis --- doc-api/source/installation.rst | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc-api/source/installation.rst b/doc-api/source/installation.rst index 5237118..ba42638 100644 --- a/doc-api/source/installation.rst +++ b/doc-api/source/installation.rst @@ -20,7 +20,7 @@ To use `PBxplore`, the following libraries have to be installed. Optionally, `PBxplore` can use the following packages: - `MDAnalysis `_ >= 0.11 + `MDAnalysis `_ [#]_ >= 0.11 We use MDAnalysis for loading trajectories. See the full supported list `here `_. @@ -53,5 +53,10 @@ See the documentation of `pip `_ for more inform You may also want to look at `virtualenv `_. -.. [#] G. E. Crooks, G. Hon, J.-M. Chandonia, and S. E. Brenner. WebLogo: A Sequence Logo Generator. +.. [#] N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein. + MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. + *J. Comput. Chem.* **32** (2011), 2319–2327. doi:10.1002/jcc.21787 + +.. [#] G. E. Crooks, G. Hon, J.-M. Chandonia, and S. E. Brenner. + WebLogo: A Sequence Logo Generator. *Genome Research* **14**: 1188–90 (2004) doi:10.1101/gr.849004 From 0d9383c469d2bd617cdf65210fa68e264497acc8 Mon Sep 17 00:00:00 2001 From: Hubert Date: Tue, 15 Dec 2015 14:44:19 +0100 Subject: [PATCH 12/18] Rename documentation folder. Change also the project name in the sphinx parameters. --- .travis.yml | 4 ++-- {doc-api => doc}/Makefile | 0 {doc-api => doc}/make.bat | 0 {doc-api => doc}/source/Fontmap.GS | 0 {doc-api => doc}/source/PBassign.rst | 0 {doc-api => doc}/source/PBclust.rst | 0 {doc-api => doc}/source/PBcount.rst | 0 {doc-api => doc}/source/PBstat.rst | 0 {doc-api => doc}/source/_static/empty | 0 {doc-api => doc}/source/build.sh | 0 {doc-api => doc}/source/conf.py | 2 +- {doc-api => doc}/source/img/1AY7_B.jpg | Bin {doc-api => doc}/source/img/Neq.jpg | Bin {doc-api => doc}/source/img/PBs.jpg | Bin .../source/img/psi_md_traj_all.PB.Neq.jpg | Bin .../source/img/psi_md_traj_all.PB.logo.jpg | Bin .../source/img/psi_md_traj_all.PB.map.jpg | Bin .../img/psi_md_traj_all_frame.PB.Neq.15-42.jpg | Bin .../img/psi_md_traj_all_frame.PB.logo.15-42.jpg | Bin .../img/psi_md_traj_all_frame.PB.map.15-42.jpg | Bin {doc-api => doc}/source/index.rst | 0 {doc-api => doc}/source/install_pandoc.sh | 0 {doc-api => doc}/source/installation.rst | 0 {doc-api => doc}/source/intro_PB.rst | 0 {doc-api => doc}/source/notebooks/Assignement.ipynb | 0 .../source/notebooks/Deformability.ipynb | 0 {doc-api => doc}/source/notebooks/WritePB.ipynb | 0 {doc-api => doc}/source/pages/PB.rst | 0 {doc-api => doc}/source/pages/analysis.rst | 0 {doc-api => doc}/source/pages/assign.rst | 0 {doc-api => doc}/source/pages/demo.rst | 0 {doc-api => doc}/source/pages/io.rst | 0 {doc-api => doc}/source/pages/pbxplore.rst | 0 {doc-api => doc}/source/pages/structure.rst | 0 {doc-api => doc}/source/pandoc_fix_img.py | 0 {doc-api => doc}/source/utilization.rst | 0 36 files changed, 3 insertions(+), 3 deletions(-) rename {doc-api => doc}/Makefile (100%) rename {doc-api => doc}/make.bat (100%) rename {doc-api => doc}/source/Fontmap.GS (100%) rename {doc-api => doc}/source/PBassign.rst (100%) rename {doc-api => doc}/source/PBclust.rst (100%) rename {doc-api => doc}/source/PBcount.rst (100%) rename {doc-api => doc}/source/PBstat.rst (100%) rename {doc-api => doc}/source/_static/empty (100%) rename {doc-api => doc}/source/build.sh (100%) rename {doc-api => doc}/source/conf.py (99%) rename {doc-api => doc}/source/img/1AY7_B.jpg (100%) rename {doc-api => doc}/source/img/Neq.jpg (100%) rename {doc-api => doc}/source/img/PBs.jpg (100%) rename {doc-api => doc}/source/img/psi_md_traj_all.PB.Neq.jpg (100%) rename {doc-api => doc}/source/img/psi_md_traj_all.PB.logo.jpg (100%) rename {doc-api => doc}/source/img/psi_md_traj_all.PB.map.jpg (100%) rename {doc-api => doc}/source/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg (100%) rename {doc-api => doc}/source/img/psi_md_traj_all_frame.PB.logo.15-42.jpg (100%) rename {doc-api => doc}/source/img/psi_md_traj_all_frame.PB.map.15-42.jpg (100%) rename {doc-api => doc}/source/index.rst (100%) rename {doc-api => doc}/source/install_pandoc.sh (100%) rename {doc-api => doc}/source/installation.rst (100%) rename {doc-api => doc}/source/intro_PB.rst (100%) rename {doc-api => doc}/source/notebooks/Assignement.ipynb (100%) rename {doc-api => doc}/source/notebooks/Deformability.ipynb (100%) rename {doc-api => doc}/source/notebooks/WritePB.ipynb (100%) rename {doc-api => doc}/source/pages/PB.rst (100%) rename {doc-api => doc}/source/pages/analysis.rst (100%) rename {doc-api => doc}/source/pages/assign.rst (100%) rename {doc-api => doc}/source/pages/demo.rst (100%) rename {doc-api => doc}/source/pages/io.rst (100%) rename {doc-api => doc}/source/pages/pbxplore.rst (100%) rename {doc-api => doc}/source/pages/structure.rst (100%) rename {doc-api => doc}/source/pandoc_fix_img.py (100%) rename {doc-api => doc}/source/utilization.rst (100%) diff --git a/.travis.yml b/.travis.yml index 48c184c..5bb9d5c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -60,7 +60,7 @@ install: - if [[ $TRAVIS_PYTHON_VERSION == 2.7 ]]; then pip install "mdanalysis>=0.11" --cache-dir $HOME/.cache/pip; fi - pip install -e . - if [[ $SETUP == 'doc' ]]; then pip install -r doc_requirements.txt --cache-dir $HOME/.cache/pip; fi - - if [[ $SETUP == 'doc' ]]; then ./doc-api/source/install_pandoc.sh; fi + - if [[ $SETUP == 'doc' ]]; then ./doc/source/install_pandoc.sh; fi # command to run tests @@ -69,6 +69,6 @@ script: - if [[ $SETUP == 'test' ]]; then yes | ./run_demo1_assignation.sh; fi - if [[ $SETUP == 'test' ]]; then yes | ./run_demo2_statistics.sh; fi - if [[ $SETUP == 'test' ]]; then yes | ./run_demo2_clusters.sh; fi - - if [[ $SETUP == 'doc' ]]; then cd doc-api; sphinx-build -W -b html source build/html; fi + - if [[ $SETUP == 'doc' ]]; then cd doc; sphinx-build -W -b html source build/html; fi #after_success: diff --git a/doc-api/Makefile b/doc/Makefile similarity index 100% rename from doc-api/Makefile rename to doc/Makefile diff --git a/doc-api/make.bat b/doc/make.bat similarity index 100% rename from doc-api/make.bat rename to doc/make.bat diff --git a/doc-api/source/Fontmap.GS b/doc/source/Fontmap.GS similarity index 100% rename from doc-api/source/Fontmap.GS rename to doc/source/Fontmap.GS diff --git a/doc-api/source/PBassign.rst b/doc/source/PBassign.rst similarity index 100% rename from doc-api/source/PBassign.rst rename to doc/source/PBassign.rst diff --git a/doc-api/source/PBclust.rst b/doc/source/PBclust.rst similarity index 100% rename from doc-api/source/PBclust.rst rename to doc/source/PBclust.rst diff --git a/doc-api/source/PBcount.rst b/doc/source/PBcount.rst similarity index 100% rename from doc-api/source/PBcount.rst rename to doc/source/PBcount.rst diff --git a/doc-api/source/PBstat.rst b/doc/source/PBstat.rst similarity index 100% rename from doc-api/source/PBstat.rst rename to doc/source/PBstat.rst diff --git a/doc-api/source/_static/empty b/doc/source/_static/empty similarity index 100% rename from doc-api/source/_static/empty rename to doc/source/_static/empty diff --git a/doc-api/source/build.sh b/doc/source/build.sh similarity index 100% rename from doc-api/source/build.sh rename to doc/source/build.sh diff --git a/doc-api/source/conf.py b/doc/source/conf.py similarity index 99% rename from doc-api/source/conf.py rename to doc/source/conf.py index f821daf..e0d1257 100644 --- a/doc-api/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ master_doc = 'index' # General information about the project. -project = u'PBxplore API' +project = u'PBxplore' copyright = u'2015, Pierre Poulain, and Alexandre G. deBrevern' # The version info for the project you're documenting, acts as replacement for diff --git a/doc-api/source/img/1AY7_B.jpg b/doc/source/img/1AY7_B.jpg similarity index 100% rename from doc-api/source/img/1AY7_B.jpg rename to doc/source/img/1AY7_B.jpg diff --git a/doc-api/source/img/Neq.jpg b/doc/source/img/Neq.jpg similarity index 100% rename from doc-api/source/img/Neq.jpg rename to doc/source/img/Neq.jpg diff --git a/doc-api/source/img/PBs.jpg b/doc/source/img/PBs.jpg similarity index 100% rename from doc-api/source/img/PBs.jpg rename to doc/source/img/PBs.jpg diff --git a/doc-api/source/img/psi_md_traj_all.PB.Neq.jpg b/doc/source/img/psi_md_traj_all.PB.Neq.jpg similarity index 100% rename from doc-api/source/img/psi_md_traj_all.PB.Neq.jpg rename to doc/source/img/psi_md_traj_all.PB.Neq.jpg diff --git a/doc-api/source/img/psi_md_traj_all.PB.logo.jpg b/doc/source/img/psi_md_traj_all.PB.logo.jpg similarity index 100% rename from doc-api/source/img/psi_md_traj_all.PB.logo.jpg rename to doc/source/img/psi_md_traj_all.PB.logo.jpg diff --git a/doc-api/source/img/psi_md_traj_all.PB.map.jpg b/doc/source/img/psi_md_traj_all.PB.map.jpg similarity index 100% rename from doc-api/source/img/psi_md_traj_all.PB.map.jpg rename to doc/source/img/psi_md_traj_all.PB.map.jpg diff --git a/doc-api/source/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg b/doc/source/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg similarity index 100% rename from doc-api/source/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg rename to doc/source/img/psi_md_traj_all_frame.PB.Neq.15-42.jpg diff --git a/doc-api/source/img/psi_md_traj_all_frame.PB.logo.15-42.jpg b/doc/source/img/psi_md_traj_all_frame.PB.logo.15-42.jpg similarity index 100% rename from doc-api/source/img/psi_md_traj_all_frame.PB.logo.15-42.jpg rename to doc/source/img/psi_md_traj_all_frame.PB.logo.15-42.jpg diff --git a/doc-api/source/img/psi_md_traj_all_frame.PB.map.15-42.jpg b/doc/source/img/psi_md_traj_all_frame.PB.map.15-42.jpg similarity index 100% rename from doc-api/source/img/psi_md_traj_all_frame.PB.map.15-42.jpg rename to doc/source/img/psi_md_traj_all_frame.PB.map.15-42.jpg diff --git a/doc-api/source/index.rst b/doc/source/index.rst similarity index 100% rename from doc-api/source/index.rst rename to doc/source/index.rst diff --git a/doc-api/source/install_pandoc.sh b/doc/source/install_pandoc.sh similarity index 100% rename from doc-api/source/install_pandoc.sh rename to doc/source/install_pandoc.sh diff --git a/doc-api/source/installation.rst b/doc/source/installation.rst similarity index 100% rename from doc-api/source/installation.rst rename to doc/source/installation.rst diff --git a/doc-api/source/intro_PB.rst b/doc/source/intro_PB.rst similarity index 100% rename from doc-api/source/intro_PB.rst rename to doc/source/intro_PB.rst diff --git a/doc-api/source/notebooks/Assignement.ipynb b/doc/source/notebooks/Assignement.ipynb similarity index 100% rename from doc-api/source/notebooks/Assignement.ipynb rename to doc/source/notebooks/Assignement.ipynb diff --git a/doc-api/source/notebooks/Deformability.ipynb b/doc/source/notebooks/Deformability.ipynb similarity index 100% rename from doc-api/source/notebooks/Deformability.ipynb rename to doc/source/notebooks/Deformability.ipynb diff --git a/doc-api/source/notebooks/WritePB.ipynb b/doc/source/notebooks/WritePB.ipynb similarity index 100% rename from doc-api/source/notebooks/WritePB.ipynb rename to doc/source/notebooks/WritePB.ipynb diff --git a/doc-api/source/pages/PB.rst b/doc/source/pages/PB.rst similarity index 100% rename from doc-api/source/pages/PB.rst rename to doc/source/pages/PB.rst diff --git a/doc-api/source/pages/analysis.rst b/doc/source/pages/analysis.rst similarity index 100% rename from doc-api/source/pages/analysis.rst rename to doc/source/pages/analysis.rst diff --git a/doc-api/source/pages/assign.rst b/doc/source/pages/assign.rst similarity index 100% rename from doc-api/source/pages/assign.rst rename to doc/source/pages/assign.rst diff --git a/doc-api/source/pages/demo.rst b/doc/source/pages/demo.rst similarity index 100% rename from doc-api/source/pages/demo.rst rename to doc/source/pages/demo.rst diff --git a/doc-api/source/pages/io.rst b/doc/source/pages/io.rst similarity index 100% rename from doc-api/source/pages/io.rst rename to doc/source/pages/io.rst diff --git a/doc-api/source/pages/pbxplore.rst b/doc/source/pages/pbxplore.rst similarity index 100% rename from doc-api/source/pages/pbxplore.rst rename to doc/source/pages/pbxplore.rst diff --git a/doc-api/source/pages/structure.rst b/doc/source/pages/structure.rst similarity index 100% rename from doc-api/source/pages/structure.rst rename to doc/source/pages/structure.rst diff --git a/doc-api/source/pandoc_fix_img.py b/doc/source/pandoc_fix_img.py similarity index 100% rename from doc-api/source/pandoc_fix_img.py rename to doc/source/pandoc_fix_img.py diff --git a/doc-api/source/utilization.rst b/doc/source/utilization.rst similarity index 100% rename from doc-api/source/utilization.rst rename to doc/source/utilization.rst From 2ac205f47fbe3775f0dea5c9bf65e8443f16924a Mon Sep 17 00:00:00 2001 From: Hubert Date: Tue, 12 Jan 2016 10:45:34 +0100 Subject: [PATCH 13/18] Rename notebook titles --- doc/source/index.rst | 8 ++++---- doc/source/notebooks/Assignement.ipynb | 18 +++++++++++++++--- doc/source/notebooks/Deformability.ipynb | 6 +++--- doc/source/notebooks/WritePB.ipynb | 6 +++--- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/doc/source/index.rst b/doc/source/index.rst index f58d863..e260ff7 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -24,8 +24,8 @@ PBxplore -PBxplore API cookbook ---------------------- +API cookbook +------------ .. toctree:: :maxdepth: 1 @@ -35,8 +35,8 @@ PBxplore API cookbook ./notebooks/Deformability -PBxplore API reference ----------------------- +API reference +------------- .. toctree:: :maxdepth: 1 diff --git a/doc/source/notebooks/Assignement.ipynb b/doc/source/notebooks/Assignement.ipynb index a3b7470..6e813ca 100644 --- a/doc/source/notebooks/Assignement.ipynb +++ b/doc/source/notebooks/Assignement.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PBxplore API cookbook — PB assignation\n", + "# PB assignation\n", "\n", - "We hereby demonstrate how to use the PBxplore API to assign PB sequences." + "We hereby demonstrate how to use the API to assign PB sequences." ] }, { @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "collapsed": false }, @@ -580,6 +580,18 @@ "display_name": "Python 2", "language": "python", "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" } }, "nbformat": 4, diff --git a/doc/source/notebooks/Deformability.ipynb b/doc/source/notebooks/Deformability.ipynb index 9b35023..9403b04 100644 --- a/doc/source/notebooks/Deformability.ipynb +++ b/doc/source/notebooks/Deformability.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PBxplore API cookbook --- Visualize protein deformability" + "# Visualize protein deformability" ] }, { @@ -13,7 +13,7 @@ "source": [ "Protein Blocks are great tools to study protein deformability. Indeed, if the block assigned to a residue changes between two frames of a trajectory, it represents a local deformation of the protein rather than the displacement of the residue.\n", "\n", - "The PBxplore API allows to visualize Protein Block variability throughout a molecular dynamics simulation trajectory." + "The API allows to visualize Protein Block variability throughout a molecular dynamics simulation trajectory." ] }, { @@ -358,7 +358,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.9" + "version": "2.7.6" } }, "nbformat": 4, diff --git a/doc/source/notebooks/WritePB.ipynb b/doc/source/notebooks/WritePB.ipynb index c0c5356..748e19b 100644 --- a/doc/source/notebooks/WritePB.ipynb +++ b/doc/source/notebooks/WritePB.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PBxplore API cookbook — Writing PB in file\n", + "# Writing PB in file\n", "\n", - "The PBxplore API allows to write all the files the command line tools can. This includes the outputs of PBassign. The functions to handle several file formats are available in the :mod:`pbxplore.io` module." + "The API allows to write all the files the command line tools can. This includes the outputs of PBassign. The functions to handle several file formats are available in the :mod:`pbxplore.io` module." ] }, { @@ -602,7 +602,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.9" + "version": "2.7.6" } }, "nbformat": 4, From 4580fd7e788f973a0728a879f75b6dc7a6020f50 Mon Sep 17 00:00:00 2001 From: Hubert Date: Tue, 12 Jan 2016 16:26:48 +0100 Subject: [PATCH 14/18] Enhances the index file of the documentation. - Add description of Pbxplore - Add authors - Reorganize the TOC --- doc/source/api_cookbook.rst | 12 ++++++ doc/source/api_reference.rst | 16 ++++++++ doc/source/index.rst | 74 +++++++++++++++++++++--------------- 3 files changed, 72 insertions(+), 30 deletions(-) create mode 100644 doc/source/api_cookbook.rst create mode 100644 doc/source/api_reference.rst diff --git a/doc/source/api_cookbook.rst b/doc/source/api_cookbook.rst new file mode 100644 index 0000000..39ff87d --- /dev/null +++ b/doc/source/api_cookbook.rst @@ -0,0 +1,12 @@ +API Cookbook +============ + +This page provides some examples, tutorials as notebooks to help you use the API of ``PBxplore``. + + +.. toctree:: + :maxdepth: 1 + + ./notebooks/Assignement + ./notebooks/WritePB + ./notebooks/Deformability diff --git a/doc/source/api_reference.rst b/doc/source/api_reference.rst new file mode 100644 index 0000000..b0b54f0 --- /dev/null +++ b/doc/source/api_reference.rst @@ -0,0 +1,16 @@ +API Reference +============= + +This page provides the documentation generated from the source files. + + +.. toctree:: + :maxdepth: 1 + + ./pages/PB + ./pages/structure + ./pages/assign + ./pages/io + ./pages/analysis + ./pages/demo + ./pages/pbxplore diff --git a/doc/source/index.rst b/doc/source/index.rst index e260ff7..b498185 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -6,10 +6,37 @@ Welcome to PBxplore's documentation! ==================================== -PBxplore is a suite of tools dedicated to Protein Block analysis. +**PBxplore is a suite of tools dedicated to Protein Block analysis.** -PBxplore --------- +Protein Blocks (PBs) are structural prototypes defined by +`de Brevern `_ *et al* in 2000 [#]_. +The 3-dimensional local structure of a protein backbone can be modelized as an 1-dimensional +sequence of PBs. +In principle, any conformation of any amino acid could be represented +by one of the sixteen available Protein Blocks. + +.. figure:: img/PBs.jpg + :align: center + + Schematic representation of the sixteen protein blocks, labeled from *a* to *p* + (Creative commons CC-BY). + + + + +PBxplore provides both a python library and command-line tools (:doc:`Utilization `). +For some features (reading trajectory, plots), PBxplore requires +some optional dependencies (:doc:`Installation `). +Basically, PBxplore can: + +* **assign PBs** from either a PDB or either a molecular dynamics trajectory (:doc:`PB assignation <./notebooks/Assignement>`). +* use analysis tools to perform **statistical analysis** on PBs (:doc:`Statistics `). +* use analysis tools to **study protein flexibility and deformability** (:doc:`Analyzis <./notebooks/Deformability>`). + + +.. raw:: html + +
.. toctree:: :maxdepth: 1 @@ -21,39 +48,26 @@ PBxplore PBcount PBstat PBclust + api_cookbook + api_reference +.. raw:: html +
-API cookbook ------------- - -.. toctree:: - :maxdepth: 1 - - ./notebooks/Assignement - ./notebooks/WritePB - ./notebooks/Deformability +Contact & Support +----------------- -API reference -------------- - -.. toctree:: - :maxdepth: 1 - - ./pages/PB - ./pages/structure - ./pages/assign - ./pages/io - ./pages/analysis - ./pages/demo - ./pages/pbxplore +PBxplore is a research software and has been developped by: +* Pierre Poulain, DSIMB, Ets Poulain, Pointe-Noire, Congo +* Jonathan Barnoud, University of Groningen, Groningen, The Netherlands +* Hubert Santuz, DSIMB, Paris, France +* Alexandre G. de Brevern, DSIMB, Paris, France -Indices and tables ------------------- +If you want to report a bug, request a feature, +use the `GitHub issue system `_. -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` +.. [#] A. G. de Brevern, C. Etchebest, and S. Hazout. Bayesian Probabilistic Approach for Predicting Backbone Structures in Terms of Protein Blocks. *Proteins* **41**:271-87 (2000). From a39476ba6d317b16f0f4315da513e6a826b08b1d Mon Sep 17 00:00:00 2001 From: Hubert Date: Tue, 12 Jan 2016 17:58:11 +0100 Subject: [PATCH 15/18] Add licenses --- doc/source/index.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/source/index.rst b/doc/source/index.rst index b498185..6067b45 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -19,7 +19,7 @@ by one of the sixteen available Protein Blocks. :align: center Schematic representation of the sixteen protein blocks, labeled from *a* to *p* - (Creative commons CC-BY). + (`Creative commons 4.0 CC-BY `_). @@ -70,4 +70,10 @@ If you want to report a bug, request a feature, use the `GitHub issue system `_. +Licence +------- + +PBxplore is licensed under `The MIT License `_. + + .. [#] A. G. de Brevern, C. Etchebest, and S. Hazout. Bayesian Probabilistic Approach for Predicting Backbone Structures in Terms of Protein Blocks. *Proteins* **41**:271-87 (2000). From d7325a4ae26755aefb67499c68b682754198fa1f Mon Sep 17 00:00:00 2001 From: Hubert Date: Wed, 13 Jan 2016 15:28:47 +0100 Subject: [PATCH 16/18] Improve documentation about the API --- doc/source/api_cookbook.rst | 43 +++++++++++++++++++++++++++++++++++++ doc/source/utilization.rst | 4 +++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/doc/source/api_cookbook.rst b/doc/source/api_cookbook.rst index 39ff87d..61e248e 100644 --- a/doc/source/api_cookbook.rst +++ b/doc/source/api_cookbook.rst @@ -3,6 +3,49 @@ API Cookbook This page provides some examples, tutorials as notebooks to help you use the API of ``PBxplore``. +Basically, PBxplore is structured around 3 modules: + +PBxplore.structure +------------------ + +This module handles the reading of PDB files and trajectory files. +Its 2 major functions `chain_from_files()` and `chain_from_trajectory` are direclty exposed +at the package level. + +Look at the notebook :doc:`PB assignation <./notebooks/Assignement>` for further information. + +.. note:: `chain_from_trajectory()` requires the installation of python library `MDAnalysis `_ + + +PBxplore.io +----------- + +This module is about the I/O of all files other than PDB. +It handles the reading/writing of fasta files and the writing of +flat analysis files (phi/psi files, Neq files). + +Look at the notebook :doc:`Writing PB in file <./notebooks/Assignement>` for further information. + + +PBxplore.analysis +----------------- + +This module handle all analysis functions, ploting functions and clustering one available with the package. +You can: + +* generate map of the distribution of PBs along protein sequence with `plot_map()`. +* compute :ref:`Neq` with `compute_neq()` and generate the plot with `plot_neq()`. +* generate WebLogo-like representation of PBs frequency along protein sequence with `generate_weblogo()`. +* cluster conformations of a same protein based on PB similarities. + +Look at the notebook :doc:`Visualize protein deformability <./notebooks/Deformability>` +for further information. + + +.. note:: plotting function require `Matplotlib `_. + +.. note:: `generate_weblogo()` requires `Weblogo3 `_. + .. toctree:: :maxdepth: 1 diff --git a/doc/source/utilization.rst b/doc/source/utilization.rst index 735e89a..64ba0f1 100644 --- a/doc/source/utilization.rst +++ b/doc/source/utilization.rst @@ -1,7 +1,7 @@ Utilization =========== -2 ways to use `PBxplore`: +There is 2 ways to use `PBxplore`: - command-line scripts - API @@ -23,6 +23,8 @@ Here the list: API --- +PBxplore is also a python library and provides an API to interfacing with Python applications. +You will find :doc:`here ` a list of notebooks to help you use the API. .. _demo: From 7d91c2243aad4e2a42eb496dfa5ecb0a4b555b90 Mon Sep 17 00:00:00 2001 From: Hubert Date: Wed, 13 Jan 2016 15:41:35 +0100 Subject: [PATCH 17/18] Update global README --- README.md | 60 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index ce6007f..b69ef48 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,68 @@ -Build Status from Travis CI [![Build Status](https://travis-ci.org/pierrepo/PBxplore.svg?branch=master)](https://travis-ci.org/pierrepo/PBxplore) +# PBxplore [![Build Status](https://travis-ci.org/pierrepo/PBxplore.svg?branch=master)](https://travis-ci.org/pierrepo/PBxplore) --- -**PBxplore** is a suite of tools dedicated to Protein Block analysis. Protein Blocks are structural prototypes defined by [de Brevern](http://www.dsimb.inserm.fr/~debrevern/index.php) *et al* [1]. The 3-dimensional local structure of a protein backbone can be modelized as an 1-dimensional sequence of PBs. In principle, any conformation of any amino acid could be represented by one of the sixteen available Protein Blocks (see Figure 1). +**PBxplore** is a suite of tools dedicated to Protein Block analysis. +Protein Blocks are structural prototypes defined by +[de Brevern](http://www.dsimb.inserm.fr/~debrevern/index.php) *et al* [1]. The 3-dimensional local +structure of a protein backbone can be modelized as an 1-dimensional sequence of PBs. +In principle, any conformation of any amino acid could be represented by one of +the sixteen available Protein Blocks (see Figure 1). -![PBs](doc/img/PBs.jpg "PBs") +![PBs](doc/source/img/PBs.jpg "PBs") -**Figure 1.** Schematic representation of the sixteen protein blocks, labeled from *a* to *p* (Creative commons CC BY). +**Figure 1.** Schematic representation of the sixteen protein blocks, + labeled from *a* to *p* ([Creative commons 4.0 CC-BY](https://creativecommons.org/licenses/by/4.0/)). -# Download + +PBxplore provides both a python library and command-line tools. Basically, PBxplore can: + +* **assign PBs** from either a PDB or either a molecular dynamics trajectory. +* use analysis tools to perform **statistical analysis** on PBs. +* use analysis tools to **study protein flexibility and deformability**. + +For details, see the documentation at [https://pbxplore.readthedocs.org/en/latest/](https://pbxplore.readthedocs.org/en/latest/). + +## Download - [Get latest zip archive](https://github.com/pierrepo/PBxplore/archive/master.zip) - Clone repository: `git clone git@github.com:pierrepo/PBxplore.git` or `git clone https://github.com/pierrepo/PBxplore.git` -# Requirements +## Requirements -PBxplore requires: +PBxplore requires: * Python 2.7 or Python 3.x (>= 3.3) -* the [NumPy](http://numpy.scipy.org/ "NumPy") Python library, -* the R software. +* the [NumPy](http://numpy.scipy.org/ "NumPy") Python library, Optionally, PBxplore can use: * the [MDAnalysis](https://code.google.com/p/mdanalysis/) Python library (version >= 0.11) to read MD trajectories generated by Gromacs (.xtc files), +* [Mapltolib](http://matplotlib.org/) to generate plots. * [WebLogo 3](http://weblogo.threeplusone.com/) to create logo from PB sequences. -# Documentation +## Documentation + +All documentation are hosted by Read The Docs and can be found [here](https://pbxplore.readthedocs.org/en/latest/). + +## Contact & Support + +PBxplore is a research software and has been developped by: + +* Pierre Poulain, DSIMB, Ets Poulain, Pointe-Noire, Congo +* Jonathan Barnoud, University of Groningen, Groningen, The Netherlands +* Hubert Santuz, DSIMB, Paris, France +* Alexandre G. de Brevern, DSIMB, Paris, France + +If you want to report a bug, request a feature, +use the [GitHub issue system](https://github.com/pierrepo/PBxplore/issues>). + + +## Licence -- [Installation](doc/installation.md) -- [Introduction to Protein Blocks](doc/intro.PBs.md) -- [Single structure analysis](doc/single.structure.analysis.md) -- [Multiple conformation analysis](doc/multiple.conformation.analysis.md) -* [API documentation](http://pbxplore.readthedocs.org/en/latest/) [![Documentation Status](https://readthedocs.org/projects/pbxplore/badge/?version=latest)](http://pbxplore.readthedocs.org/en/latest/?badge=latest) +PBxplore is licensed under [The MIT License](https://github.com/pierrepo/PBxplore/blob/master/LICENSE). -# References +## References [1] A. G. de Brevern, C. Etchebest and S. Hazout. Bayesian probabilistic approach for predicting backbone structures in terms of protein blocks. *Proteins* **41**: 271-288 (2000). From 99ac048d2d35410d801065633d42999d74603165 Mon Sep 17 00:00:00 2001 From: Hubert Date: Thu, 14 Jan 2016 10:11:30 +0100 Subject: [PATCH 18/18] fix typo --- doc/source/api_cookbook.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/api_cookbook.rst b/doc/source/api_cookbook.rst index 61e248e..6784b7f 100644 --- a/doc/source/api_cookbook.rst +++ b/doc/source/api_cookbook.rst @@ -42,7 +42,7 @@ Look at the notebook :doc:`Visualize protein deformability <./notebooks/Deformab for further information. -.. note:: plotting function require `Matplotlib `_. +.. note:: Plotting functions require `Matplotlib `_. .. note:: `generate_weblogo()` requires `Weblogo3 `_.