From 3ee31409521d0861b60a2c74b8ebcb6cb6f911bf Mon Sep 17 00:00:00 2001 From: Fabrice ALLAIN <fabrice.allain@pasteur.fr> Date: Wed, 4 Apr 2018 16:35:21 +0200 Subject: [PATCH] Updated toctree & ariaec setup command within sphinx documentation --- .gitignore | 1 + CHANGELOG | 52 +- README.rst | 58 +- aria/conbox/commands.py | 6 +- docs/_build/doctrees/contents.doctree | Bin 7120 -> 0 bytes docs/_build/doctrees/copyright.doctree | Bin 6868 -> 0 bytes docs/_build/doctrees/environment.pickle | Bin 8904 -> 0 bytes docs/_build/doctrees/glossary.doctree | Bin 2110 -> 0 bytes docs/_build/doctrees/installation.doctree | Bin 2114 -> 0 bytes docs/_build/doctrees/tutorial.doctree | Bin 2110 -> 0 bytes docs/_build/html/_sources/contents.rst.txt | 29 - docs/_build/html/_sources/copyright.rst.txt | 9 - docs/_build/html/_sources/glossary.rst.txt | 0 .../_build/html/_sources/installation.rst.txt | 0 docs/_build/html/_sources/tutorial.rst.txt | 0 docs/_build/html/_static/alabaster.css | 693 ---- docs/_build/html/_static/custom.css | 1 - docs/_build/html/contents.html | 244 -- docs/_build/html/installation.html | 222 -- docs/_build/html/objects.inv | Bin 356 -> 0 bytes docs/_build/html/searchindex.js | 1 - docs/_build/html/tutorial.html | 222 -- docs/api/conbox.rst | 122 + docs/api/core.rst | 7 + docs/changelog.rst | 4 + docs/conf.py | 30 +- docs/configuration.rst | 85 + docs/contents.rst | 21 + docs/copyright.rst | 9 - docs/examples/index.rst | 4 + docs/glossary.rst | 0 docs/installation.rst | 18 + docs/{index.rst => introduction.rst} | 15 +- docs/tutorial.rst | 0 docs/usage.rst | 156 + examples-dev/olds/Makefile | 20 + .../olds/_build/doctrees/ariaec.doctree | Bin 0 -> 854286 bytes .../olds/_build/doctrees/ariaec.test.doctree | Bin 0 -> 3690 bytes .../olds/_build/doctrees/environment.pickle | Bin 0 -> 365681 bytes .../olds}/_build/doctrees/index.doctree | Bin 5391 -> 5418 bytes .../olds}/_build/doctrees/modules.doctree | Bin 3506 -> 3521 bytes .../olds}/_build/html/.buildinfo | 2 +- .../_build/html/_modules/ariaec/analysis.html | 729 ++++ .../_build/html/_modules/ariaec/base.html | 755 +++++ .../_build/html/_modules/ariaec/commands.html | 752 +++++ .../html/_modules/ariaec/converter.html | 2041 ++++++++++++ .../_build/html/_modules/ariaec/maplot.html | 425 +++ .../_build/html/_modules/ariaec/ndconv.html | 385 +++ .../_build/html/_modules/ariaec/pdbdist.html | 646 ++++ .../_build/html/_modules/ariaec/pdbqual.html | 278 ++ .../_build/html/_modules/ariaec/protein.html | 861 +++++ .../_build/html/_modules/ariaec/protmap.html | 2743 +++++++++++++++ .../_build/html/_modules/ariaec/reader.html | 1141 +++++++ .../_build/html/_modules/ariaec/settings.html | 543 +++ .../_build/html/_modules/ariaec/setup.html | 541 +++ .../olds/_build/html/_modules/index.html | 61 +- .../olds/_build/html/_sources/ariaec.rst.txt | 123 + .../_build/html/_sources/ariaec.test.rst.txt | 10 + .../olds}/_build/html/_sources/index.rst.txt | 8 +- .../_build/html/_sources/modules.rst.txt | 0 .../olds}/_build/html/_static/ajax-loader.gif | Bin .../olds}/_build/html/_static/basic.css | 8 +- .../_build/html/_static/comment-bright.png | Bin .../_build/html/_static/comment-close.png | Bin .../olds}/_build/html/_static/comment.png | Bin .../_build/html/_static/css/badge_only.css | 0 .../olds}/_build/html/_static/css/theme.css | 0 .../olds}/_build/html/_static/doctools.js | 56 +- .../_build/html/_static/down-pressed.png | Bin .../olds}/_build/html/_static/down.png | Bin .../olds}/_build/html/_static/file.png | Bin .../html/_static/fonts/Inconsolata-Bold.ttf | Bin .../_static/fonts/Inconsolata-Regular.ttf | Bin .../_build/html/_static/fonts/Lato-Bold.ttf | Bin .../html/_static/fonts/Lato-Regular.ttf | Bin .../html/_static/fonts/RobotoSlab-Bold.ttf | Bin .../html/_static/fonts/RobotoSlab-Regular.ttf | Bin .../_static/fonts/fontawesome-webfont.eot | Bin .../_static/fonts/fontawesome-webfont.svg | 0 .../_static/fonts/fontawesome-webfont.ttf | Bin .../_static/fonts/fontawesome-webfont.woff | Bin .../olds}/_build/html/_static/jquery-3.1.0.js | 0 .../olds}/_build/html/_static/jquery.js | 0 .../_build/html/_static/js/modernizr.min.js | 0 .../olds}/_build/html/_static/js/theme.js | 0 .../olds}/_build/html/_static/minus.png | Bin .../olds}/_build/html/_static/plus.png | Bin .../olds}/_build/html/_static/pygments.css | 0 .../olds}/_build/html/_static/searchtools.js | 5 +- .../_build/html/_static/underscore-1.3.1.js | 0 .../olds}/_build/html/_static/underscore.js | 0 .../olds}/_build/html/_static/up-pressed.png | Bin .../olds}/_build/html/_static/up.png | Bin .../olds}/_build/html/_static/websupport.js | 2 +- examples-dev/olds/_build/html/ariaec.html | 2953 +++++++++++++++++ .../olds/_build/html/ariaec.test.html | 33 +- examples-dev/olds/_build/html/genindex.html | 905 +++++ .../olds}/_build/html/index.html | 23 +- .../olds}/_build/html/modules.html | 15 +- examples-dev/olds/_build/html/objects.inv | Bin 0 -> 1991 bytes .../olds/_build/html/py-modindex.html | 136 +- .../olds}/_build/html/search.html | 15 +- examples-dev/olds/_build/html/searchindex.js | 1 + examples-dev/olds/ariaec.rst | 114 + examples-dev/olds/ariaec.test.rst | 10 + examples-dev/olds/index.rst | 20 + examples-dev/olds/make.bat | 36 + {docs => examples-dev/olds}/modules.rst | 0 setup.py | 12 +- 109 files changed, 16742 insertions(+), 1675 deletions(-) delete mode 100644 docs/_build/doctrees/contents.doctree delete mode 100644 docs/_build/doctrees/copyright.doctree delete mode 100644 docs/_build/doctrees/environment.pickle delete mode 100644 docs/_build/doctrees/glossary.doctree delete mode 100644 docs/_build/doctrees/installation.doctree delete mode 100644 docs/_build/doctrees/tutorial.doctree delete mode 100644 docs/_build/html/_sources/contents.rst.txt delete mode 100644 docs/_build/html/_sources/copyright.rst.txt delete mode 100644 docs/_build/html/_sources/glossary.rst.txt delete mode 100644 docs/_build/html/_sources/installation.rst.txt delete mode 100644 docs/_build/html/_sources/tutorial.rst.txt delete mode 100644 docs/_build/html/_static/alabaster.css delete mode 100644 docs/_build/html/_static/custom.css delete mode 100644 docs/_build/html/contents.html delete mode 100644 docs/_build/html/installation.html delete mode 100644 docs/_build/html/objects.inv delete mode 100644 docs/_build/html/searchindex.js delete mode 100644 docs/_build/html/tutorial.html create mode 100644 docs/api/conbox.rst create mode 100644 docs/api/core.rst create mode 100644 docs/changelog.rst create mode 100644 docs/configuration.rst create mode 100644 docs/contents.rst delete mode 100644 docs/copyright.rst delete mode 100644 docs/glossary.rst rename docs/{index.rst => introduction.rst} (68%) delete mode 100644 docs/tutorial.rst create mode 100644 docs/usage.rst create mode 100644 examples-dev/olds/Makefile create mode 100644 examples-dev/olds/_build/doctrees/ariaec.doctree create mode 100644 examples-dev/olds/_build/doctrees/ariaec.test.doctree create mode 100644 examples-dev/olds/_build/doctrees/environment.pickle rename {docs => examples-dev/olds}/_build/doctrees/index.doctree (78%) rename {docs => examples-dev/olds}/_build/doctrees/modules.doctree (92%) rename {docs => examples-dev/olds}/_build/html/.buildinfo (82%) create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/analysis.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/base.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/commands.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/converter.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/maplot.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/ndconv.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/pdbdist.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/pdbqual.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/protein.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/protmap.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/reader.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/settings.html create mode 100644 examples-dev/olds/_build/html/_modules/ariaec/setup.html rename docs/_build/html/genindex.html => examples-dev/olds/_build/html/_modules/index.html (60%) create mode 100644 examples-dev/olds/_build/html/_sources/ariaec.rst.txt create mode 100644 examples-dev/olds/_build/html/_sources/ariaec.test.rst.txt rename {docs => examples-dev/olds}/_build/html/_sources/index.rst.txt (61%) rename {docs => examples-dev/olds}/_build/html/_sources/modules.rst.txt (100%) rename {docs => examples-dev/olds}/_build/html/_static/ajax-loader.gif (100%) rename {docs => examples-dev/olds}/_build/html/_static/basic.css (98%) rename {docs => examples-dev/olds}/_build/html/_static/comment-bright.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/comment-close.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/comment.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/css/badge_only.css (100%) rename {docs => examples-dev/olds}/_build/html/_static/css/theme.css (100%) rename {docs => examples-dev/olds}/_build/html/_static/doctools.js (82%) rename {docs => examples-dev/olds}/_build/html/_static/down-pressed.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/down.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/file.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/Inconsolata-Bold.ttf (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/Inconsolata-Regular.ttf (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/Lato-Bold.ttf (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/Lato-Regular.ttf (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/RobotoSlab-Bold.ttf (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/RobotoSlab-Regular.ttf (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/fontawesome-webfont.eot (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/fontawesome-webfont.svg (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/fontawesome-webfont.ttf (100%) rename {docs => examples-dev/olds}/_build/html/_static/fonts/fontawesome-webfont.woff (100%) rename {docs => examples-dev/olds}/_build/html/_static/jquery-3.1.0.js (100%) rename {docs => examples-dev/olds}/_build/html/_static/jquery.js (100%) rename {docs => examples-dev/olds}/_build/html/_static/js/modernizr.min.js (100%) rename {docs => examples-dev/olds}/_build/html/_static/js/theme.js (100%) rename {docs => examples-dev/olds}/_build/html/_static/minus.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/plus.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/pygments.css (100%) rename {docs => examples-dev/olds}/_build/html/_static/searchtools.js (99%) rename {docs => examples-dev/olds}/_build/html/_static/underscore-1.3.1.js (100%) rename {docs => examples-dev/olds}/_build/html/_static/underscore.js (100%) rename {docs => examples-dev/olds}/_build/html/_static/up-pressed.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/up.png (100%) rename {docs => examples-dev/olds}/_build/html/_static/websupport.js (99%) create mode 100644 examples-dev/olds/_build/html/ariaec.html rename docs/_build/html/glossary.html => examples-dev/olds/_build/html/ariaec.test.html (77%) create mode 100644 examples-dev/olds/_build/html/genindex.html rename {docs => examples-dev/olds}/_build/html/index.html (84%) rename {docs => examples-dev/olds}/_build/html/modules.html (89%) create mode 100644 examples-dev/olds/_build/html/objects.inv rename docs/_build/html/copyright.html => examples-dev/olds/_build/html/py-modindex.html (50%) rename {docs => examples-dev/olds}/_build/html/search.html (89%) create mode 100644 examples-dev/olds/_build/html/searchindex.js create mode 100644 examples-dev/olds/ariaec.rst create mode 100644 examples-dev/olds/ariaec.test.rst create mode 100644 examples-dev/olds/index.rst create mode 100644 examples-dev/olds/make.bat rename {docs => examples-dev/olds}/modules.rst (100%) diff --git a/.gitignore b/.gitignore index da18743..0838ab6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ examples/dev/ +examples*dev/ examples/tmp/ docs/olds/ *.simg diff --git a/CHANGELOG b/CHANGELOG index c6df0aa..8bde8a1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,32 +1,32 @@ -1. What's new in version 2.4 ? +What's new in version 2.4 ? -------------------------------- - 1.1 Potential of Mean Forces for dihedral angles () and H-bonds () - 1.2 Clustering step during the iterative process - 1.3 Extended scoring function including PMF, coulombic and full Lennard Jones functions - 1.4 Restraints generation from evolutionary couplings and secondary structure prediction + * Potential of Mean Forces for dihedral angles () and H-bonds () + * Clustering step during the iterative process + * Extended scoring function including PMF, coulombic and full Lennard Jones functions + * Restraints generation from evolutionary couplings and secondary structure prediction -1. What's new in version 2.3? +What's new in version 2.3? ---------------------------------- -- bug fixes - -- support of CCPN version 2 (instead of CCPN v1) - -- extension of symmetric oligomers support (C3, C5 and D2) - (in the GUI, go to "Data > Symmetry") - -- introduction of the log-harmonic potential for distance restraints (Nilges et al. Structure, 2008) - (go to "Structure Generation > CNS > Annealing Parameters > Log-Hamonic potential") - -- import of CCPN Models/Structure ensembles as initial structure for the minimization protocol or - as template structures for the initial assignment/calibration step. - -- addition of Zinc ions coordination (through covalent bonds) - (go to "Add > Zinc Coordination") - -- Automated Molprobilty (clashlist) analysis - (go to "Analyses > Molprobity Clashlist") - -- addition of old aria1.x features (keep_structures, only fully assigned peaks) + * bug fixes + + * support of CCPN version 2 (instead of CCPN v1) + + * extension of symmetric oligomers support (C3, C5 and D2) + (in the GUI, go to "Data > Symmetry") + + * introduction of the log-harmonic potential for distance restraints (Nilges et al. Structure, 2008) + (go to "Structure Generation > CNS > Annealing Parameters > Log-Hamonic potential") + + * import of CCPN Models/Structure ensembles as initial structure for the minimization protocol or + as template structures for the initial assignment/calibration step. + + * addition of Zinc ions coordination (through covalent bonds) + (go to "Add > Zinc Coordination") + + * Automated Molprobilty (clashlist) analysis + (go to "Analyses > Molprobity Clashlist") + + * addition of old aria1.x features (keep_structures, only fully assigned peaks) diff --git a/README.rst b/README.rst index c552de7..394dc0e 100644 --- a/README.rst +++ b/README.rst @@ -1,50 +1,48 @@ +===================================================== de Novo Ambiguous Restraints for Iterative Assignment ===================================================== **A pipeline for automated de novo contact map assignment** -|Pipeline status| |Coverage report| +.. image:: https://gitlab.pasteur.fr/bis-aria/ariaec/badges/master/pipeline.svg + :target: https://gitlab.pasteur.fr/bis-aria/ariaec/commits/master + :alt: Pipeline status + +.. image:: https://gitlab.pasteur.fr/bis-aria/ariaec/badges/master/coverage.svg + :target: https://gitlab.pasteur.fr/bis-aria/ariaec/commits/master + :alt: Coverage report + ``ariaec`` is a Python_ library that provides *de novo* structure prediction based on ARIA_ pipeline and evolutionary restraints inferred from co-evolution. -The package add several command line interfaces aside the usual ARIA commands in - order to convert data, setup an ARIA project with evolutionary restraints, - analyze contact maps or protein structures and generate statistics from a culled - list of PDB files. An exhaustive list of the commands is available in the - section -``nbsphinx`` is a Sphinx_ extension that provides a source parser for -``*.ipynb`` files. -Custom Sphinx directives are used to show `Jupyter `_ code cells (and of -course their results) in both HTML and LaTeX output. -Un-evaluated notebooks -- i.e. notebooks without stored output cells -- will be -automatically executed during the Sphinx build process. -Quick Start: ------------- - #. Be sure to check if ``pip`` (>= 9.0), ``setuptools`` (>= 18.0), ``numpy`` -(>= 1.11) and ``matplotlib`` are actually instaled in your personnal python -installation or virtual environment. +The package add a new command line interface aside the usual ARIA commands in +order to convert data, setup an ARIA project with evolutionary restraints, +analyze contact maps or protein structures and generate statistics from a culled +list of PDB files. + + +Quick Start +----------- + 1. Be sure to check if the following packages are correctly installed with + your python installation or virtual environment. - #. Download the ``zip`` or ``tar`` version at https://gitlab.pasteur.fr/bis-aria/ariaec + * ``pip`` (>= 9.0) + * ``setuptools`` (>= 18.0) + * ``numpy`` (>= 1.11) + * ``matplotlib`` - #. Edit your ``index.rst`` and add the names of your ``*.ipynb`` files - to the ``toctree``. + 2. Download the ``zip`` or ``tar`` version at Gitlab_ - #. Run Sphinx! + 3. Extract the files and run ``pip install .`` inside the new directory -Online documentation (and example of use): - http://nbsphinx.readthedocs.io/ +More explanation about the ``pip`` installation can be found in the +:doc: `installation` section -Source code repository (and issue tracker): - https://github.com/spatialaudio/nbsphinx/ -License: --------- -.. MIT -- see the file ``LICENSE`` for details. .. Hyperlinks +.. _Gitlab: https://gitlab.pasteur.fr/bis-aria/ariaec .. _ARIA: http://aria.pasteur.fr .. _Python: https://www.python.org -.. _Sphinx: http://sphinx-doc.org/ -.. _Jupyter Notebook: http://jupyter.org/ diff --git a/aria/conbox/commands.py b/aria/conbox/commands.py index eb19a88..bcac5fe 100644 --- a/aria/conbox/commands.py +++ b/aria/conbox/commands.py @@ -212,8 +212,8 @@ class AriaEcCommands(object): help="secondary structure prediction file") group.add_argument("-p", "--ariaproject", dest="ariaproject", action=ReadableFile, - help="ARIA project file. This file will be used as" - "an initialization file if") + help="ARIA project file used to initialize a new " + "project with contact map data.") group.add_argument("-t", "--type", nargs="*", dest="contact_types", choices=self.contact_types, help="Infile(s) contact " @@ -231,7 +231,7 @@ class AriaEcCommands(object): group.add_argument("--no-filter", dest="no_filter", action="store_true", default=False, help="Do not filter contact map.") group.add_argument("--extract-all", dest="extractall", action="store_true", - default=False, help="Extract data or all data and" + default=False, help="Extract data or all data and " "parameters if an ARIA project" "is defined with -p option") return parser diff --git a/docs/_build/doctrees/contents.doctree b/docs/_build/doctrees/contents.doctree deleted file mode 100644 index c39c4a1e2446bb870a62dbfad8f1b40746c1cb8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7120 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 WTkw$3GjUZTWqKC>-)3Xo$^QWe<u~;J diff --git a/docs/_build/doctrees/copyright.doctree b/docs/_build/doctrees/copyright.doctree deleted file mode 100644 index 7d110a629d68205ab19ea27b4cc6013fd99b7f3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6868 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 diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle deleted file mode 100644 index d33247210ef006896462da1635f694de75dfde1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8904 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 a`c$PJN00THQ<n0ok!P##VvO=+@&5qol2hOS diff --git a/docs/_build/doctrees/glossary.doctree b/docs/_build/doctrees/glossary.doctree deleted file mode 100644 index b71bf39c0b2dc6a05a67a769854dae2901bb2684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2110 zcmZ`)`FGny5KhxNv2!>{FODX(9EB7}RG`pO&O#|iKosbdatN`O*48$wUCr()wgE%S z^^*UZS;<b)yvGlDFS2Gv-+c3ZGY_VdR41hq(rzl9ay#cAbFSPR9=r4qr$=~v9a@Uz z+zktE@x%xluwu)Ob;41eR&mO^7H38{3+;j#%j29|%X$>tjIagmq%?*K##Wam;W!t< zT*?z|n9s)f5Kgkv>8{pJX~$#hm~ptUbqr?xXGLmpafEGXCYg{aRl=nRm!V}?e_U|| zreNL~rfgT6oEtnD!s32C<Kdke;b~~nzrLi!Gb20;%XXM|w2UW_79Wf7aaef-O_lvb zgipfhBjIuN>Rg1Y&`N}>y0N$x;Zx9@kcj8AX;_#LAcf+1f%@IYdO+3F5kBJq7TP%K z;MowGA{}$_9C5LD7?s6~5k3!#lh4*rUKrszEDMzi!xI-1jXmxxUW)KVXj<-^P(6z; ztshLhYqWA)rE_<gENS-mvc`=OZmz@02`O=hCEEmi+hRa4PEl!XQkr=|d0Zue*t|@1 zOQw1y4LwdsMfeI#)0|#~7Im6%Ujkp-C3*0|L*+EYgz~P0(6-Kqf|7EtIg77TDW{V| zUws1_^u`SFDlC|;e?tl@jl^rPnmJe4>p|eOCjAQTx|`bcg3RSIz&D|lGRH|yd4bnM z%C5+bCEwu^-`bjnQ#SWfD@k=WmO5dQK)p?o)E>!O)dGEo^qMj0#)<E4HDGa!S~6=X z<-HIZ<Oa#{{Sa2UG1|n`p-zeLxPHu-N+r$p1}u9vEM;bdM-n^u0W?zHDSP-~2+KV0 za6k7UVaYgmcykZdbm@xH{a?+GV8-J~9Nr>iG<sF$@xWUFKc<l_rDa~k`;xQx32{sU z6{@SpVV_c1yU&dBfT<Q|Ier$x89%SCkQLvt<2m7V9JioJFE%b-zLMhSu)+s|yiNKq ziNuQAFNmU<M60goVK|;K335kR;k3aosd6GU+m3n8gp65AuC9o@y$fs9NxpB%1GU7q z@LYYh2gkYE!LP${UxnpmN`2%Kzwz`93QhVDBx|FXw0MW?<~gB_RgGxeG3>#7y**+t zZoEq{y}Aym^IQ7F5#sS4G)mXqxQ5@s+&JA!@q5Y^>hOs02WVB18<t4;5tiaqSk@sb z$Gk)#w8-EEeNYVWC)!|ZNyf-61iYq^n(zxFCXH^F1;%^iCf14jB6S)5yw!yEqe?>t z4Y+fQz;$4DvTT!kH>akig5+wD>6`~$CM6RpxNY=(PfEayU_1#r^jk4>nO4D#`WF(2 z4SG`3CO5-PV;!cjMEk_?f%A5yX*lG&(CTr;X_eDlyTn4JwFCBhWTwhwaqTk9c45J* zYTv~IE=*k9@Ao%r5S5Elz7tTW4e-8S)ylC!oQYm0>CfRdoRC`eP{Qh?%pWmap521B z-<|OR+X|*diki^s<gh4;Jvdi8n@e8pBVyZSaWeKfl5xiKt88J>L}=k`Wf7q)H`P7l z$`3k4w+r)hq{z1QbLrQ3MbQ2--U-VNoH=?}>I>N4nu6p0`VB@nBoQAzx%CzMWrV-N ztYba@h`(j$VU9WSPp71XhNBVwzD}p8Eb8b#qHGXB)32ZEay^J>Z&W8aOJR1><HHCV eb^M=E39ZQ)u=rPmf5VKID?$2ag#VVE&Hn(C4jC%| diff --git a/docs/_build/doctrees/installation.doctree b/docs/_build/doctrees/installation.doctree deleted file mode 100644 index 2422faaa0e3e29c6bfbd99c493f38fa19f8d123d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2114 zcmZ`)`FGny5KhxNv7N+8dT}(N<tU^;q5_4Ma+aeM0-`{tltV0QX>DyI?P_*cu>%-d zu9y7R%u05W<~@GMdyzFW`sSPOn|UxDCps>j%<P8JiLh<|m<#3Fc<j<coF3uvHE1cG z3%64Uizi0dfMr{Dt&@)Ov|@?qS)3W+EOZKPtYEpYmiH;R8DR@LacK+{WLB3Z7T6A< zorqW)?z3?&gp<5<x~H{M+6iVIHxB1FkHM_}tV}E}jIaaEIF(sKm2fe_C1@Ew7*||| zDVTGHE8Ej17Y0v;u&`gxczCBqcp94YuP<rw%m~lIlHJL>I%AVai;qS4I4nPcrpkUI z!YASMk#JVMIv3#zv|{P1ZY-`w_!KlJB;xsW8s;YiWKs#dK>hAxJ)r982%qr)3vC>A z@N5W8nT)x3j<{GjjLPE02%m?A$!BXQFN|;vmZVCg5wT-LV_!Inmm+)-npQX`Ro~)E zYX=kW8Lga9N&7C(N}4^stZ{vW8*6ZKLJI5hc#D8<SquoqDJrc^LNhNYPpDWDo0p01 zjH`Z0LuWCm2w#C|n$xS$qE2JsOW<p}Bo9$|sDg$VQ{I&jI@TFkP*UzSXYq9^<#c@L zt8YMq-k2S{3iGDt-;lyeli@X3Nu4X~^&oIslYXUey$x;pLF)1>z&D|la3@Gkd4bnM z%C5*|nb;N?zO^|Gr)=(}R+8#0%XG{$0`)dUQhOwCRSWbT(rd~yH%@$avjGcZ)ET#y zQr-)pL2k$dz8}JhFh(0j9qNP#XZ2&sRg%$MZ@`jg!%}8Scrs!KKY&Iex@8|f3}H#+ zUE$}xLs(KF9DcM1tGaYW>He?g$1vmZ#13x~G8(-qb2ju=z)xsoi%FRmY+rH~ZxP2N zP^o%)9QG-Nbq3rh5148Rp5tdBobmJO$*kg=Igt}yCvX#*^kV(u<tqt(4$ERF$=js= zl1Qw${emc(iM8s<K8E8NlOVUHl};P{k}AiU=37kUTxN_X<m!sZ+q<wzo#gwLJWva> zh3D$4Jvc7ZHhvwB`zov`6Y3++@EcFxu+XFrNwPMIXBO{}-8?6>v8oY`JBB@&tG5U9 z;>NoK)2r){I=`h)93dX>L8ElN^=tSYw8!aQir-VVREI}|KR~OBT(?BRkFdxRX?d5Z z9P<)|&?18u^g%hqpJ;=v#wjPa5b&BtYQirJMjG8J3uJrbCf;QOnYa{x-fTkWQKcb= z2Hd$x;JPq7S+?=LTT@e0L3}kxbuNM)&oVAmaNFqno|J$a$weG=>9=CXrCJ3y>R(78 zHjs+uN*R7pZy4(^fkoOWP7Iy5EKS6r*o9VKC_(F-X4@ksD!m;{pihRXjK*rGVY&<R zURnE2mT+O><iTLDQ3I)*oQUm!LT!Ne{km3;4_PYvX-0nzx8OvkRUb20d6fMlrpwct z(DD0|9Wbt7S|+Fot&R^1qu7IUwYx<os+~lPyOhOauOpdfJj2Qw7EOc}&Q>-dzJ#f6 zqELR=3A$aFqeDg3t)EN3$}58Q7xH#kcHzv?<5FM2!R8bk_ZM(D!W|Ow;j>#`vR_8{ zE6h6H_mB8ndLG)`k%zh^Ej1jC@b@)3M`ck*{}H9b2%3HcRoCl5M7yIp%V`3$lO7*N f(5U18j7n%tPJzY0BK#X>ykrT|KO_9N>~8!AA)p$~ diff --git a/docs/_build/doctrees/tutorial.doctree b/docs/_build/doctrees/tutorial.doctree deleted file mode 100644 index a167d75d120d104283ae96bca3f8e5a398a8a42a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2110 zcmZ`)`F9&N5KhxNv7N+8dT}(N<tU^;vIPn)<t&tP1eOAwQjTSjcV({{t+XR)V+Sy_ zTrc^r8SUChn)mo2??qnC=$mi8Z|1>tlIo;%LfQ?bQ*PV-m~-XYc<j<coF3uvHE1c8 zbGK7)izi0dfMr{DtrL#ow2D*Svp6%tS?CnZSRUuxTGpq_%?Ml2NlIfVVQh725{~T< z+9^-8VLlq?LO97vr+ZpEr5%s0W5(h9<}sM{&x+LI!U#LiOfn%;%7lv%E<ww%!8qeG zOu?KpOxd0`IX8GRgoXWl#=|=`!qd>Ce|<`eXGVAymh4X6)iR#kwD?$rkHhjKXsYNZ zB771~AGsb^pUy?N0<A>2sv3){5k3XY35j?<n}+!b0a7TA7pUHStOry*9pN(`V4;np z3Z4z2Dbg_)&k+|3hf!I)7~%7<FnP9y^1=w$U`eP{7@oM8XzX)m@lu2@Lep~Rgz8&- zY3-onJ)@Q5DsA6ovZUVQ%No~5xUmK&C#1w(mTVF5EsFucI7O+oNvY=r#c`DgV)HW5 zEt%?<)buzZ72zu|O?`S5T2yJmeF}VSm*l|<50z6B6N<YMLdQBI3JS`-<}AKWshmy@ zz4`_;=!@CGt1xeR{tGFrG!n1DO6FW)uLptCn)EBU>uqS$4>Fg_0N;dG${Z&-<po|3 zDY_yzmVBE_d~0(WPTAZ`tt8diSn7mH0`)fCr1D7Ksut)wq}Pl|Hx7JvvjGcZ)RI|C zA@7CIAU8;k?}xC$jnO8i3Ux|^$MrE|DwWjN8?fZruoRgQ9!c!r2hd1)x9sDGAuRE{ z%YEN>2usGf!<&1ss!Lat?*DRr1T!8_;_wzBqt>f3kB8n0_%XF?F)i~V-j|%kPl#g@ zs8BsUzV<0y>kODt9x&zNEXU76IOF@(6SCqvc04D%j^idY>BIWP%U4qT9G3Y|khe+y zC6QQh`vp-nlW5fweGJDvCP8isE1Wj?C1p;eW?M1OnUFC{$<-B+w|8NcD#`aPd7zfq z7M`oG_TV^I+xT@juB))TOsS4s;y0eYVWCMMf@EzJlNRrg-8?5Wv8oo0D~3IotEWfo z#f^6frdQV?b$&}v93dX>L8ElN^=tSYw8!CIir-VTP={NDKR~Oxxo(MsA7L?0g=Jl$ za?DE<LW>Mu(1T)#KhXqRO)^GqA>cKQRD>TGF==$GEHK_9H?eL!5UI=X=glT`9#tAL zXuzFY1g;CSlVO|OyE!#A6(m=KOy@l4F)5i)!EK}Odr|^s1mj82rQeDjmuVH;sDB}W z*nkGSrlZ_2)?o^ZG*28KI&W9%hC{v!tv*+rMmhDhM=VrYJ7B+0W~xjU*Dk|s7v{aH z_FXLC!o<ac!C<2XQMowf+W}p*0p9ncS~)h1Gtti^{W;u%6H==_N?3W6`6GtQvs=*d zvok(mTfwwQQ4?C792P~f2j^;MbIGfDL~Oe(PR2e*GS0Yvl`Slq2rZngEFzTUrrL*G z`9`Pcc43Z|6xp^umwt>_1nm#w?Xc{^nWKxP-hhM6DLC%8-*ALGB;vy>x87pEjPO^O zb*%4?_*-@!+RTxEx+M)X9F6ezHCjbwQQ!U}%7zg%{rIUi*Mo@WMzxZ&6lNziK8&DI d-~Tfzp*2|p7XOOyZ<z6NB}o5_@ZYk#@gI|<87lw) diff --git a/docs/_build/html/_sources/contents.rst.txt b/docs/_build/html/_sources/contents.rst.txt deleted file mode 100644 index d34d8cf..0000000 --- a/docs/_build/html/_sources/contents.rst.txt +++ /dev/null @@ -1,29 +0,0 @@ -.. _contents: - -Sphinx documentation contents -============================= - -.. toctree:: - :maxdepth: 2 - - installation - tutorial - modules - - copyright - - -Indices and tables -================== - -.. only:: builder_html - - * :ref:`genindex` - * :ref:`modindex` - * :ref:`search` - * :ref:`glossary` - -.. only:: not builder_html - - * :ref:`modindex` - * :ref:`glossary` \ No newline at end of file diff --git a/docs/_build/html/_sources/copyright.rst.txt b/docs/_build/html/_sources/copyright.rst.txt deleted file mode 100644 index 6a3311c..0000000 --- a/docs/_build/html/_sources/copyright.rst.txt +++ /dev/null @@ -1,9 +0,0 @@ -:tocdepth: 2 - -.. _copyright: - -Sphinx authors -============== - -.. include:: ../COPYRIGHT - diff --git a/docs/_build/html/_sources/glossary.rst.txt b/docs/_build/html/_sources/glossary.rst.txt deleted file mode 100644 index e69de29..0000000 diff --git a/docs/_build/html/_sources/installation.rst.txt b/docs/_build/html/_sources/installation.rst.txt deleted file mode 100644 index e69de29..0000000 diff --git a/docs/_build/html/_sources/tutorial.rst.txt b/docs/_build/html/_sources/tutorial.rst.txt deleted file mode 100644 index e69de29..0000000 diff --git a/docs/_build/html/_static/alabaster.css b/docs/_build/html/_static/alabaster.css deleted file mode 100644 index be65b13..0000000 --- a/docs/_build/html/_static/alabaster.css +++ /dev/null @@ -1,693 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; - font-size: 17px; - background-color: #fff; - color: #000; - margin: 0; - padding: 0; -} - - -div.document { - width: 940px; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 220px; -} - -div.sphinxsidebar { - width: 220px; - font-size: 14px; - line-height: 1.5; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #fff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -div.body > .section { - text-align: left; -} - -div.footer { - width: 940px; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -p.caption { - font-family: inherit; - font-size: inherit; -} - - -div.relations { - display: none; -} - - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0; - margin: -10px 0 0 0px; - text-align: center; -} - -div.sphinxsidebarwrapper h1.logo { - margin-top: -10px; - text-align: center; - margin-bottom: 5px; - text-align: left; -} - -div.sphinxsidebarwrapper h1.logo-name { - margin-top: 0px; -} - -div.sphinxsidebarwrapper p.blurb { - margin-top: 0; - font-style: normal; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: 'Garamond', 'Georgia', serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar ul li.toctree-l1 > a { - font-size: 120%; -} - -div.sphinxsidebar ul li.toctree-l2 > a { - font-size: 110%; -} - -div.sphinxsidebar input { - border: 1px solid #CCC; - font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; - font-size: 1em; -} - -div.sphinxsidebar hr { - border: none; - height: 1px; - color: #AAA; - background: #AAA; - - text-align: left; - margin-left: 0; - width: 50%; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #DDD; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #EAEAEA; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - margin: 20px 0px; - padding: 10px 30px; - background-color: #EEE; - border: 1px solid #CCC; -} - -div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fafafa; -} - -div.admonition p.admonition-title { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: #fff; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.warning { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.danger { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.error { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.caution { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.attention { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.important { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.note { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.tip { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.hint { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.seealso { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.topic { - background-color: #EEE; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt, code { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -.hll { - background-color: #FFC; - margin: 0 -12px; - padding: 0 12px; - display: block; -} - -img.screenshot { -} - -tt.descname, tt.descclassname, code.descname, code.descclassname { - font-size: 0.95em; -} - -tt.descname, code.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #EEE; - background: #FDFDFD; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.field-list p { - margin-bottom: 0.8em; -} - -/* Cloned from - * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 - */ -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -table.footnote td.label { - width: .1px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - /* Matches the 30px from the narrow-screen "li > ul" selector below */ - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #EEE; - padding: 7px 30px; - margin: 15px 0px; - line-height: 1.3em; -} - -div.viewcode-block:target { - background: #ffd; -} - -dl pre, blockquote pre, li pre { - margin-left: 0; - padding-left: 30px; -} - -tt, code { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, code.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fff; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -/* Don't put an underline on images */ -a.image-reference, a.image-reference:hover { - border-bottom: none; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt, a:hover code { - background: #EEE; -} - - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - li > ul { - /* Matches the 30px from the "ul, ol" selector above */ - margin-left: 30px; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { - - body { - margin: 0; - padding: 20px 30px; - } - - div.documentwrapper { - float: none; - background: #fff; - } - - div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: #FFF; - } - - div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, - div.sphinxsidebar h3 a { - color: #fff; - } - - div.sphinxsidebar a { - color: #AAA; - } - - div.sphinxsidebar p.logo { - display: none; - } - - div.document { - width: 100%; - margin: 0; - } - - div.footer { - display: none; - } - - div.bodywrapper { - margin: 0; - } - - div.body { - min-height: 0; - padding: 0; - } - - .rtd_doc_footer { - display: none; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .footer { - width: auto; - } - - .github { - display: none; - } -} - - -/* misc. */ - -.revsys-inline { - display: none!important; -} - -/* Make nested-list/multi-paragraph items look better in Releases changelog - * pages. Without this, docutils' magical list fuckery causes inconsistent - * formatting between different release sub-lists. - */ -div#changelog > div.section > ul > li > p:only-child { - margin-bottom: 0; -} - -/* Hide fugly table cell borders in ..bibliography:: directive output */ -table.docutils.citation, table.docutils.citation td, table.docutils.citation th { - border: none; - /* Below needed in some edge cases; if not applied, bottom shadows appear */ - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} \ No newline at end of file diff --git a/docs/_build/html/_static/custom.css b/docs/_build/html/_static/custom.css deleted file mode 100644 index 2a924f1..0000000 --- a/docs/_build/html/_static/custom.css +++ /dev/null @@ -1 +0,0 @@ -/* This file intentionally left blank. */ diff --git a/docs/_build/html/contents.html b/docs/_build/html/contents.html deleted file mode 100644 index 9bb303d..0000000 --- a/docs/_build/html/contents.html +++ /dev/null @@ -1,244 +0,0 @@ - - -<!DOCTYPE html> -<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> -<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> -<head> - <meta charset="utf-8"> - - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - - <title>Sphinx documentation contents — ARIA 4 documentation</title> - - - - - - - - - - - - - - - - - - <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> - - - - - - <link rel="index" title="Index" - href="genindex.html"/> - <link rel="search" title="Search" href="search.html"/> - <link rel="copyright" title="Copyright" href="copyright.html"/> - <link rel="top" title="ARIA 4 documentation" href="index.html"/> - - - <script src="_static/js/modernizr.min.js"></script> - -</head> - -<body class="wy-body-for-nav" role="document"> - - - <div class="wy-grid-for-nav"> - - - <nav data-toggle="wy-nav-shift" class="wy-nav-side"> - <div class="wy-side-scroll"> - <div class="wy-side-nav-search"> - - - - <a href="index.html" class="icon icon-home"> ARIA - - - - </a> - - - - - <div class="version"> - 2 - </div> - - - - -<div role="search"> - <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> - <input type="text" name="q" placeholder="Search docs" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> -</div> - - - </div> - - <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> - - - - - - - <!-- Local TOC --> - <div class="local-toc"><ul> -<li><a class="reference internal" href="#">Sphinx documentation contents</a></li> -<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li> -</ul> -</div> - - - </div> - </div> - </nav> - - <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> - - - <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> - - <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="index.html">ARIA</a> - - </nav> - - - - <div class="wy-nav-content"> - <div class="rst-content"> - - - - - - - - - - - - - - - - -<div role="navigation" aria-label="breadcrumbs navigation"> - - <ul class="wy-breadcrumbs"> - - <li><a href="index.html">Docs</a> »</li> - - <li>Sphinx documentation contents</li> - - - <li class="wy-breadcrumbs-aside"> - - - <a href="_sources/contents.rst.txt" rel="nofollow"> View page source</a> - - - </li> - - </ul> - - - <hr/> -</div> - <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> - <div itemprop="articleBody"> - - <div class="section" id="sphinx-documentation-contents"> -<span id="contents"></span><h1>Sphinx documentation contents<a class="headerlink" href="#sphinx-documentation-contents" title="Permalink to this headline">¶</a></h1> -<div class="toctree-wrapper compound"> -<ul> -<li class="toctree-l1"><a class="reference internal" href="modules.html">ariaec</a><ul class="simple"> -</ul> -</li> -<li class="toctree-l1"><a class="reference internal" href="copyright.html">Sphinx authors</a></li> -</ul> -</div> -</div> -<div class="section" id="indices-and-tables"> -<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1> -<ul class="simple"> -<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li> -<li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li> -<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li> -<li><span class="xref std std-ref">glossary</span></li> -</ul> -</div> - - - </div> - <div class="articleComments"> - - </div> - </div> - <footer> - - - <hr/> - - <div role="contentinfo"> - <p> - © <a href="copyright.html">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. - - </p> - </div> - Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. - -</footer> - - </div> - </div> - - </section> - - </div> - - - - - - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'4', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> - - - - - - <script type="text/javascript" src="_static/js/theme.js"></script> - - - - - <script type="text/javascript"> - jQuery(function () { - SphinxRtdTheme.StickyNav.enable(); - }); - </script> - - -</body> -</html> \ No newline at end of file diff --git a/docs/_build/html/installation.html b/docs/_build/html/installation.html deleted file mode 100644 index bb49dbe..0000000 --- a/docs/_build/html/installation.html +++ /dev/null @@ -1,222 +0,0 @@ - - -<!DOCTYPE html> -<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> -<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> -<head> - <meta charset="utf-8"> - - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - - <title><no title> — ARIA 4 documentation</title> - - - - - - - - - - - - - - - - - - <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> - - - - - - <link rel="index" title="Index" - href="genindex.html"/> - <link rel="search" title="Search" href="search.html"/> - <link rel="copyright" title="Copyright" href="copyright.html"/> - <link rel="top" title="ARIA 4 documentation" href="index.html"/> - - - <script src="_static/js/modernizr.min.js"></script> - -</head> - -<body class="wy-body-for-nav" role="document"> - - - <div class="wy-grid-for-nav"> - - - <nav data-toggle="wy-nav-shift" class="wy-nav-side"> - <div class="wy-side-scroll"> - <div class="wy-side-nav-search"> - - - - <a href="index.html" class="icon icon-home"> ARIA - - - - </a> - - - - - <div class="version"> - 2 - </div> - - - - -<div role="search"> - <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> - <input type="text" name="q" placeholder="Search docs" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> -</div> - - - </div> - - <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> - - - - - - - <!-- Local TOC --> - <div class="local-toc"><ul class="simple"> -</ul> -</div> - - - </div> - </div> - </nav> - - <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> - - - <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> - - <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="index.html">ARIA</a> - - </nav> - - - - <div class="wy-nav-content"> - <div class="rst-content"> - - - - - - - - - - - - - - - - -<div role="navigation" aria-label="breadcrumbs navigation"> - - <ul class="wy-breadcrumbs"> - - <li><a href="index.html">Docs</a> »</li> - - <li><no title></li> - - - <li class="wy-breadcrumbs-aside"> - - - <a href="_sources/installation.rst.txt" rel="nofollow"> View page source</a> - - - </li> - - </ul> - - - <hr/> -</div> - <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> - <div itemprop="articleBody"> - - - - </div> - <div class="articleComments"> - - </div> - </div> - <footer> - - - <hr/> - - <div role="contentinfo"> - <p> - © <a href="copyright.html">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. - - </p> - </div> - Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. - -</footer> - - </div> - </div> - - </section> - - </div> - - - - - - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'4', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> - - - - - - <script type="text/javascript" src="_static/js/theme.js"></script> - - - - - <script type="text/javascript"> - jQuery(function () { - SphinxRtdTheme.StickyNav.enable(); - }); - </script> - - -</body> -</html> \ No newline at end of file diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv deleted file mode 100644 index bcf75841406bd471eb2d939d7016def94fd090f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmV-q0h|6KAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkGQb|Dy zBOq2~a&u{KZaN?`3L_v?Xk{RBWo=<;Ze(S0Aa7<MbZBXFAZBT7WguyDAY*TBaB^jH zb7f>8b#rNMXCQiPX<{x4c-n=Lze)r#5XSpFMMT>ZY!49*vA9AIudt5Eun9~uOEL?$ zov-2R`6R9;aT8atOMWxoH~%yRhQLWCHhV)_?rx+m?Ao$Nc^a(?XSu{Czfi@F!cU6O ztsd1Y;Kt$d>R*p>j&88rH&I~Mg__t>{4HtfwxYFgl?@PFFmUcwmF7yvucsK0Qc`hl zTdFMQ-3F5E7~xK=o+Y!fdjZtsK{Cn1^YQR-|MB*o`b}Ic28k77-b?4R@=aAw=8s{< zc~=8j@knMuC}a8WPj~Hta<Ym}fffl=)V4RytXw0<pVR<?C#FS(t!HJMo<9Mb)Zr_o CG@ye3 diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js deleted file mode 100644 index aa9f47f..0000000 --- a/docs/_build/html/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({docnames:["contents","copyright","glossary","index","installation","modules","tutorial"],envversion:52,filenames:["contents.rst","copyright.rst","glossary.rst","index.rst","installation.rst","modules.rst","tutorial.rst"],objects:{},objnames:{},objtypes:{},terms:{all:1,ambigu:1,ani:1,aria:1,ariaec:0,assign:1,author:0,autom:1,bardiaux:1,benjamin:1,copyright:1,date:1,distribut:1,explicit:1,express:1,fit:1,glossari:0,habeck:1,holder:1,impli:1,includ:1,index:[0,3],infring:1,iter:1,kind:1,limit:1,malliavin:1,merchant:1,michael:1,modifi:1,modul:[0,1,3],nilg:1,noe:1,non:1,packag:1,page:[0,3],particular:1,permiss:1,prohibit:1,provid:1,purpos:1,reserv:1,restraint:1,revis:1,riep:1,right:1,search:[0,3],softwar:1,substant:1,theres:1,thi:1,version:1,warranti:1,without:1,wolfgang:1},titles:["Sphinx documentation contents","Sphinx authors","<no title>","Welcome to ARIAEC\u2019s documentation!","<no title>","ariaec","<no title>"],titleterms:{ariaec:[3,5],author:1,content:0,document:[0,3],indic:[0,3],sphinx:[0,1],tabl:[0,3],welcom:3}}) \ No newline at end of file diff --git a/docs/_build/html/tutorial.html b/docs/_build/html/tutorial.html deleted file mode 100644 index ab145b6..0000000 --- a/docs/_build/html/tutorial.html +++ /dev/null @@ -1,222 +0,0 @@ - - -<!DOCTYPE html> -<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> -<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> -<head> - <meta charset="utf-8"> - - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - - <title><no title> — ARIA 4 documentation</title> - - - - - - - - - - - - - - - - - - <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> - - - - - - <link rel="index" title="Index" - href="genindex.html"/> - <link rel="search" title="Search" href="search.html"/> - <link rel="copyright" title="Copyright" href="copyright.html"/> - <link rel="top" title="ARIA 4 documentation" href="index.html"/> - - - <script src="_static/js/modernizr.min.js"></script> - -</head> - -<body class="wy-body-for-nav" role="document"> - - - <div class="wy-grid-for-nav"> - - - <nav data-toggle="wy-nav-shift" class="wy-nav-side"> - <div class="wy-side-scroll"> - <div class="wy-side-nav-search"> - - - - <a href="index.html" class="icon icon-home"> ARIA - - - - </a> - - - - - <div class="version"> - 2 - </div> - - - - -<div role="search"> - <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> - <input type="text" name="q" placeholder="Search docs" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> -</div> - - - </div> - - <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> - - - - - - - <!-- Local TOC --> - <div class="local-toc"><ul class="simple"> -</ul> -</div> - - - </div> - </div> - </nav> - - <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> - - - <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> - - <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="index.html">ARIA</a> - - </nav> - - - - <div class="wy-nav-content"> - <div class="rst-content"> - - - - - - - - - - - - - - - - -<div role="navigation" aria-label="breadcrumbs navigation"> - - <ul class="wy-breadcrumbs"> - - <li><a href="index.html">Docs</a> »</li> - - <li><no title></li> - - - <li class="wy-breadcrumbs-aside"> - - - <a href="_sources/tutorial.rst.txt" rel="nofollow"> View page source</a> - - - </li> - - </ul> - - - <hr/> -</div> - <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> - <div itemprop="articleBody"> - - - - </div> - <div class="articleComments"> - - </div> - </div> - <footer> - - - <hr/> - - <div role="contentinfo"> - <p> - © <a href="copyright.html">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. - - </p> - </div> - Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. - -</footer> - - </div> - </div> - - </section> - - </div> - - - - - - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'4', - COLLAPSE_INDEX:false, - FILE_SUFFIX:'.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt' - }; - </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> - - - - - - <script type="text/javascript" src="_static/js/theme.js"></script> - - - - - <script type="text/javascript"> - jQuery(function () { - SphinxRtdTheme.StickyNav.enable(); - }); - </script> - - -</body> -</html> \ No newline at end of file diff --git a/docs/api/conbox.rst b/docs/api/conbox.rst new file mode 100644 index 0000000..8ba7229 --- /dev/null +++ b/docs/api/conbox.rst @@ -0,0 +1,122 @@ +Conbox +====== + +.. automodule:: aria.conbox + :members: + :undoc-members: + :show-inheritance: + +Analysis +-------- + +.. automodule:: aria.conbox.analysis + :members: + :undoc-members: + :show-inheritance: + + + +Commands +-------- + +.. automodule:: aria.conbox.commands + :members: + :undoc-members: + :show-inheritance: + +Common +------ + +.. automodule:: aria.conbox.common + :members: + :undoc-members: + :show-inheritance: + +Converter +--------- + +.. automodule:: aria.conbox.converter + :members: + :undoc-members: + :show-inheritance: + +Maplot +------ + +.. automodule:: aria.conbox.maplot + :members: + :undoc-members: + :show-inheritance: + +NDConv +------ + +.. automodule:: aria.conbox.ndconv + :members: + :undoc-members: + :show-inheritance: + +PDBDist +------- + +.. automodule:: aria.conbox.pdbdist + :members: + :undoc-members: + :show-inheritance: + +PDBQual +------- + +.. automodule:: aria.conbox.pdbqual + :members: + :undoc-members: + :show-inheritance: + +PDBStat +------- + +.. automodule:: aria.conbox.pdbqual + :members: + :undoc-members: + :show-inheritance: + +Protein +-------- + +.. automodule:: aria.conbox.protein + :members: + :undoc-members: + :show-inheritance: + +ProtMap +------- + +.. automodule:: aria.conbox.protmap + :members: + :undoc-members: + :show-inheritance: + +Reader +------ + +.. automodule:: aria.conbox.reader + :members: + :undoc-members: + :show-inheritance: + +Settings +--------- + +.. automodule:: aria.conbox.settings + :members: + :undoc-members: + :show-inheritance: + +Setup +------ + +.. automodule:: aria.conbox.setup + :members: + :undoc-members: + :show-inheritance: + diff --git a/docs/api/core.rst b/docs/api/core.rst new file mode 100644 index 0000000..14ae33f --- /dev/null +++ b/docs/api/core.rst @@ -0,0 +1,7 @@ +Core +==== + +.. automodule:: aria.core + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/changelog.rst b/docs/changelog.rst new file mode 100644 index 0000000..4ccd509 --- /dev/null +++ b/docs/changelog.rst @@ -0,0 +1,4 @@ +Changelog +========= + +.. include:: ../CHANGELOG diff --git a/docs/conf.py b/docs/conf.py index 9524ade..ad64ddb 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,7 +19,10 @@ # import os # import sys # sys.path.insert(0, os.path.abspath('.')) +import time import sphinx_rtd_theme +import sphinx_bootstrap_theme +from setup import get_version # -- General configuration ------------------------------------------------ @@ -38,7 +41,7 @@ extensions = [ 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.napoleon', - 'sphinx.ext.nbsphinx' + # 'sphinx.ext.nbsphinx' ] # Add any paths that contain templates here, relative to this directory. @@ -51,11 +54,10 @@ templates_path = ['_templates'] source_suffix = '.rst' # The master toctree document. -master_doc = 'index' +master_doc = 'introduction' # General information about the project. project = u'ARIAEC' -import time author = u'Benjamin Bardiaux, Michael Habeck, Therese Malliavin, ' \ u'Wolfgang Rieping, and Michael Nilges' copyright = u'{}, {}'.format( @@ -66,10 +68,9 @@ copyright = u'{}, {}'.format( # built documents. # # The short X.Y version. -import setup -version = setup.get_version() +version = get_version(full=False) # The full version, including alpha/beta/rc tags. -release = setup.get_version() +release = get_version(full=True) # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -96,20 +97,35 @@ todo_include_todos = False # a list of builtin themes. # html_theme = "sphinx_rtd_theme" +# html_theme = "bootstrap" html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] +# html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() # 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 # documentation. # -# html_theme_options = {} +html_theme_options = { + 'logo_only': True +} + +html_logo = "_static/logo.jpg" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] + +html_context = { + 'css_files': [ + '_static/theme_overrides.css', # override wide tables in RTD theme + ], + } + +html_favicon = "_static/favicon.ico" + # Custom sidebar templates, must be a dictionary that maps document names # to template names. # diff --git a/docs/configuration.rst b/docs/configuration.rst new file mode 100644 index 0000000..9608258 --- /dev/null +++ b/docs/configuration.rst @@ -0,0 +1,85 @@ +Configuration +============= + +The following tables list the available parameters with the corresponding +sections. In order to change default parameters, the tool can accept a +configuration file with the ``-c`` option in the :doc:`usage`. This +configuration file should follow the `INI <https://en.wikipedia.org/wiki/INI_file>`_ format. + +**Example:** + +.. code-block:: guess + + [section] + ; comment + parameter: value + + +main +---- + +.. rst-class:: table-hover + ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Name | Type | Default | Description | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ss_dist_file | path | `ss_dist.txt`_ | Distances between stable secondary structures. Those distances are used to make supplementary distance restraints related to secondary structure predictions. | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| scsc_min_file | path | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| interlowerbounds_pdbstat | path | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| intertarget_pdbstat | path | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| interupperbounds_pdbstat | path | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| intralowerbounds_pdbstat | path | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| intratarget_pdbstat | path | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| intraupperbounds_pdbstat | path | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ariaproject_template | str | `2.3.6`_ | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| procheck_executable | path | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| prosa_executable | | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| whatif_executable | | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| clashlist_executable | | | | ++--------------------------+------+----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ + + +ss_dist.txt ++++++++++++ +.. _ss_dist.txt: + +.. literalinclude:: ../aria/conbox/data/ss_dist.txt + +A ++++++++++++ + +contactdef +---------- + +setup +----- + +maplot +------ + +bbconv +------ + +pdbqual +------- + +pdbdist +------- + +pdbstat +------- + +analysis +-------- diff --git a/docs/contents.rst b/docs/contents.rst new file mode 100644 index 0000000..706adb8 --- /dev/null +++ b/docs/contents.rst @@ -0,0 +1,21 @@ +.. toctree:: + :maxdepth: 2 + :caption: Documentation + + changelog + installation + usage + configuration + +.. toctree:: + :maxdepth: 2 + :caption: API + + api/core + api/conbox + +.. toctree:: + :maxdepth: 2 + :caption: Examples + + examples/index diff --git a/docs/copyright.rst b/docs/copyright.rst deleted file mode 100644 index 6a3311c..0000000 --- a/docs/copyright.rst +++ /dev/null @@ -1,9 +0,0 @@ -:tocdepth: 2 - -.. _copyright: - -Sphinx authors -============== - -.. include:: ../COPYRIGHT - diff --git a/docs/examples/index.rst b/docs/examples/index.rst index e69de29..d975cbf 100644 --- a/docs/examples/index.rst +++ b/docs/examples/index.rst @@ -0,0 +1,4 @@ +.. _examples: + +Examples +======== diff --git a/docs/glossary.rst b/docs/glossary.rst deleted file mode 100644 index e69de29..0000000 diff --git a/docs/installation.rst b/docs/installation.rst index e69de29..9eb2c73 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -0,0 +1,18 @@ +Installation +============ + +.. note:: + + Installation procedure may change in the future + +Dependencies +------------ + + +Basic installation +------------------ + + +Singularity +----------- + diff --git a/docs/index.rst b/docs/introduction.rst similarity index 68% rename from docs/index.rst rename to docs/introduction.rst index 746aac6..fe448a9 100644 --- a/docs/index.rst +++ b/docs/introduction.rst @@ -6,16 +6,11 @@ .. include:: ../README.rst -.. toctree:: - :maxdepth: 1 - :caption: Contents +License +------- +.. include:: ../COPYRIGHT - introduction - changelog - installation - tutorial - examples/index - api +.. include:: contents.rst Indices and tables @@ -23,4 +18,4 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` -* :ref:`search` +* :ref:`search` \ No newline at end of file diff --git a/docs/tutorial.rst b/docs/tutorial.rst deleted file mode 100644 index e69de29..0000000 diff --git a/docs/usage.rst b/docs/usage.rst new file mode 100644 index 0000000..ed54d26 --- /dev/null +++ b/docs/usage.rst @@ -0,0 +1,156 @@ +Command Line Interface +====================== + +The command line interface is accessible by calling ``ariaec`` (or ``ec2aria`` +for older versions) within the terminal at the end of the installation process. + +.. code-block:: bash + + $ ariaec [-h] -o OUTPUT_DIRECTORY [-c CONF_FILE] [--nolog] [-d] COMMAND + + +**Commands** + +.. rst-class:: table-hover + + ++-------------------------+-----------------------------------------------------+ +| Name | Short description | ++-------------------------+-----------------------------------------------------+ +| `setup <Setup_>`_ | Setup ARIA project with EC data | ++-------------------------+-----------------------------------------------------+ +| `bbconv <BBconv_>`_ | Translate BBcontacts as distance restraints | ++-------------------------+-----------------------------------------------------+ +| `maplot <Maplot_>`_ | Contact map visualisation tool | ++-------------------------+-----------------------------------------------------+ +| `pdbqual <PDBQual_>`_ | Call PDB quality tools | ++-------------------------+-----------------------------------------------------+ +| `analysis <Analysis_>`_ | Analyze results from an ARIA project | ++-------------------------+-----------------------------------------------------+ +| `tbl2xml <TBL2XML_>`_ | Convert TBL restraints in ARIA XML format | ++-------------------------+-----------------------------------------------------+ +| `pdbdist <PDBDist_>`_ | Extract distance from a culled list of PDBs | ++-------------------------+-----------------------------------------------------+ +| `pdbstat <PDBStat_>`_ | Statistical analysis of ``pdbdist`` results | ++-------------------------+-----------------------------------------------------+ +| `iniconv <Iniconv_>`_ | Convert a INI file as csv for easy readability | ++-------------------------+-----------------------------------------------------+ + + +**Options** + + +.. rst-class:: table-hover + + ++--------------------------------------------------------+-----------------------------------------------------+ +| Name | Description | ++--------------------------------------------------------+-----------------------------------------------------+ +| ``-h``, ``--help`` | show help message and exit | ++--------------------------------------------------------+-----------------------------------------------------+ +| ``-o OUTPUT_DIRECTORY``, ``--output OUTPUT_DIRECTORY`` | Output directory (default: None) | ++--------------------------------------------------------+-----------------------------------------------------+ +| ``-c CONF_FILE``, ``--conf CONF_FILE`` | configuration file (default: None) | ++--------------------------------------------------------+-----------------------------------------------------+ +| ``--nolog`` | Don't generate log files (default: False) | ++--------------------------------------------------------+-----------------------------------------------------+ +| ``-d``, ``--debug`` | Increase output verbosity (default: False) | ++--------------------------------------------------------+-----------------------------------------------------+ + + +Setup +-------------- +Translate contact maps as distance restraints and setup ARIA infrastructure. + +.. code-block:: bash + + $ ariaec setup [-options] seq infile [infile ...] -t intype [intype ...] + + + +**Arguments** + +.. rst-class:: table-hover + + ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Name | Short description | ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``seq`` | Sequence file [``FASTA``] | ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``infile`` | Contact or pdb file(s) used to build aria distance restraints | ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``intype`` | Contact Map file format:sup:`*` | ++-------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| :sup:`*` Accepted contact map formats combining formats supported by ConKit_ with few supplementary formats: ``gremlin``, ``pconsc1``, ``pconsc3``, ``pconsc2``, ``bbcontacts``, ``metapsicov_stg1``, ``membrain``, ``metapsicovhb``, ``comsat``, ``casprr``, ``ccmpred``, ``plm``, ``bclcontact``, ``epcmap``, ``evfold``, ``native``, ``pconsc``, ``psicov``, ``freecontact``, ``genericstructure``, ``ncont``, ``plmc``, ``plmdca``, ``metapsicov_stg2``, ``native_full``, ``metapsicov``, ``evcoupling``, ``contactlist``, ``plmev``, ``mmcif``, ``casp``, ``pdb``, ``flib`` | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +.. _ConKit: http://www.conkit.org/en/latest/ + + +**Options** + + +.. rst-class:: table-hover + + ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Name | Description | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``-d DISTFILE``, ``--distfile DISTFILE`` | Pdb or distance matrix iif distance_type set to distfile in conf file, use distances in the given file as target distance to build distance restraints | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``-s SSPRED``, ``--ssfile SSPRED`` | Secondary structure prediction file | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``-p ARIAPROJECT``, ``--ariaproject ARIAPROJECT`` | ARIA project file. This project will be updated with data generated during the ``ariaec setup`` call | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``-r SEQRANGE``, ``--range SEQRANGE`` | Index range if we don't want tu use the whole sequence and map | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``-n REF``, ``--native REF`` | Native pdb. Allow TP/FP detection | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``--hb HB`` | H-bonds contact file (eg: metapsicov.hb) | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``--ssidx`` | Use secondary structure index | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``--no-filter`` | Do not filter contact map | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``--extract-all`` | Extract data or all data and parameters if an ARIA project is defined with ``-p`` option | ++--------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+ + + +Bbconv +-------------- +Translate BBcontacts as distance restraints which can be used during +`setup <Setup_>`_. + + +Maplot +-------------- +Contactmap analysis and visualisation tool. + + +Analysis +-------------- +Analyze results from an ARIA project. + + +PDBQual +-------------- +Call PDB quality tools. + + +TBL2XML +-------------- +Convert TBL restraints in ARIA XML format. + + +PDBDist +-------------- +Extract distance from a culled list of PDBs. + +PDBStat +-------------- +Statistical analysis of ``pdbdist`` results. + +IniConv +-------------- +Convert a INI file as csv for easy readability. diff --git a/examples-dev/olds/Makefile b/examples-dev/olds/Makefile new file mode 100644 index 0000000..5146cab --- /dev/null +++ b/examples-dev/olds/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = AriaEc +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/examples-dev/olds/_build/doctrees/ariaec.doctree b/examples-dev/olds/_build/doctrees/ariaec.doctree new file mode 100644 index 0000000000000000000000000000000000000000..873ef5ec80ab1638d3d206ad59d8ac749e5f2ed5 GIT binary patch literal 854286 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	CEhwsRA6IG8z<)<T` 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	^DCgOW5SxGTw%5*do!`P{91ss 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 AA^-pY literal 0 HcmV?d00001 diff --git a/examples-dev/olds/_build/doctrees/ariaec.test.doctree b/examples-dev/olds/_build/doctrees/ariaec.test.doctree new file mode 100644 index 0000000000000000000000000000000000000000..79196e96c42406483073a8221518dff844321ccc GIT binary patch literal 3690 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 W75&|%f3RUg8ce@`mh`WpGyiWYtwgy1 literal 0 HcmV?d00001 diff --git a/examples-dev/olds/_build/doctrees/environment.pickle b/examples-dev/olds/_build/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..61fbb12e5da8e22a339e9dd4d80b005f6b5551e9 GIT binary patch literal 365681 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≤y(zpOB@JH*`- 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/index.doctree b/examples-dev/olds/_build/doctrees/index.doctree similarity index 78% rename from docs/_build/doctrees/index.doctree rename to examples-dev/olds/_build/doctrees/index.doctree index 35d9479b9c171bcec89bfaa738a62daf4279a8c4..7418f750a0ccf7476bd3785a4573aa1e8c31c6e1 100644 GIT binary patch delta 386 zcmeCzTBS9?Ttu0HfuTG#CpkYiRiPwbA+abkQFo%(DnTWvpl(UNE?96f3u6&0P}Vhh zay6rkuv<~4f@49Ef{~$up_!GDxs{30<Wr2j4&FfX^pg@RlT&kYiuE&q#_Fdf=Hw)1 z=IMv$7iAY0Bqpcohh(G{r|KsG#R@7*GV=5E9f1a?ChKPAl}zqsI!e%*vdJ<mi@{D0 zM>rj1hVJA`EPf)YKsTUEY&K^7$Y)ff#K^!9DwdX+lNz6ySDac@l9`_upPHALl#`lL zqzsho2<0wHEQbrJOb!$gWmKJ<E+Qwa29)+@2xZPpDK1h6vTKVpCQlGi64nH>wSZ)X oOom2=Ty2r|<f9^53OYcM*dkpZ8Om0ang-IQ2Ue;NBukU@07=SoCjbBd delta 375 zcmZ3b)vq<dTv&;LfuTG#CpkYiRiPwbA+abkaiaGs0Y#{oZb`l_NNh42V-ahRr=zR$ z<XT1>Vc+~b1^?s{1tVhxLo+Kw11m#|$!8dQ%^ZQI=_i}(X8?`UPfN_nNzBaC4=Bpd zN=+^))(07snyjA$6f3AK$;i*scLa+}p2>8Spy6ecHCPsdog0pDt|QP%lkc<m39A4t zMibxc$oi4bIaDkyGbc4ZGp{(cs3bE#FFrLdF)1fCrAUd9fuSRmyC|_7E~E?;@@5R> zO)1SSh%ZhpDap)BFD_D<TqPpMtqPK3$WW>+Qk%S5L`hg3$geHZ0FoIp85$XKwMCkf iABbovXaPlHi?o4cC|gl#T4qXdkq%g?E|4ru(gOfMT5wwc diff --git a/docs/_build/doctrees/modules.doctree b/examples-dev/olds/_build/doctrees/modules.doctree similarity index 92% rename from docs/_build/doctrees/modules.doctree rename to examples-dev/olds/_build/doctrees/modules.doctree index d0ad5fd7c140f844f56a5fa75dac6569a2f7b02a..ec92b93586bb0a0c21ccfea1e77eff648e441d22 100644 GIT binary patch delta 130 zcmdlaeNcMBO9x*D1_u44#LDE<oSb6)jQreG{j|iKoW#sL{qX#v?BasN<W&8TjMU;( z{Uo4RL1jrsexAN#QD$OlvTkNx$!2**9UiVw=FF7h!c(<{rzZ#SO7WhlEj*hcnxT{- gUR!u>ayhTM$obg93!!X9sc9f}7i$YIl_u!{05*v+RsaA1 delta 123 zcmX>oy-9k)OEYH%1_u3PbN!6`+*JLv#GIVO%sl;oqWrAX<dS0j#G=f^)MWi6pjbg= zNk)F2z9U#<vnHbs4{L@@ZQ-fO@w`%kr)vw(WQb-cWr)`np4G^ZjGbJ_DmHlmFR#eC Y*uwLnY(=SQnJLAE7itSHmL}-|0FW##5dZ)H diff --git a/docs/_build/html/.buildinfo b/examples-dev/olds/_build/html/.buildinfo similarity index 82% rename from docs/_build/html/.buildinfo rename to examples-dev/olds/_build/html/.buildinfo index a74d88e..eaba7c8 100644 --- a/docs/_build/html/.buildinfo +++ b/examples-dev/olds/_build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 4da5904f1f9b1887d948b51687bdfaa0 +config: cbf8f1a8c4c0d68994ae9bd4f214590d tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/examples-dev/olds/_build/html/_modules/ariaec/analysis.html b/examples-dev/olds/_build/html/_modules/ariaec/analysis.html new file mode 100644 index 0000000..23be177 --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/analysis.html @@ -0,0 +1,729 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.analysis — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.analysis</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.analysis</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd">Created on 4/7/17</span> + +<span class="sd">@author: fallain</span> +<span class="sd">"""</span> +<span class="kn">import</span> <span class="nn">re</span> +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="nn">sns</span> +<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> +<span class="kn">from</span> <span class="nn">glob</span> <span class="k">import</span> <span class="n">glob</span> +<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">OrderedDict</span> +<span class="kn">from</span> <span class="nn">Bio.PDB</span> <span class="k">import</span> <span class="n">PDBParser</span><span class="p">,</span> <span class="n">PDBIO</span> +<span class="kn">from</span> <span class="nn">sklearn.decomposition</span> <span class="k">import</span> <span class="n">PCA</span> +<span class="kn">from</span> <span class="nn">aria.AriaXML</span> <span class="k">import</span> <span class="n">AriaXMLPickler</span> +<span class="kn">from</span> <span class="nn">matplotlib.lines</span> <span class="k">import</span> <span class="n">Line2D</span> +<span class="kn">from</span> <span class="nn">mpl_toolkits.mplot3d</span> <span class="k">import</span> <span class="n">Axes3D</span> +<span class="kn">from</span> <span class="nn">aria.SuperImposer</span> <span class="k">import</span> <span class="n">SuperImposer</span> +<span class="kn">from</span> <span class="nn">.converter</span> <span class="k">import</span> <span class="n">AriaEcXMLConverter</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">NotDisordered</span><span class="p">,</span> <span class="n">Capturing</span> +<span class="kn">from</span> <span class="nn">matplotlib.colors</span> <span class="k">import</span> <span class="n">ListedColormap</span> +<span class="kn">from</span> <span class="nn">aria.DataContainer</span> <span class="k">import</span> <span class="n">DATA_SEQUENCE</span> +<span class="kn">from</span> <span class="nn">aria.StructureEnsemble</span> <span class="k">import</span> <span class="n">StructureEnsemble</span><span class="p">,</span> <span class="n">StructureEnsembleSettings</span> + + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="colscatter"><a class="viewcode-back" href="../../ariaec.html#ariaec.analysis.colscatter">[docs]</a><span class="k">def</span> <span class="nf">colscatter</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">axe</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="n">ndim</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">axtitle</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">xlabel</span><span class="o">=</span><span class="s2">"x"</span><span class="p">,</span> + <span class="n">ylabel</span><span class="o">=</span><span class="s2">"y"</span><span class="p">,</span> <span class="n">zlabel</span><span class="o">=</span><span class="s2">"z"</span><span class="p">,</span> <span class="n">legend_prefix</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">others</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Scatter plot with palette colors</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> X :</span> + +<span class="sd"> axe :</span> + +<span class="sd"> colors :</span> + +<span class="sd"> ndim :</span> +<span class="sd"> (Default value = 2)</span> +<span class="sd"> axtitle :</span> +<span class="sd"> (Default value = "")</span> +<span class="sd"> xlabel :</span> +<span class="sd"> (Default value = "x")</span> +<span class="sd"> ylabel :</span> +<span class="sd"> (Default value = "y")</span> +<span class="sd"> zlabel :</span> +<span class="sd"> (Default value = "z")</span> +<span class="sd"> legend_prefix :</span> +<span class="sd"> (Default value = "")</span> +<span class="sd"> others :</span> +<span class="sd"> (Default value = False)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="n">palette</span> <span class="o">=</span> <span class="n">sns</span><span class="o">.</span><span class="n">color_palette</span><span class="p">(</span><span class="s2">"hls"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">colors</span><span class="p">)))</span> + <span class="n">dims</span> <span class="o">=</span> <span class="p">[</span><span class="n">X</span><span class="p">[:,</span> <span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">ndim</span><span class="p">)]</span> + <span class="n">axe</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="o">*</span><span class="n">dims</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="n">colors</span><span class="p">,</span> + <span class="n">cmap</span><span class="o">=</span><span class="n">ListedColormap</span><span class="p">(</span><span class="n">palette</span><span class="p">))</span> + <span class="n">axe</span><span class="o">.</span><span class="n">invert_xaxis</span><span class="p">()</span> + + <span class="k">if</span> <span class="n">others</span><span class="p">:</span> + <span class="n">axe</span><span class="o">.</span><span class="n">legend</span><span class="p">([</span><span class="n">Line2D</span><span class="p">([</span><span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"none"</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="n">palette</span><span class="p">[</span><span class="n">colidx</span><span class="p">],</span> + <span class="n">marker</span><span class="o">=</span><span class="s2">"o"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">colidx</span> <span class="ow">in</span> <span class="nb">set</span><span class="p">(</span><span class="n">colors</span><span class="p">)],</span> + <span class="p">[</span><span class="n">legend_prefix</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">colidx</span><span class="p">)</span> <span class="k">if</span> <span class="n">colidx</span> <span class="o">!=</span> <span class="nb">max</span><span class="p">(</span> + <span class="n">colors</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"Others"</span> <span class="k">for</span> <span class="n">colidx</span> <span class="ow">in</span> <span class="nb">set</span><span class="p">(</span><span class="n">colors</span><span class="p">)],</span> + <span class="n">numpoints</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">axe</span><span class="o">.</span><span class="n">legend</span><span class="p">([</span><span class="n">Line2D</span><span class="p">([</span><span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"none"</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="n">palette</span><span class="p">[</span><span class="n">colidx</span><span class="p">],</span> + <span class="n">marker</span><span class="o">=</span><span class="s2">"o"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">colidx</span> <span class="ow">in</span> <span class="nb">set</span><span class="p">(</span><span class="n">colors</span><span class="p">)],</span> + <span class="p">[</span><span class="n">legend_prefix</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">colidx</span><span class="p">)</span> <span class="k">for</span> <span class="n">colidx</span> <span class="ow">in</span> + <span class="nb">set</span><span class="p">(</span><span class="n">colors</span><span class="p">)],</span> <span class="n">numpoints</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + + <span class="n">axe</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">axtitle</span><span class="p">)</span> + <span class="n">axe</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="n">xlabel</span><span class="p">)</span> + <span class="n">axe</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="n">ylabel</span><span class="p">)</span> + <span class="k">if</span> <span class="n">ndim</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span> + <span class="n">axe</span><span class="o">.</span><span class="n">set_zlabel</span><span class="p">(</span><span class="n">zlabel</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="EnsembleAnalysis"><a class="viewcode-back" href="../../ariaec.html#ariaec.analysis.EnsembleAnalysis">[docs]</a><span class="k">class</span> <span class="nc">EnsembleAnalysis</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""ARIA extended ensemble analysis"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_get_ensemble_paths</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Get list of pdb files related to aria ensemble(s)</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> iteration_path : str</span> +<span class="sd"> ARIA iteration path where all pdb files are saved </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Get the list of all the generated structures in iteration path if no</span> + <span class="c1"># clustering. Otherwise, get the list of all generated structures</span> + <span class="n">list_of_pdb</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">,</span> <span class="s2">"report.clustering"</span><span class="p">)):</span> + <span class="c1"># Get the list of pdb for each cluster</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Clusters found in this iteration, compute analysis for"</span> + <span class="s2">"each generated cluster ensemble"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">clustlist</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">,</span> <span class="s1">'*clust*.list'</span><span class="p">)):</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">clustlist</span><span class="p">)</span> <span class="k">as</span> <span class="n">cluster</span><span class="p">:</span> + <span class="n">list_of_pdb</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cluster</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">())</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># no clustering, pdb list correspond to all generated structures</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"No cluster found in this iteration, compute analysis for"</span> + <span class="s2">" iteration ensemble"</span><span class="p">)</span> + <span class="n">list_of_pdb</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> + <span class="p">[</span><span class="n">foo</span> <span class="k">for</span> <span class="n">foo</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">,</span> <span class="s2">"*.pdb"</span><span class="p">))</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">foo</span><span class="p">)</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'fitted_'</span><span class="p">)])</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Lists of structures:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">_</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">list_of_pdb</span><span class="p">]))</span> + <span class="k">return</span> <span class="n">list_of_pdb</span> + +<div class="viewcode-block" id="EnsembleAnalysis.violation_analysis"><a class="viewcode-back" href="../../ariaec.html#ariaec.analysis.EnsembleAnalysis.violation_analysis">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">violation_analysis</span><span class="p">(</span><span class="n">project</span><span class="p">,</span> <span class="n">iteration_id</span><span class="p">,</span> <span class="n">restraints</span><span class="p">,</span> <span class="n">ensemble</span><span class="p">,</span> <span class="n">out_file</span><span class="p">,</span> + <span class="n">dists_ref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">headerflag</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">clusteridx</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> clusteridx</span> +<span class="sd"> project : aria.Project.Project object</span> +<span class="sd"> iteration_id : </span> +<span class="sd"> restraints :</span> +<span class="sd"> </span> +<span class="sd"> ensemble :</span> +<span class="sd"> </span> +<span class="sd"> out_file :</span> +<span class="sd"> </span> +<span class="sd"> dists_ref : </span> +<span class="sd"> Reference distances (Default value = None)</span> +<span class="sd"> headerflag :</span> +<span class="sd"> (Default value = True)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">protein_id</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="n">getSettings</span><span class="p">()[</span><span class="s1">'name'</span><span class="p">]</span> + <span class="n">nbest</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="n">getProtocol</span><span class="p">()</span><span class="o">.</span><span class="n">getIterationSettings</span><span class="p">(</span><span class="n">iteration_id</span><span class="p">)[</span> + <span class="s2">"number_of_best_structures"</span><span class="p">]</span> + <span class="n">cutoff</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="n">getProtocol</span><span class="p">()</span><span class="o">.</span><span class="n">getIterationSettings</span><span class="p">(</span><span class="n">iteration_id</span><span class="p">)[</span> + <span class="s2">"violation_analyser_settings"</span><span class="p">][</span><span class="s2">"violation_tolerance"</span><span class="p">]</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">out_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">if</span> <span class="n">headerflag</span> <span class="k">else</span> <span class="nb">open</span><span class="p">(</span><span class="n">out_file</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">)</span> <span class="k">as</span> <span class="n">out</span><span class="p">:</span> + + <span class="k">for</span> <span class="n">restraintlist</span> <span class="ow">in</span> <span class="n">restraints</span><span class="p">:</span> + + <span class="k">for</span> <span class="n">rest</span> <span class="ow">in</span> <span class="n">restraintlist</span><span class="p">:</span> + + <span class="n">output</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">dd</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">ddref</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="k">for</span> <span class="n">contrib</span> <span class="ow">in</span> <span class="n">rest</span><span class="o">.</span><span class="n">getContributions</span><span class="p">():</span> + + <span class="n">dist</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">dist</span> <span class="o">=</span> <span class="p">[</span><span class="n">ensemble</span><span class="o">.</span><span class="n">getDistances</span><span class="p">(</span><span class="o">*</span><span class="n">sp</span><span class="o">.</span><span class="n">getAtoms</span><span class="p">())</span> + <span class="k">for</span> <span class="n">sp</span> <span class="ow">in</span> <span class="n">contrib</span><span class="p">]</span> + <span class="c1"># Liste des distances pour la contribution c pour</span> + <span class="c1"># chaque structure de l'ensemble (une ou plusieur</span> + <span class="c1"># distance(s) par structure de l'ensemble si contribution</span> + <span class="c1"># ambigue ou non)</span> + <span class="n">dist</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span> + <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">dist</span><span class="p">,</span> <span class="o">-</span> <span class="mf">6.</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mf">1.</span> <span class="o">/</span> <span class="mi">6</span><span class="p">)</span> + <span class="c1"># Liste des distances pour chaque structure de l'ensemble</span> + <span class="c1"># (liste associant une distance par structure de l'ensemble).</span> + <span class="c1"># Si contrib non ambig (associee a une seule paire de spins),</span> + <span class="c1"># cette liste devrait etre identique a la precedente</span> + <span class="n">dd</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> + + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">msg</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="ne">Exception</span><span class="p">,</span> <span class="n">msg</span><span class="p">))</span> + <span class="k">pass</span> + + <span class="n">dref</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">dists_ref</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">dref</span> <span class="o">=</span> <span class="p">[</span><span class="n">dists_ref</span><span class="p">(</span><span class="o">*</span><span class="n">sp</span><span class="o">.</span><span class="n">getAtoms</span><span class="p">())</span> <span class="k">for</span> <span class="n">sp</span> <span class="ow">in</span> <span class="n">contrib</span><span class="p">]</span> + <span class="n">dref</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">dref</span><span class="p">,</span> <span class="o">-</span><span class="mf">6.</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">),</span> + <span class="o">-</span><span class="mf">1.</span> <span class="o">/</span> <span class="mi">6</span><span class="p">)</span> + <span class="n">ddref</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dref</span><span class="p">)</span> + + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">msg</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="ne">Exception</span><span class="p">,</span> <span class="n">msg</span><span class="p">))</span> + <span class="k">pass</span> + + <span class="n">tmp</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'protein'</span><span class="p">]</span> <span class="o">=</span> <span class="n">protein_id</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'data'</span><span class="p">]</span> <span class="o">=</span> <span class="n">rest</span><span class="o">.</span><span class="n">getReferencePeak</span><span class="p">()</span><span class="o">.</span><span class="n">getSpectrum</span><span class="p">()</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'iteration'</span><span class="p">]</span> <span class="o">=</span> <span class="n">iteration_id</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'clust'</span><span class="p">]</span> <span class="o">=</span> <span class="n">clusteridx</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'ens_size'</span><span class="p">]</span> <span class="o">=</span> <span class="n">nbest</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'rest_no'</span><span class="p">]</span> <span class="o">=</span> <span class="n">rest</span><span class="o">.</span><span class="n">getId</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'contrib_no'</span><span class="p">]</span> <span class="o">=</span> <span class="n">contrib</span><span class="o">.</span><span class="n">getId</span><span class="p">()</span> + <span class="c1"># Assuming there is only one spin per contribution</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'resid_1'</span><span class="p">]</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getResidue</span><span class="p">()</span><span class="o">.</span><span class="n">getNumber</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'resid_2'</span><span class="p">]</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getResidue</span><span class="p">()</span><span class="o">.</span><span class="n">getNumber</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'res_1'</span><span class="p">]</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getResidue</span><span class="p">()</span><span class="o">.</span><span class="n">getName</span><span class="p">()[:</span><span class="mi">3</span><span class="p">]</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'res_2'</span><span class="p">]</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getResidue</span><span class="p">()</span><span class="o">.</span><span class="n">getName</span><span class="p">()[:</span><span class="mi">3</span><span class="p">]</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'atm_1'</span><span class="p">]</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'atm_2'</span><span class="p">]</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'viol_cutoff'</span><span class="p">]</span> <span class="o">=</span> <span class="n">cutoff</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'d_target'</span><span class="p">]</span> <span class="o">=</span> <span class="n">rest</span><span class="o">.</span><span class="n">getDistance</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'lower_bound'</span><span class="p">]</span> <span class="o">=</span> <span class="n">rest</span><span class="o">.</span><span class="n">getLowerBound</span><span class="p">()</span> <span class="o">-</span> <span class="n">cutoff</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'upper_bound'</span><span class="p">]</span> <span class="o">=</span> <span class="n">rest</span><span class="o">.</span><span class="n">getUpperBound</span><span class="p">()</span> <span class="o">+</span> <span class="n">cutoff</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'rest_weight'</span><span class="p">]</span> <span class="o">=</span> <span class="n">rest</span><span class="o">.</span><span class="n">getWeight</span><span class="p">()</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'dc_min'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> <span class="k">if</span> <span class="n">dist</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s1">''</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'dc_avg'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> <span class="k">if</span> <span class="n">dist</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s1">''</span> <span class="c1"># Moyenne des distances associes a la contrib c dans l'ensemble</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'dc_med'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">median</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> <span class="k">if</span> <span class="n">dist</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s1">''</span> + <span class="n">tmp</span><span class="p">[</span><span class="s1">'dc_ref'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">dref</span><span class="p">)</span> <span class="k">if</span> <span class="n">dref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s1">''</span> + + <span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tmp</span><span class="p">)</span> + + <span class="c1"># Liste des distances (effective si plusieurs spin par</span> + <span class="c1"># contribution) associe aux contraintes</span> + <span class="n">dd</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">dd</span><span class="p">)</span> + <span class="n">ddref</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">ddref</span><span class="p">)</span> <span class="c1"># Idem pour natif</span> + + <span class="n">dd_eff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">dd</span><span class="p">,</span> <span class="o">-</span><span class="mi">6</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mf">1.</span> <span class="o">/</span> <span class="mi">6</span><span class="p">)</span> + <span class="n">ddref_eff</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">ddref</span><span class="p">,</span> <span class="o">-</span><span class="mi">6</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mf">1.</span> <span class="o">/</span> <span class="mi">6</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">output</span><span class="p">)):</span> + <span class="c1"># Moyenne des distances effectives dans l'ensemble de</span> + <span class="c1"># structure. Peut etre biaisee si on a des structures qui</span> + <span class="c1"># ont une distance anormalement elevee. Dans ce cas, on ne</span> + <span class="c1"># peut evaluer si la contrainte a ete correctement supprimee</span> + <span class="c1"># dans l'ensemble etudie.</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'Deff_min'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">dd_eff</span><span class="p">)</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'Deff_avg'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">dd_eff</span><span class="p">)</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'Deff_med'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">median</span><span class="p">(</span><span class="n">dd_eff</span><span class="p">)</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'Deff_sdev'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">dd_eff</span><span class="p">)</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'Deff_ref'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">ddref_eff</span><span class="p">)</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'pc_viol'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span> + <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">greater</span><span class="p">(</span><span class="n">dd_eff</span><span class="p">,</span> <span class="n">rest</span><span class="o">.</span><span class="n">getUpperBound</span><span class="p">()</span> <span class="o">+</span> <span class="n">cutoff</span><span class="p">)))</span> <span class="o">/</span> <span class="n">nbest</span> + <span class="c1"># Normalement d_ref ne contient qu'un seul elt puisqu'il y a</span> + <span class="c1"># qu'une seule structure ( a verifier )</span> + <span class="c1"># distance effective native</span> + <span class="c1"># Distance effective minimum dans l'ensemble</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'viol'</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> \ + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'pc_viol'</span><span class="p">]</span> <span class="o">>=</span> <span class="mf">0.5</span> <span class="k">else</span> <span class="kc">False</span> + <span class="c1"># Contrainte consideree comme valide si la distance effective</span> + <span class="c1"># dans la structure de reference est en dessous du seuil de</span> + <span class="c1"># violations.</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'valid'</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> \ + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'upper_bound'</span><span class="p">]</span> <span class="o">>=</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'dc_ref'</span><span class="p">]</span> <span class="o">>=</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'lower_bound'</span><span class="p">]</span> <span class="k">else</span> <span class="kc">False</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'contact_5'</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> \ + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'dc_ref'</span><span class="p">]</span> <span class="o"><=</span> <span class="mf">5.0</span> <span class="k">else</span> <span class="kc">False</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'contact_8'</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> \ + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'dc_ref'</span><span class="p">]</span> <span class="o"><=</span> <span class="mf">8.0</span> <span class="k">else</span> <span class="kc">False</span> + + <span class="k">if</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'contact_8'</span><span class="p">]</span> <span class="ow">and</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'viol'</span><span class="p">]:</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'group'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'VP viol'</span> + <span class="k">elif</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'contact_8'</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'viol'</span><span class="p">]:</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'group'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'VP'</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'contact_8'</span><span class="p">]</span> <span class="ow">and</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'viol'</span><span class="p">]:</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'group'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'FP viol'</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s1">'group'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'FP'</span> + + <span class="k">if</span> <span class="n">headerflag</span><span class="p">:</span> + <span class="n">out</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">output</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> + <span class="n">headerflag</span> <span class="o">=</span> <span class="kc">False</span> + + <span class="n">out</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">k</span><span class="p">]</span> + <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">output</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()]))</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Writing violation analysis of clust </span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> file"</span><span class="p">,</span> <span class="n">clusteridx</span><span class="p">,</span> + <span class="n">out_file</span><span class="p">)</span></div> + + <span class="c1"># def extract_ariaensemble_matrix(self):</span> + <span class="c1"># """</span> + <span class="c1">#</span> + <span class="c1"># Returns</span> + <span class="c1"># -------</span> + <span class="c1">#</span> + <span class="c1"># """</span> + <span class="c1"># pass</span> + + <span class="c1"># TODO: As described in Guillaume paper, clustering on aligned CA</span> + <span class="c1"># coordinates highly depends on the efficiency of the alignment method</span> +<div class="viewcode-block" id="EnsembleAnalysis.pca_projection"><a class="viewcode-back" href="../../ariaec.html#ariaec.analysis.EnsembleAnalysis.pca_projection">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">pca_projection</span><span class="p">(</span> + <span class="n">ensemble</span><span class="p">,</span> <span class="n">molecule</span><span class="p">,</span> <span class="n">infos</span><span class="p">,</span> <span class="n">atmask</span><span class="o">=</span><span class="s2">"CA"</span><span class="p">,</span> + <span class="n">title</span><span class="o">=</span><span class="s2">"3D PCA projection on backbone coordinates"</span><span class="p">,</span> <span class="n">outfile</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> PCA projection of ensemble coordinates</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ensemble :</span> +<span class="sd"> molecule :</span> +<span class="sd"> infos</span> +<span class="sd"> atmask :</span> +<span class="sd"> (Default value = "CA")</span> +<span class="sd"> title</span> +<span class="sd"> outfile</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">sns</span><span class="o">.</span><span class="n">set_style</span><span class="p">(</span><span class="s1">'ticks'</span><span class="p">)</span> + <span class="n">pca</span> <span class="o">=</span> <span class="n">PCA</span><span class="p">(</span><span class="n">n_components</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span> + <span class="n">mask</span> <span class="o">=</span> <span class="p">[</span><span class="n">a</span><span class="o">.</span><span class="n">getId</span><span class="p">()</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">molecule</span><span class="o">.</span><span class="n">get_chains</span><span class="p">()</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">getResidues</span><span class="p">()</span> + <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">getAtoms</span><span class="p">()</span> <span class="k">if</span> <span class="n">a</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> <span class="o">==</span> <span class="n">atmask</span><span class="p">]</span> + + <span class="c1"># Align all structures on ca backbone</span> + <span class="n">si</span> <span class="o">=</span> <span class="n">SuperImposer</span><span class="p">(</span><span class="n">ensemble</span><span class="p">,</span> <span class="n">molecule</span><span class="p">)</span> + <span class="n">si</span><span class="o">.</span><span class="n">getSettings</span><span class="p">()[</span><span class="s1">'number_of_best_structures'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'all'</span> + <span class="n">si</span><span class="o">.</span><span class="n">_fit</span><span class="p">(</span><span class="n">mask</span><span class="p">)</span> + + <span class="c1"># Get matrix of coordinates</span> + <span class="n">fitcoords</span> <span class="o">=</span> <span class="n">si</span><span class="o">.</span><span class="n">getFittedCoordinates</span><span class="p">()</span> + <span class="n">fitcoords</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">take</span><span class="p">(</span><span class="n">fitcoords</span><span class="p">,</span> <span class="n">mask</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">ns</span><span class="p">,</span> <span class="n">na</span><span class="p">,</span> <span class="n">xyz</span> <span class="o">=</span> <span class="n">fitcoords</span><span class="o">.</span><span class="n">shape</span> + <span class="c1"># Change the shape of coords matrix in order to use pca, kmeans, ...</span> + <span class="n">fitcoords</span><span class="o">.</span><span class="n">shape</span> <span class="o">=</span> <span class="n">ns</span><span class="p">,</span> <span class="n">na</span> <span class="o">*</span> <span class="n">xyz</span> + + <span class="n">ensemble</span><span class="o">.</span><span class="n">getSettings</span><span class="p">()[</span><span class="s1">'number_of_best_structures'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">15</span> + + <span class="n">fitcoords_reduced</span> <span class="o">=</span> <span class="n">pca</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">fitcoords</span><span class="p">)</span> + + <span class="c1">#</span> + <span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span> + + <span class="n">ax</span> <span class="o">=</span> <span class="n">Axes3D</span><span class="p">(</span><span class="n">fig</span><span class="p">)</span> + + <span class="n">colscatter</span><span class="p">(</span> + <span class="n">fitcoords_reduced</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">infos</span><span class="p">,</span> <span class="n">ndim</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">axtitle</span><span class="o">=</span><span class="n">title</span><span class="p">,</span> + <span class="n">xlabel</span><span class="o">=</span><span class="s2">"Principal component 1"</span><span class="p">,</span> <span class="n">ylabel</span><span class="o">=</span><span class="s2">"Principal component 2"</span><span class="p">,</span> + <span class="n">zlabel</span><span class="o">=</span><span class="s2">"Principal component 3"</span><span class="p">,</span> <span class="n">legend_prefix</span><span class="o">=</span><span class="s2">"Clust "</span><span class="p">)</span> + <span class="k">if</span> <span class="n">outfile</span><span class="p">:</span> + <span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">outfile</span><span class="p">)</span></div> + +<div class="viewcode-block" id="EnsembleAnalysis.run"><a class="viewcode-back" href="../../ariaec.html#ariaec.analysis.EnsembleAnalysis.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Execute Ensemble analysis"""</span> + <span class="c1"># Args</span> + <span class="n">project_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"project"</span><span class="p">]</span> + <span class="c1"># restraints_path = self.settings.analysis.args["restraints"]</span> + <span class="n">native_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ref"</span><span class="p">)</span> + <span class="n">out_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">]</span> + <span class="n">list_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"listname"</span><span class="p">]</span> + + <span class="c1"># Create Aria objects</span> + <span class="n">pickler</span> <span class="o">=</span> <span class="n">AriaXMLPickler</span><span class="p">()</span> + <span class="n">project</span> <span class="o">=</span> <span class="n">pickler</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">project_path</span><span class="p">)</span> + <span class="n">molecule_path</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="n">getData</span><span class="p">(</span><span class="n">DATA_SEQUENCE</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getLocation</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">molecule</span> <span class="o">=</span> <span class="n">pickler</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">molecule_path</span><span class="p">)</span> + + <span class="c1"># If we are at the first iteration, we select the related ensemble and</span> + <span class="c1"># restraints, otherwise we take the ensemble from the previous iteration</span> + <span class="n">iteration_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"iteration"</span><span class="p">]</span> + <span class="n">iteration_id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span> + <span class="s1">'[0-9]+'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">))</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> + <span class="k">if</span> <span class="n">iteration_id</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> + <span class="c1"># If we are not at the first iteration, we select analysis</span> + <span class="c1"># parameters related to user input iteration and update iteration</span> + <span class="c1"># path in order to get ensemble of structures from previous</span> + <span class="c1"># iteration</span> + <span class="n">iteration_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">),</span> <span class="s2">"it</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">iteration_id</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Ensemble analysis will be done on restraints and "</span> + <span class="s2">"ensemble from it</span><span class="si">%d</span><span class="s2"> with violation criteria of it</span><span class="si">%d</span><span class="s2">"</span><span class="p">,</span> + <span class="p">(</span><span class="n">iteration_id</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span> <span class="n">iteration_id</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Can not found previous iteration (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">iteration_path</span><span class="p">)</span> + + <span class="c1"># Load restraints related to the actual iteration</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Reading distance restraints file(s)"</span><span class="p">)</span> + <span class="c1"># restraints = glob(os.path.join(iteration_path, '*restraints.xml')) if\</span> + <span class="c1"># not self.settings.analysis.args.get('restraint') else \</span> + <span class="c1"># [self.settings.analysis.args.get('restraint')]</span> + <span class="c1"># if not restraints:</span> + <span class="c1"># # Load tbl restraints and convert them into aria xml format</span> + <span class="n">restraints</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">,</span> <span class="s1">'*.tbl'</span><span class="p">))</span> + <span class="n">restraints</span> <span class="o">=</span> <span class="n">AriaEcXMLConverter</span><span class="o">.</span><span class="n">tbl2xml</span><span class="p">(</span> + <span class="n">iteration_path</span><span class="p">,</span> <span class="n">molecule_path</span><span class="p">,</span> <span class="n">restraints</span><span class="p">,</span> <span class="n">list_name</span><span class="p">)</span> + <span class="n">restraints</span> <span class="o">=</span> <span class="p">[</span><span class="n">pickler</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">restraint</span><span class="p">)</span><span class="o">.</span><span class="n">restraint</span> + <span class="k">for</span> <span class="n">restraint</span> <span class="ow">in</span> <span class="n">restraints</span><span class="p">]</span> + + <span class="c1"># Read structure ensembles</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Reading structure ensemble(s)"</span><span class="p">)</span> + + <span class="c1"># Load ensemble parameters</span> + <span class="n">protein_id</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="n">getSettings</span><span class="p">()[</span><span class="s1">'name'</span><span class="p">]</span> + <span class="n">nbest</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="n">getProtocol</span><span class="p">()</span><span class="o">.</span><span class="n">getIterationSettings</span><span class="p">(</span><span class="n">iteration_id</span><span class="p">)[</span> + <span class="s2">"number_of_best_structures"</span><span class="p">]</span> + <span class="n">sort_crit</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="n">getProtocol</span><span class="p">()</span><span class="o">.</span><span class="n">getIterationSettings</span><span class="p">(</span><span class="n">iteration_id</span><span class="p">)[</span> + <span class="s2">"sort_criterion"</span><span class="p">]</span> + <span class="n">se_settings</span> <span class="o">=</span> <span class="n">StructureEnsembleSettings</span><span class="p">()</span> + <span class="n">se_settings</span><span class="p">[</span><span class="s1">'sort_criterion'</span><span class="p">]</span> <span class="o">=</span> <span class="n">sort_crit</span> + <span class="n">se_settings</span><span class="p">[</span><span class="s1">'number_of_best_structures'</span><span class="p">]</span> <span class="o">=</span> <span class="n">nbest</span> + + <span class="c1"># Get list of pdb related to structure ensemble(s)</span> + <span class="n">ens_paths</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_ensemble_paths</span><span class="p">(</span><span class="n">iteration_path</span><span class="p">)</span> + + <span class="k">with</span> <span class="n">Capturing</span><span class="p">()</span> <span class="k">as</span> <span class="n">output</span><span class="p">:</span> + <span class="c1"># We define here as many structure ensemble object as number of</span> + <span class="c1"># list in ens_paths (if clustering used)</span> + <span class="n">clustensembles</span> <span class="o">=</span> <span class="p">[</span> + <span class="n">StructureEnsemble</span><span class="p">(</span><span class="n">se_settings</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">ens_paths</span><span class="p">]</span> + <span class="p">[</span><span class="n">ensemble</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">ens_paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">molecule</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s1">'cns'</span><span class="p">)</span> + <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">ensemble</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">clustensembles</span><span class="p">)]</span> + <span class="p">[</span><span class="n">ensemble</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> + <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">ensemble</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">clustensembles</span><span class="p">)]</span> + <span class="k">if</span> <span class="n">output</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> + + <span class="c1"># Get the lowest energy ensemble</span> + <span class="c1"># LOG.info("Sorting structure ensemble(s) with %s criteria", sort_crit)</span> + <span class="c1"># energies = np.array([</span> + <span class="c1"># np.mean([d['total_energy'] for d in ens.getInfo()[:, 1]][:nbest])</span> + <span class="c1"># if len(ens) >= nbest else None for ens in clustensembles],</span> + <span class="c1"># dtype=np.float)</span> + + <span class="c1"># Get native structure</span> + <span class="c1"># Issue with several pdb files which have the same residue_number in</span> + <span class="c1"># atm and hetatm sections ... We remove them with bio pdb</span> + <span class="n">dists_ref</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">native_path</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Reading native structure"</span><span class="p">)</span> + <span class="n">logging</span><span class="o">.</span><span class="n">captureWarnings</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span> + <span class="n">native</span> <span class="o">=</span> <span class="n">PDBParser</span><span class="p">()</span><span class="o">.</span><span class="n">get_structure</span><span class="p">(</span><span class="n">protein_id</span><span class="p">,</span> <span class="n">native_path</span><span class="p">)</span> + <span class="n">native_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">out_path</span><span class="p">,</span> <span class="n">protein_id</span> <span class="o">+</span> <span class="s2">"_ordered.native.pdb"</span><span class="p">)</span> + <span class="n">io</span> <span class="o">=</span> <span class="n">PDBIO</span><span class="p">()</span> + <span class="n">io</span><span class="o">.</span><span class="n">set_structure</span><span class="p">(</span><span class="n">native</span><span class="p">)</span> + <span class="n">io</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">native_path</span><span class="p">,</span> <span class="n">select</span><span class="o">=</span><span class="n">NotDisordered</span><span class="p">())</span> + + <span class="n">native</span> <span class="o">=</span> <span class="n">StructureEnsemble</span><span class="p">(</span><span class="n">se_settings</span><span class="p">)</span> + <span class="n">native</span><span class="o">.</span><span class="n">display_warnings</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">native</span><span class="o">.</span><span class="n">read</span><span class="p">([</span><span class="n">native_path</span><span class="p">],</span> <span class="n">molecule</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s1">'cns'</span><span class="p">)</span> + + <span class="n">dists_ref</span> <span class="o">=</span> <span class="n">native</span><span class="o">.</span><span class="n">getDistances</span> + + <span class="c1"># We get here the distance of 'number_of_best_structures' in the</span> + <span class="c1"># ensemble</span> + <span class="c1"># ens_getdists = ensemble.getDistances</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Violation analysis"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">clustidx</span><span class="p">,</span> <span class="n">clustensemble</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">clustensembles</span><span class="p">):</span> + <span class="n">out_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">out_path</span><span class="p">,</span> <span class="s1">'violations.csv'</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">violation_analysis</span><span class="p">(</span><span class="n">project</span><span class="p">,</span> <span class="n">iteration_id</span><span class="p">,</span> <span class="n">restraints</span><span class="p">,</span> + <span class="n">clustensemble</span><span class="p">,</span> <span class="n">out_file</span><span class="p">,</span> + <span class="n">clusteridx</span><span class="o">=</span><span class="n">clustidx</span><span class="p">,</span> <span class="n">dists_ref</span><span class="o">=</span><span class="n">dists_ref</span><span class="p">,</span> + <span class="n">headerflag</span><span class="o">=</span><span class="kc">True</span> <span class="k">if</span> <span class="n">clustidx</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span> + + <span class="c1"># For the plotting part, we need a StructureEnsemble instance with all</span> + <span class="c1"># pdb files from the iteration</span> + + <span class="n">allensemble</span> <span class="o">=</span> <span class="n">StructureEnsemble</span><span class="p">(</span><span class="n">se_settings</span><span class="p">)</span> + <span class="n">allensemble</span><span class="o">.</span><span class="n">read</span><span class="p">(</span> + <span class="n">files</span><span class="o">=</span><span class="p">[</span><span class="n">pdbfile</span> <span class="k">for</span> <span class="n">se</span> <span class="ow">in</span> <span class="n">ens_paths</span> <span class="k">for</span> <span class="n">pdbfile</span> <span class="ow">in</span> <span class="n">se</span><span class="p">],</span> + <span class="n">molecule</span><span class="o">=</span><span class="n">molecule</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s1">'cns'</span><span class="p">)</span> + + <span class="n">infos</span> <span class="o">=</span> <span class="p">[</span><span class="n">inf</span> <span class="k">for</span> <span class="n">inf</span> <span class="ow">in</span> <span class="n">allensemble</span><span class="o">.</span><span class="n">getInfo</span><span class="p">()]</span> + <span class="p">[</span><span class="n">info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">'clust'</span><span class="p">:</span> <span class="n">idx</span><span class="p">})</span> <span class="k">for</span> <span class="n">info</span> <span class="ow">in</span> <span class="n">infos</span> <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">clustlist</span> <span class="ow">in</span> + <span class="nb">enumerate</span><span class="p">(</span><span class="n">ens_paths</span><span class="p">)</span> <span class="k">if</span> <span class="nb">filter</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="n">clustlist</span><span class="p">)]</span> + + <span class="c1"># Compute pca projection of cluster labels on all the</span> + <span class="c1"># generated structures. Add later an option to visualize extra</span> + <span class="c1"># information like RMSD, quality, ... with a csv file</span> + <span class="bp">self</span><span class="o">.</span><span class="n">pca_projection</span><span class="p">(</span> + <span class="n">allensemble</span><span class="p">,</span> <span class="n">molecule</span><span class="p">,</span> <span class="p">[</span><span class="n">info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'clust'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="k">for</span> <span class="n">info</span> <span class="ow">in</span> <span class="n">infos</span><span class="p">],</span> + <span class="n">atmask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"atmask"</span><span class="p">],</span> + <span class="n">title</span><span class="o">=</span><span class="s2">"3D PCA projection on </span><span class="si">%s</span><span class="s2"> backbone coordinates </span><span class="se">\n</span><span class="si">%s</span><span class="s2"> contacts"</span> + <span class="s2">" at iteration </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">protein_id</span><span class="p">,</span> <span class="n">list_name</span><span class="p">,</span> + <span class="nb">str</span><span class="p">(</span><span class="n">iteration_id</span><span class="p">)),</span> + <span class="n">outfile</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">out_path</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">_</span><span class="si">%s</span><span class="s2">_it</span><span class="si">%s</span><span class="s2">_clusts.3dpca.png"</span> <span class="o">%</span> + <span class="p">(</span><span class="n">protein_id</span><span class="p">,</span> <span class="n">list_name</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">iteration_id</span><span class="p">)))</span> + <span class="p">)</span></div></div> + + <span class="c1"># with open(os.path.join(iter_dir,</span> + <span class="c1"># "analysis/pyfit/accuracydssp/RMSD.dat")) as rmsdfile:</span> + <span class="c1"># accdssp = {key: float(value) for key, value in</span> + <span class="c1"># [line.split() for line in rmsdfile if</span> + <span class="c1"># re.search("pdb", line)]}</span> + + <span class="c1"># [info[1].update({'ensemble': False})</span> + <span class="c1"># for info in infos]</span> + <span class="c1"># [info[1].update({'ensemble': True})</span> + <span class="c1"># for info in infos</span> + <span class="c1"># for clustlist in [clustlist[0:15] for clustlist in clustlists] if</span> + <span class="c1"># filter(re.compile(info[0]).match, clustlist)]</span> + <span class="c1"># [info[1].update(</span> + <span class="c1"># {'accdssp': accdssp.get(os.path.basename(info[0]), None)})</span> + <span class="c1"># for info in infos]</span> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/base.html b/examples-dev/olds/_build/html/_modules/ariaec/base.html new file mode 100644 index 0000000..ab2ba1d --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/base.html @@ -0,0 +1,755 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.base — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.base</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.base</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Basic tools aria_ec</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">abc</span> <span class="k">import</span> <span class="n">ABCMeta</span><span class="p">,</span> <span class="n">abstractmethod</span> +<span class="kn">from</span> <span class="nn">Bio.PDB</span> <span class="k">import</span> <span class="n">Select</span> + +<span class="kn">import</span> <span class="nn">six</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">logging.config</span> +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">json</span> +<span class="kn">import</span> <span class="nn">re</span> +<span class="kn">import</span> <span class="nn">ast</span> +<span class="kn">import</span> <span class="nn">sys</span> +<span class="kn">import</span> <span class="nn">shutil</span> +<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">pkg_resources</span> <span class="k">as</span> <span class="nn">pkgr</span> +<span class="kn">import</span> <span class="nn">matplotlib.artist</span> <span class="k">as</span> <span class="nn">art</span> + + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="addtup"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.addtup">[docs]</a><span class="k">def</span> <span class="nf">addtup</span><span class="p">(</span><span class="n">tup</span><span class="p">,</span> <span class="n">inc</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Increment all values by 1 in a tuple</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> tup :</span> +<span class="sd"> param inc:</span> +<span class="sd"> inc :</span> +<span class="sd"> (Default value = 1)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="nb">tuple</span><span class="p">((</span><span class="n">val</span> <span class="o">+</span> <span class="n">inc</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">tup</span><span class="p">))</span></div> + + +<div class="viewcode-block" id="titleprint"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.titleprint">[docs]</a><span class="k">def</span> <span class="nf">titleprint</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">progname</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="s1">''</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Init log file</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> outfile :</span> +<span class="sd"> param progname: docstring</span> +<span class="sd"> desc :</span> +<span class="sd"> return: (Default value = '')</span> +<span class="sd"> progname :</span> +<span class="sd"> (Default value = '')</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">out</span> <span class="o">=</span> <span class="s1">'''</span> +<span class="s1">================================================================================</span> +<span class="si">{progname}</span><span class="s1"></span> +<span class="s1"> </span><span class="si">{desc}</span><span class="s1"></span> +<span class="s1">================================================================================</span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">progname</span><span class="o">=</span><span class="n">progname</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="o">.</span><span class="n">capitalize</span><span class="p">())</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">out</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span></div> + + +<div class="viewcode-block" id="get_filename"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.get_filename">[docs]</a><span class="k">def</span> <span class="nf">get_filename</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Search filename in the given path</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> path :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="s2">"_"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"."</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span></div> + + +<div class="viewcode-block" id="reg_load"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.reg_load">[docs]</a><span class="k">def</span> <span class="nf">reg_load</span><span class="p">(</span><span class="n">regex</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> regex :</span> +<span class="sd"> param filepath:</span> +<span class="sd"> sort :</span> +<span class="sd"> return: (Default value = None)</span> +<span class="sd"> filepath :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + + <span class="n">lines_dict</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">infile</span><span class="p">:</span> + <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">infile</span><span class="p">):</span> + <span class="n">match</span> <span class="o">=</span> <span class="n">regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">match</span><span class="p">:</span> + <span class="n">lines_dict</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()</span> + + <span class="k">if</span> <span class="n">sort</span><span class="p">:</span> + <span class="n">lines_dict</span> <span class="o">=</span> <span class="n">sort_2dict</span><span class="p">(</span><span class="n">lines_dict</span><span class="p">,</span> <span class="n">sort</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">lines_dict</span></div> + + +<div class="viewcode-block" id="sort_2dict"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.sort_2dict">[docs]</a><span class="k">def</span> <span class="nf">sort_2dict</span><span class="p">(</span><span class="n">unsort_dict</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Sort 2d dict by key</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> reverse :</span> +<span class="sd"> param key: (Default value = True)</span> +<span class="sd"> unsort_dict :</span> +<span class="sd"> return: sorted dict</span> +<span class="sd"> key :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">sorted_index</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">unsort_dict</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">unsort_dict</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">key</span><span class="p">]),</span> + <span class="n">reverse</span><span class="o">=</span><span class="n">reverse</span><span class="p">)</span> + <span class="n">sorted_dict</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">for</span> <span class="n">rank</span><span class="p">,</span> <span class="n">ind</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sorted_index</span><span class="p">):</span> + <span class="n">sorted_dict</span><span class="p">[</span><span class="n">rank</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">unsort_dict</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> + + <span class="k">return</span> <span class="n">sorted_dict</span></div> + + +<div class="viewcode-block" id="cart_dist"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.cart_dist">[docs]</a><span class="k">def</span> <span class="nf">cart_dist</span><span class="p">(</span><span class="n">vectx</span><span class="p">,</span> <span class="n">vecty</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Evaluate cartesian distance beetween 2 points x, vecty</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> vectx :</span> +<span class="sd"> numpy array (len = n dimensions)</span> +<span class="sd"> vecty :</span> +<span class="sd"> numpy array (len = n dimensions)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">vectx</span> <span class="o">-</span> <span class="n">vecty</span><span class="p">,</span> <span class="mi">2</span><span class="p">)))</span></div> + + +<div class="viewcode-block" id="format_str"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.format_str">[docs]</a><span class="k">def</span> <span class="nf">format_str</span><span class="p">(</span><span class="n">string</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Convert str in bool, float, int or str</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> string :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^\s*(true)\s*$"</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">):</span> + <span class="k">return</span> <span class="kc">True</span> + <span class="k">elif</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^\s*(false)\s*$"</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">):</span> + <span class="k">return</span> <span class="kc">False</span> + <span class="k">elif</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^\s*\d+\s*$"</span><span class="p">,</span> <span class="n">string</span><span class="p">):</span> + <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^[\s\d-]+\.\d+\s*$"</span><span class="p">,</span> <span class="n">string</span><span class="p">):</span> + <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^".+"$'</span><span class="p">,</span> <span class="n">string</span><span class="p">):</span> + <span class="c1"># remove " characters</span> + <span class="k">return</span> <span class="n">string</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> + <span class="k">elif</span> <span class="s2">","</span> <span class="ow">in</span> <span class="n">string</span><span class="p">:</span> + <span class="k">return</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)</span> + <span class="k">elif</span> <span class="s2">"+"</span> <span class="ow">in</span> <span class="n">string</span><span class="p">:</span> + <span class="k">return</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'+'</span><span class="p">)</span> + <span class="k">elif</span> <span class="s2">"/"</span> <span class="ow">in</span> <span class="n">string</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">string</span><span class="p">):</span> + <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s2">"[/\w]+"</span><span class="p">,</span> <span class="n">string</span><span class="p">):</span> + <span class="k">return</span> <span class="n">string</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">string</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">ev_str</span> <span class="o">=</span> <span class="n">ast</span><span class="o">.</span><span class="n">literal_eval</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Don't understand given string </span><span class="si">%s</span><span class="s2">. Please check "</span> + <span class="s2">"format."</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="k">except</span> <span class="ne">SyntaxError</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Given string </span><span class="si">%s</span><span class="s2"> is not a valid expression"</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="k">return</span> <span class="n">ev_str</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="kc">None</span></div> + + +<div class="viewcode-block" id="format_dict"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.format_dict">[docs]</a><span class="k">def</span> <span class="nf">format_dict</span><span class="p">(</span><span class="n">indict</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> indict :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">indict</span><span class="p">:</span> + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">indict</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="nb">str</span><span class="p">):</span> + <span class="n">indict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">format_str</span><span class="p">(</span><span class="n">indict</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> + <span class="k">return</span> <span class="n">indict</span></div> + + +<div class="viewcode-block" id="ppdict"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.ppdict">[docs]</a><span class="k">def</span> <span class="nf">ppdict</span><span class="p">(</span><span class="n">indict</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> indict :</span> +<span class="sd"> param indent:</span> +<span class="sd"> indent :</span> +<span class="sd"> (Default value = 2)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">indict</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="n">indent</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="tickmin"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.tickmin">[docs]</a><span class="k">def</span> <span class="nf">tickmin</span><span class="p">(</span><span class="n">pandata</span><span class="p">,</span> <span class="n">ntick</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">shift</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Minimise number of ticks labels for matplotlib or seaborn plot</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> offset :</span> +<span class="sd"> param shift: (Default value = 5)</span> +<span class="sd"> pandata :</span> +<span class="sd"> pandas dataframe</span> +<span class="sd"> ntick :</span> +<span class="sd"> number of ticks wanted per axes (Default value = None)</span> +<span class="sd"> shift :</span> +<span class="sd"> (Default value = 0)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">yticks</span> <span class="o">=</span> <span class="p">[</span><span class="n">_</span> <span class="o">+</span> <span class="n">shift</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">pandata</span><span class="o">.</span><span class="n">index</span><span class="p">))]</span> + <span class="n">xticks</span> <span class="o">=</span> <span class="p">[</span><span class="n">_</span> <span class="o">+</span> <span class="n">shift</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">pandata</span><span class="o">.</span><span class="n">columns</span><span class="p">))]</span> + <span class="k">if</span> <span class="n">ntick</span><span class="p">:</span> + <span class="n">keptticks</span> <span class="o">=</span> <span class="n">yticks</span><span class="p">[::(</span><span class="nb">len</span><span class="p">(</span><span class="n">pandata</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">//</span> <span class="nb">int</span><span class="p">(</span><span class="n">ntick</span><span class="p">))]</span> + <span class="n">yticks</span> <span class="o">=</span> <span class="p">[</span><span class="n">_</span> <span class="k">if</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">keptticks</span> <span class="k">else</span> <span class="s1">''</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">yticks</span><span class="p">]</span> + <span class="c1"># If shift != 0, need to initialize first value of ticks</span> + + <span class="n">keptticks</span> <span class="o">=</span> <span class="n">xticks</span><span class="p">[::(</span><span class="nb">len</span><span class="p">(</span><span class="n">xticks</span><span class="p">)</span> <span class="o">//</span> <span class="nb">int</span><span class="p">(</span><span class="n">ntick</span><span class="p">))]</span> + <span class="n">xticks</span> <span class="o">=</span> <span class="p">[</span><span class="n">_</span> <span class="k">if</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">keptticks</span> <span class="k">else</span> <span class="s1">''</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">xticks</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">keptticks</span> <span class="o">=</span> <span class="p">[</span><span class="n">ytick</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">ytick</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">yticks</span><span class="p">)</span> + <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="n">shift</span><span class="p">)</span> <span class="o">%</span> <span class="n">offset</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]</span> + <span class="c1"># keptticks = yticks[::offset - shift]</span> + <span class="n">yticks</span> <span class="o">=</span> <span class="p">[</span><span class="n">_</span> <span class="k">if</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">keptticks</span> <span class="k">else</span> <span class="s1">''</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">yticks</span><span class="p">]</span> + <span class="c1"># If shift != 0, need to initialize first value of ticks</span> + + <span class="n">keptticks</span> <span class="o">=</span> <span class="p">[</span><span class="n">xtick</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">xtick</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">xticks</span><span class="p">)</span> + <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="n">shift</span><span class="p">)</span> <span class="o">%</span> <span class="n">offset</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]</span> + <span class="c1"># keptticks = xticks[::offset - shift]</span> + <span class="n">xticks</span> <span class="o">=</span> <span class="p">[</span><span class="n">_</span> <span class="k">if</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">keptticks</span> <span class="k">else</span> <span class="s1">''</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">xticks</span><span class="p">]</span> + <span class="k">return</span> <span class="n">xticks</span><span class="p">,</span> <span class="n">yticks</span></div> + + +<div class="viewcode-block" id="tickrot"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.tickrot">[docs]</a><span class="k">def</span> <span class="nf">tickrot</span><span class="p">(</span><span class="n">axes</span><span class="p">,</span> <span class="n">figure</span><span class="p">,</span> <span class="n">rotype</span><span class="o">=</span><span class="s1">'horizontal'</span><span class="p">,</span> <span class="n">xaxis</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">yaxis</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Matplot rotation of ticks labels</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> axes :</span> +<span class="sd"> param figure:</span> +<span class="sd"> rotype :</span> +<span class="sd"> param xaxis: (Default value = 'horizontal')</span> +<span class="sd"> yaxis :</span> +<span class="sd"> return: (Default value = True)</span> +<span class="sd"> figure :</span> +<span class="sd"> </span> +<span class="sd"> xaxis :</span> +<span class="sd"> (Default value = True)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="n">yaxis</span><span class="p">:</span> + <span class="n">art</span><span class="o">.</span><span class="n">setp</span><span class="p">(</span><span class="n">axes</span><span class="o">.</span><span class="n">get_yticklabels</span><span class="p">(),</span> <span class="n">rotation</span><span class="o">=</span><span class="n">rotype</span><span class="p">)</span> + <span class="k">if</span> <span class="n">xaxis</span><span class="p">:</span> + <span class="n">art</span><span class="o">.</span><span class="n">setp</span><span class="p">(</span><span class="n">axes</span><span class="o">.</span><span class="n">get_xticklabels</span><span class="p">(),</span> <span class="n">rotation</span><span class="o">=</span><span class="n">rotype</span><span class="p">)</span> + <span class="n">figure</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span></div> + + +<span class="c1"># TODO: Add another level when we use verbose options instead of displaying debug messages</span> +<div class="viewcode-block" id="CustomLogging"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.CustomLogging">[docs]</a><span class="k">class</span> <span class="nc">CustomLogging</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Customized python logging config</span> +<span class="sd"> """</span> + <span class="c1"># default_file = os.path.join(os.path.abspath(os.path.dirname(__file__)),</span> + <span class="c1"># "conf/logging.json")</span> + <span class="n">default_file</span> <span class="o">=</span> <span class="s2">"conf/logging.json"</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="vm">__doc__</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :param level:</span> +<span class="sd"> :param desc:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="c1"># TODO: detect path log filenames and makedirs if not exists</span> + <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">level</span><span class="p">)</span> + <span class="k">if</span> <span class="n">desc</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">desc</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="s2">""</span> + <span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_config</span><span class="p">()</span> + +<div class="viewcode-block" id="CustomLogging.update_msg"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.CustomLogging.update_msg">[docs]</a> <span class="k">def</span> <span class="nf">update_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">desc</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">+=</span> <span class="n">desc</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="s2">" - "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span> + <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="s2">" - "</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">desc</span><span class="o">.</span><span class="n">capitalize</span><span class="p">()))</span></div> + +<div class="viewcode-block" id="CustomLogging.default_config"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.CustomLogging.default_config">[docs]</a> <span class="k">def</span> <span class="nf">default_config</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="c1"># with open(self.default_file, 'rt') as f:</span> + <span class="n">conf</span> <span class="o">=</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_stream</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_file</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span> + <span class="n">config</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">conf</span><span class="p">)</span> + <span class="n">logging</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">dictConfig</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> + <span class="k">return</span> <span class="n">config</span></div> + +<div class="viewcode-block" id="CustomLogging.set_outdir"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.CustomLogging.set_outdir">[docs]</a> <span class="k">def</span> <span class="nf">set_outdir</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">outdir</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Create log directory and change log files location</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> outdir :</span> +<span class="sd"> path output directory</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">outdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">outdir</span><span class="p">,</span> + <span class="s2">"log"</span><span class="p">)</span> <span class="k">if</span> <span class="s2">"log"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">outdir</span> <span class="k">else</span> <span class="n">outdir</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">outdir</span><span class="p">)):</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">outdir</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Trick to avoid overwriting files with w mode after copy2 call</span> + <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">outdir</span><span class="p">))</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">outdir</span><span class="p">)</span> + <span class="k">if</span> <span class="n">outdir</span> <span class="ow">and</span> <span class="s2">"handlers"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span> + <span class="k">for</span> <span class="n">hand</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"handlers"</span><span class="p">]:</span> + <span class="k">if</span> <span class="s2">"filename"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"handlers"</span><span class="p">][</span><span class="n">hand</span><span class="p">]:</span> + <span class="n">oldpath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"handlers"</span><span class="p">][</span><span class="n">hand</span><span class="p">][</span><span class="s2">"filename"</span><span class="p">]</span> + <span class="n">newpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="n">outdir</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"handlers"</span><span class="p">][</span><span class="n">hand</span><span class="p">][</span><span class="s2">"filename"</span><span class="p">])))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"handlers"</span><span class="p">][</span><span class="n">hand</span><span class="p">][</span><span class="s2">"filename"</span><span class="p">]</span> <span class="o">=</span> <span class="n">newpath</span> + <span class="n">shutil</span><span class="o">.</span><span class="n">copy2</span><span class="p">(</span><span class="n">oldpath</span><span class="p">,</span> <span class="n">newpath</span><span class="p">)</span> + <span class="n">logging</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">dictConfig</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">)</span></div> + +<div class="viewcode-block" id="CustomLogging.welcome"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.CustomLogging.welcome">[docs]</a> <span class="k">def</span> <span class="nf">welcome</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="n">desc</span> <span class="o">=</span> <span class="s1">'''</span> +<span class="s1">================================================================================</span> + +<span class="si">{:^80}</span><span class="s1"></span> + +<span class="s1">================================================================================</span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span> + <span class="nb">print</span><span class="p">(</span><span class="n">desc</span><span class="p">)</span> + <span class="k">for</span> <span class="n">hand</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"handlers"</span><span class="p">):</span> + <span class="k">if</span> <span class="s2">"filename"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"handlers"</span><span class="p">][</span><span class="n">hand</span><span class="p">]:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"handlers"</span><span class="p">][</span><span class="n">hand</span><span class="p">][</span><span class="s2">"filename"</span><span class="p">],</span> + <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">outfile</span><span class="p">:</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">desc</span><span class="p">)</span></div></div> + + +<div class="viewcode-block" id="Capturing"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.Capturing">[docs]</a><span class="k">class</span> <span class="nc">Capturing</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span> + <span class="sd">"""Capture output"""</span> + <span class="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="c1"># Stock default stdout and redirect current stdout to this class</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_stdout</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_stderr</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> + <span class="c1"># All print calls are saved into self._stringio</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_stringio</span> <span class="o">=</span> <span class="n">six</span><span class="o">.</span><span class="n">moves</span><span class="o">.</span><span class="n">StringIO</span><span class="p">()</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stringio</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stringio</span> + <span class="k">return</span> <span class="bp">self</span> + + <span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> args</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stringio</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_stringio</span><span class="o">.</span><span class="n">truncate</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> + <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stringio</span> <span class="c1"># free up some memory</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stdout</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stderr</span></div> + + +<div class="viewcode-block" id="RedirectStdStreams"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.RedirectStdStreams">[docs]</a><span class="k">class</span> <span class="nc">RedirectStdStreams</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Redirect standard ouput and errors"""</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_stdout</span> <span class="o">=</span> <span class="n">stdout</span> <span class="ow">or</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_stderr</span> <span class="o">=</span> <span class="n">stderr</span> <span class="ow">or</span> <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> + + <span class="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">old_stdout</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">old_stderr</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> + <span class="bp">self</span><span class="o">.</span><span class="n">old_stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">old_stderr</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stdout</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_stderr</span> + <span class="k">return</span> <span class="bp">self</span> + + <span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_stderr</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">old_stdout</span> + <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">old_stderr</span></div> + + +<div class="viewcode-block" id="CommandProtocol"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.CommandProtocol">[docs]</a><span class="k">class</span> <span class="nc">CommandProtocol</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Abstract class for subcommand protocol"""</span> + <span class="n">__metaclass__</span> <span class="o">=</span> <span class="n">ABCMeta</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + + <span class="nd">@abstractmethod</span> +<div class="viewcode-block" id="CommandProtocol.run"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.CommandProtocol.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> main method to launch protocol</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div></div> + + +<div class="viewcode-block" id="NotDisordered"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.NotDisordered">[docs]</a><span class="k">class</span> <span class="nc">NotDisordered</span><span class="p">(</span><span class="n">Select</span><span class="p">):</span> + <span class="sd">"""Define an atom as disordered or not in pdb selection"""</span> +<div class="viewcode-block" id="NotDisordered.accept_atom"><a class="viewcode-back" href="../../ariaec.html#ariaec.base.NotDisordered.accept_atom">[docs]</a> <span class="k">def</span> <span class="nf">accept_atom</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">atom</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Accept or not the atom if it does not correspond to an alternative</span> +<span class="sd"> location</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> atom :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="ow">not</span> <span class="n">atom</span><span class="o">.</span><span class="n">is_disordered</span><span class="p">()</span> <span class="ow">or</span> <span class="n">atom</span><span class="o">.</span><span class="n">get_altloc</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'A'</span></div></div> + + +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> + <span class="c1"># Test Logger</span> + <span class="n">CustomLogging</span><span class="p">()</span><span class="o">.</span><span class="n">set_outdir</span><span class="p">(</span><span class="s2">"../examples/out"</span><span class="p">)</span> + <span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"TEST"</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="nb">dir</span><span class="p">(</span><span class="n">LOG</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Log test"</span><span class="p">)</span> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/commands.html b/examples-dev/olds/_build/html/_modules/ariaec/commands.html new file mode 100644 index 0000000..85ed35d --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/commands.html @@ -0,0 +1,752 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.commands — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.commands</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.commands</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Input/Output aria_ec</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> + +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">argparse</span> <span class="k">as</span> <span class="nn">argp</span> + +<span class="kn">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="vm">__doc__</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">format_dict</span><span class="p">,</span> <span class="n">CustomLogging</span> +<span class="kn">from</span> <span class="nn">.settings</span> <span class="k">import</span> <span class="n">AriaEcSettings</span> +<span class="kn">from</span> <span class="nn">.maplot</span> <span class="k">import</span> <span class="n">AriaEcContactMap</span> +<span class="kn">from</span> <span class="nn">.converter</span> <span class="k">import</span> <span class="n">AriaEcBbConverter</span><span class="p">,</span> <span class="n">AriaEcXMLConverter</span> +<span class="kn">from</span> <span class="nn">.setup</span> <span class="k">import</span> <span class="n">AriaEcSetup</span> +<span class="kn">from</span> <span class="nn">.pdbqual</span> <span class="k">import</span> <span class="n">AriaEcPdbqual</span> +<span class="kn">from</span> <span class="nn">.pdbdist</span> <span class="k">import</span> <span class="n">PDBDist</span> +<span class="kn">from</span> <span class="nn">.pdbstat</span> <span class="k">import</span> <span class="n">PDBStat</span> +<span class="kn">from</span> <span class="nn">.analysis</span> <span class="k">import</span> <span class="n">EnsembleAnalysis</span> + + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="check_file"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.check_file">[docs]</a><span class="k">def</span> <span class="nf">check_file</span><span class="p">(</span><span class="n">prospective_file</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> prospective_file :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Checking if </span><span class="si">%s</span><span class="s2"> is a readable file"</span><span class="p">,</span> <span class="n">prospective_file</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">prospective_file</span><span class="p">):</span> + <span class="k">raise</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentTypeError</span><span class="p">(</span><span class="s2">"readable_file:'</span><span class="si">{0}</span><span class="s2">' is not a valid "</span> + <span class="s2">"path"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">prospective_file</span><span class="p">))</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">prospective_file</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">R_OK</span><span class="p">):</span> + <span class="k">raise</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentTypeError</span><span class="p">(</span><span class="s2">"readable_file:'</span><span class="si">{0}</span><span class="s2">' is not a readable "</span> + <span class="s2">"file"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">prospective_file</span><span class="p">))</span></div> + + +<div class="viewcode-block" id="ReadableFile"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.ReadableFile">[docs]</a><span class="k">class</span> <span class="nc">ReadableFile</span><span class="p">(</span><span class="n">argp</span><span class="o">.</span><span class="n">Action</span><span class="p">):</span> + <span class="sd">"""Class used with argparse action to check if a file is readable"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">ReadableFile</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">option_string</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> + <span class="k">for</span> <span class="n">prospective_file</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span> + <span class="n">check_file</span><span class="p">(</span><span class="n">prospective_file</span><span class="p">)</span> + <span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> + <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">values</span><span class="p">])</span> + <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> + <span class="n">check_file</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> + <span class="nb">setattr</span><span class="p">(</span><span class="n">namespace</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dest</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">values</span><span class="p">)))</span></div> + + +<span class="c1"># TODO: Make parent Command class with _create_argparser, self.args,</span> +<span class="c1"># update_logger and run</span> +<div class="viewcode-block" id="AriaEcCommands"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands">[docs]</a><span class="k">class</span> <span class="nc">AriaEcCommands</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Argparse interface for aria_ec"""</span> + + <span class="n">command_list</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"setup"</span><span class="p">,</span> <span class="s2">"bbconv"</span><span class="p">,</span> <span class="s2">"maplot"</span><span class="p">,</span> <span class="s2">"pdbqual"</span><span class="p">,</span> <span class="s2">"analysis"</span><span class="p">,</span> + <span class="s2">"tbl2xml"</span><span class="p">,</span> <span class="s2">"pdbdist"</span><span class="p">,</span> <span class="s2">"pdbstat"</span><span class="p">)</span> + <span class="n">desc_list</span> <span class="o">=</span> <span class="p">(</span><span class="sa">u</span><span class="s2">"Setup ARIA infrastructure with contact maps translated "</span> + <span class="sa">u</span><span class="s2">"into ARIA restraints"</span><span class="p">,</span> + <span class="sa">u</span><span class="s2">"Convert a contact map in bbcontact format"</span><span class="p">,</span> + <span class="sa">u</span><span class="s2">"Contactmap visualization tool"</span><span class="p">,</span> + <span class="sa">u</span><span class="s2">"Quality tool for pdb file(s)"</span><span class="p">,</span> + <span class="sa">u</span><span class="s2">"Extended ARIA ensemble analysis on a specific iteration "</span><span class="p">,</span> + <span class="sa">u</span><span class="s2">"XML converter for tbl distance restraint"</span><span class="p">,</span> + <span class="sa">u</span><span class="s2">"Extract distance distribution from culled list of pdb files"</span><span class="p">,</span> + <span class="sa">u</span><span class="s2">"Analyze distance distribution with GMM, ..."</span><span class="p">)</span> + <span class="n">contact_types</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"evfold"</span><span class="p">,</span> <span class="s2">"plmev"</span><span class="p">,</span> <span class="s2">"plm"</span><span class="p">,</span> <span class="s2">"plmdca"</span><span class="p">,</span> <span class="s2">"plmc"</span><span class="p">,</span> <span class="s2">"bbcontacts"</span><span class="p">,</span> + <span class="s2">"pconsc"</span><span class="p">,</span> <span class="s2">"pconsc1"</span><span class="p">,</span> <span class="s2">"pconsc2"</span><span class="p">,</span> <span class="s2">"psicov"</span><span class="p">,</span> <span class="s2">"metapsicovhb"</span><span class="p">,</span> + <span class="s2">"metapsicov_stg1"</span><span class="p">,</span> <span class="s2">"metapsicov_stg2"</span><span class="p">,</span> <span class="s2">"gremlin"</span><span class="p">,</span> <span class="s2">"pdb"</span><span class="p">,</span> + <span class="s2">"native"</span><span class="p">,</span> <span class="s2">"native_full"</span><span class="p">,</span> <span class="s2">"contactlist"</span><span class="p">)</span> + <span class="n">default_confile</span> <span class="o">=</span> <span class="s2">"conf/config.ini"</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">custom_logging</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="c1"># Def Argument pdbparser</span> + <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_argparser</span><span class="p">()</span> + <span class="c1"># parse args</span> + <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> + <span class="c1"># Update LOG with outdir</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_update_logger</span><span class="p">(</span><span class="n">custom_logging</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">_update_logger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">log</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> log :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="n">log</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">"output_directory"</span><span class="p">):</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">nolog</span><span class="p">:</span> + <span class="c1"># Don't generate log files</span> + <span class="c1"># TODO: get handler list from json file or customlogging object</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">removeHandler</span><span class="p">(</span><span class="s2">"info_file_handler"</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">removeHandler</span><span class="p">(</span><span class="s2">"error_file_handler"</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">removeHandler</span><span class="p">(</span><span class="s2">"debug_file_handler"</span><span class="p">)</span> + <span class="n">log</span><span class="o">.</span><span class="n">set_outdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">output_directory</span><span class="p">)</span> + <span class="n">log</span><span class="o">.</span><span class="n">update_msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">command</span><span class="p">)</span> + <span class="n">log</span><span class="o">.</span><span class="n">welcome</span><span class="p">()</span> + + <span class="k">def</span> <span class="nf">_create_argparser</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""" """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="vm">__doc__</span><span class="p">,</span> + <span class="n">formatter_class</span><span class="o">=</span><span class="n">argp</span><span class="o">.</span><span class="n">ArgumentDefaultsHelpFormatter</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-o"</span><span class="p">,</span> <span class="s2">"--output"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"output_directory"</span><span class="p">,</span> + <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Output directory"</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-c"</span><span class="p">,</span> <span class="s2">"--conf"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">dest</span><span class="o">=</span><span class="s2">"conf_file"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"configuration file"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--nolog"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Don't generate log files"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-d"</span><span class="p">,</span> <span class="s2">"--debug"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"verbose"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="s1">'store_true'</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Increase output verbosity"</span><span class="p">)</span> + <span class="c1"># Create subcommands</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_create_subparsers</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span><span class="n">dest</span><span class="o">=</span><span class="s2">"command"</span><span class="p">))</span> + <span class="k">return</span> <span class="n">parser</span> + + <span class="k">def</span> <span class="nf">_create_subparsers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Generate subcommands</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> parser :</span> +<span class="sd"> argparser object</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">command</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">command_list</span><span class="p">):</span> + <span class="c1"># Create subparser defined in command list</span> + <span class="n">subcommand</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_"</span> <span class="o">+</span> <span class="n">command</span> <span class="o">+</span> <span class="s2">"_argparser"</span><span class="p">)(</span> + <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc_list</span><span class="p">[</span><span class="n">index</span><span class="p">])</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">parents</span><span class="o">=</span><span class="p">[</span><span class="n">subcommand</span><span class="p">])</span> + + <span class="k">def</span> <span class="nf">_setup_argparser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> setup opt & args</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> command descriptor (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> + <span class="n">add_help</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="c1"># Options</span> + <span class="c1"># Args</span> + <span class="n">group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="s1">'required arguments'</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"sequence file [FASTA]"</span><span class="p">)</span> + <span class="c1"># group.add_argument("sspred", action=ReadableFile,</span> + <span class="c1"># help="secondary structure prediction file")</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"infiles"</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"infile"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"contact or pdb file(s) used to build aria "</span> + <span class="s2">"distance restraints"</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-d"</span><span class="p">,</span> <span class="s2">"--distfile"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"distfile"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Pdb or distance matrix iif distance_type "</span> + <span class="s2">"set to distfile in conf file, "</span> + <span class="s2">"use distances in the given file as "</span> + <span class="s2">"target distance to build distance "</span> + <span class="s2">"restraints"</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-s"</span><span class="p">,</span> <span class="s2">"--ssfile"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"sspred"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"secondary structure prediction file"</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-p"</span><span class="p">,</span> <span class="s2">"--ariaproject"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ariaproject"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"ARIA project file. This file will be used as"</span> + <span class="s2">"an initialization file if"</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"--type"</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">nargs</span><span class="o">=</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"contact_types"</span><span class="p">,</span> + <span class="n">choices</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">contact_types</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Infile(s) contact "</span> + <span class="s2">"type(s)"</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-r"</span><span class="p">,</span> <span class="s2">"--ref"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ref"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Native pdb. Allow TP/FP detection."</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--hb"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"hb"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"H-bonds contact file (eg: metapsicov.hb)"</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--ssidx"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ssidx"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Use secondary structure index"</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--no-filter"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"no_filter"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Do not filter contact map."</span><span class="p">)</span> + <span class="n">group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--extract-all"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"extractall"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Extract data or all data and"</span> + <span class="s2">"parameters if an ARIA project"</span> + <span class="s2">"is defined with -p option"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">parser</span> + + <span class="k">def</span> <span class="nf">_bbconv_argparser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> bbconv opt & args</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> command descriptor (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> + <span class="n">add_help</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="c1"># args</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"contactfile"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"contacts file (pconsc, plm)"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"sspred"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"psipred file"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"sequence file [FASTA]"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"msa"</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s1">'?'</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"MSA [FASTA] for diversityvalue"</span> + <span class="s2">"used with bbcontacts"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"--type"</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"contact_type"</span><span class="p">,</span> + <span class="n">choices</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">contact_types</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Infile contact "</span> + <span class="s2">"type"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">parser</span> + + <span class="k">def</span> <span class="nf">_maplot_argparser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> maplot opt & args</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> command descriptor (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> + <span class="n">add_help</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"sequence file [FASTA]"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"sspred"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"secondary structure prediction file"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"infiles"</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"infile"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"contact or pdb file(s) used to build aria "</span> + <span class="s2">"distance restraints"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"--type"</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">nargs</span><span class="o">=</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"contact_types"</span><span class="p">,</span> + <span class="n">choices</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">contact_types</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Infile(s) "</span> + <span class="s2">"contact "</span> + <span class="s2">"type(s)"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--merge"</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"merge"</span><span class="p">,</span> + <span class="n">choices</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">contact_types</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Merge given contact types with other maps"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--filter"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"filter"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Use contact list filter "</span> + <span class="s2">"and top n contacts selection"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--onlyreport"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"onlyreport"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Generate only report file"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--no-filter"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"no_filter"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"Do not filter contact map."</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--ssidx"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ssidx"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Use secondary structure index"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--prefix"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"prefix"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Generate prefix for file names"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">parser</span> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_pdbqual_argparser</span><span class="p">(</span><span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> + <span class="n">add_help</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"infiles"</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"infile"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"PDB file(s) used to run quality tools with "</span> + <span class="s2">"aria API"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">parser</span> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_analysis_argparser</span><span class="p">(</span><span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> + <span class="n">add_help</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"project"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"ARIA project file [XML]"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"iteration"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"iteration_path"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Iteration path used to run violation analysis"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span> + <span class="s2">"listname"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"list_name"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Name of restraint list analyzed in the tbl file"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-r"</span><span class="p">,</span> <span class="s2">"--ref"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ref"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Native pdb. Allow TP/FP detection."</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-d"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"restraint"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Distance restraint file (XML) used for "</span> + <span class="s2">"violation analysis. Otherwise, use restraints"</span> + <span class="s2">" of the current iteration"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">parser</span> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_tbl2xml_argparser</span><span class="p">(</span><span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> + <span class="n">add_help</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span> + <span class="s2">"molecule"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"molecule.xml"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"ARIA XML molecule file"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"listname"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"list_name"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Restraint list name in the tbl file"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"infiles"</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"infile.tbl"</span><span class="p">,</span> + <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"TBL distance restraint file(s)"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">parser</span> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_pdbdist_argparser</span><span class="p">(</span><span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> + <span class="n">add_help</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="c1"># TODO: find a way to list all cullpdb file in package ressources</span> + <span class="c1"># Maybe move this args to the config file</span> + + <span class="c1"># Culled pdb list are actually saved in data/cullpdb folder with yymmdd</span> + <span class="c1"># pattern as naming convention</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span> + <span class="s2">"--cullist"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"cullpdbs"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> + <span class="n">metavar</span><span class="o">=</span><span class="s2">"CULLED_PDB_LIST"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Culled list of pdb files from PISCES server ["</span> + <span class="s2">"G. Wang and R. L. Dunbrack, Jr. PISCES: a protein sequence "</span> + <span class="s2">"culling server. Bioinformatics, 19:1589-1591, 2003.]"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span> + <span class="s2">"--pdbdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"pdbdir"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> + <span class="n">metavar</span><span class="o">=</span><span class="s2">"PDB_FOLDER"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Folder containing pdb file entries"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">parser</span> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_pdbstat_argparser</span><span class="p">(</span><span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> desc :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="n">parser</span> <span class="o">=</span> <span class="n">argp</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> + <span class="n">add_help</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> + <span class="c1"># TODO: find a way to list all cullpdb file in package ressources</span> + <span class="c1"># Maybe move this args to the config file</span> + + <span class="c1"># Culled pdb list are actually saved in data/cullpdb folder with yymmdd</span> + <span class="c1"># pattern as naming convention</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span> + <span class="s2">"pdbdists"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="n">ReadableFile</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"PDB distance file in csv format"</span><span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span> + <span class="s2">"-j"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"njobs"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"N_JOBS"</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Number of cpus used to run mixture in parallel. By default,"</span> + <span class="s2">" use max of available cpus."</span> + <span class="p">)</span> + <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span> + <span class="s2">"--min"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"minflag"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> + <span class="n">help</span><span class="o">=</span><span class="s2">"Compute stats only on a minimized list of atom (CA, CB and 1 "</span> + <span class="s2">"SC)"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">parser</span> + +<div class="viewcode-block" id="AriaEcCommands.create_settings"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.create_settings">[docs]</a> <span class="k">def</span> <span class="nf">create_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Create settings relative to args.command"""</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Toggle on debug mode"</span><span class="p">)</span> + <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">()</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Create AriaEcSettings"</span><span class="p">)</span> + <span class="n">settings</span> <span class="o">=</span> <span class="n">AriaEcSettings</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">command</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Loading default config file"</span><span class="p">)</span> + <span class="n">settings</span><span class="o">.</span><span class="n">load_config</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">default_confile</span><span class="p">,</span> <span class="n">pkg</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">conf_file</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating settings with conf file"</span><span class="p">)</span> + <span class="n">settings</span><span class="o">.</span><span class="n">load_config</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">conf_file</span><span class="p">)</span> + <span class="c1"># Update settings associated to command section</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating </span><span class="si">%s</span><span class="s2"> args settings"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">command</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">)</span> + <span class="nb">getattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">command</span><span class="p">)</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">format_dict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">command</span><span class="p">)</span><span class="o">.</span><span class="n">args</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">output_directory</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating output directory </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">output_directory</span><span class="p">)</span> + <span class="n">settings</span><span class="o">.</span><span class="n">infra</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">output_directory</span> + <span class="k">return</span> <span class="n">settings</span></div> + +<div class="viewcode-block" id="AriaEcCommands.run"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""call method relative to args.command"""</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Run </span><span class="si">%s</span><span class="s2"> command"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">command</span><span class="p">)</span> + <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">command</span><span class="p">)()</span></div> + +<div class="viewcode-block" id="AriaEcCommands.setup"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.setup">[docs]</a> <span class="k">def</span> <span class="nf">setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Setup call"""</span> + <span class="n">setup_inst</span> <span class="o">=</span> <span class="n">AriaEcSetup</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_settings</span><span class="p">())</span> + <span class="n">setup_inst</span><span class="o">.</span><span class="n">run</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AriaEcCommands.bbconv"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.bbconv">[docs]</a> <span class="k">def</span> <span class="nf">bbconv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""bbcontacts converter call"""</span> + <span class="n">bbconverter</span> <span class="o">=</span> <span class="n">AriaEcBbConverter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_settings</span><span class="p">())</span> + <span class="n">bbconverter</span><span class="o">.</span><span class="n">run</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AriaEcCommands.maplot"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.maplot">[docs]</a> <span class="k">def</span> <span class="nf">maplot</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""instantiate AriaEcContactmap with AriaSettings"""</span> + <span class="n">econtactmap</span> <span class="o">=</span> <span class="n">AriaEcContactMap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_settings</span><span class="p">())</span> + <span class="n">econtactmap</span><span class="o">.</span><span class="n">run</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AriaEcCommands.pdbqual"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.pdbqual">[docs]</a> <span class="k">def</span> <span class="nf">pdbqual</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Quality run subcommand"""</span> + <span class="n">qualprot</span> <span class="o">=</span> <span class="n">AriaEcPdbqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_settings</span><span class="p">())</span> + <span class="n">qualprot</span><span class="o">.</span><span class="n">run</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AriaEcCommands.tbl2xml"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.tbl2xml">[docs]</a> <span class="k">def</span> <span class="nf">tbl2xml</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""tbl2xml command"""</span> + <span class="n">tblconverter</span> <span class="o">=</span> <span class="n">AriaEcXMLConverter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_settings</span><span class="p">())</span> + <span class="n">tblconverter</span><span class="o">.</span><span class="n">run_tbl2xml</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AriaEcCommands.pdbdist"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.pdbdist">[docs]</a> <span class="k">def</span> <span class="nf">pdbdist</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Extract pdb distance distributions"""</span> + <span class="n">inst</span> <span class="o">=</span> <span class="n">PDBDist</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_settings</span><span class="p">())</span> + <span class="n">inst</span><span class="o">.</span><span class="n">run</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AriaEcCommands.pdbstat"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.pdbstat">[docs]</a> <span class="k">def</span> <span class="nf">pdbstat</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Analyse pdb distance distribution"""</span> + <span class="n">inst</span> <span class="o">=</span> <span class="n">PDBStat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_settings</span><span class="p">())</span> + <span class="n">inst</span><span class="o">.</span><span class="n">run</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AriaEcCommands.analysis"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.AriaEcCommands.analysis">[docs]</a> <span class="k">def</span> <span class="nf">analysis</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Extended ensemble analysis of distance restraints"""</span> + <span class="n">inst</span> <span class="o">=</span> <span class="n">EnsembleAnalysis</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">create_settings</span><span class="p">())</span> + <span class="n">inst</span><span class="o">.</span><span class="n">run</span><span class="p">()</span></div></div> + + +<div class="viewcode-block" id="main"><a class="viewcode-back" href="../../ariaec.html#ariaec.commands.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span> + <span class="sd">"""Launch ariaec command interface"""</span> + + <span class="n">mylog</span> <span class="o">=</span> <span class="n">CustomLogging</span><span class="p">(</span><span class="n">desc</span><span class="o">=</span><span class="vm">__doc__</span><span class="p">)</span> + + <span class="n">command</span> <span class="o">=</span> <span class="n">AriaEcCommands</span><span class="p">(</span><span class="n">custom_logging</span><span class="o">=</span><span class="n">mylog</span><span class="p">)</span> + + <span class="n">command</span><span class="o">.</span><span class="n">run</span><span class="p">()</span></div> + + +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> + <span class="c1"># Test AriaEcCommand object</span> + <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span> + <span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"IO"</span><span class="p">)</span> + <span class="n">AriaEcCommands</span><span class="p">()</span> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/converter.html b/examples-dev/olds/_build/html/_modules/ariaec/converter.html new file mode 100644 index 0000000..f03804a --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/converter.html @@ -0,0 +1,2041 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.converter — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.converter</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.converter</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Input/Output aria_ec scripts</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> + +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">math</span> +<span class="kn">import</span> <span class="nn">random</span> +<span class="kn">import</span> <span class="nn">collections</span> +<span class="kn">import</span> <span class="nn">itertools</span> +<span class="kn">import</span> <span class="nn">datetime</span> +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">json</span> +<span class="kn">import</span> <span class="nn">re</span> +<span class="kn">import</span> <span class="nn">textwrap</span> +<span class="kn">import</span> <span class="nn">pickle</span> +<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span> +<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">pkg_resources</span> <span class="k">as</span> <span class="nn">pkgr</span> +<span class="kn">import</span> <span class="nn">aria.legacy.AminoAcid</span> <span class="k">as</span> <span class="nn">AminoAcid</span> +<span class="kn">from</span> <span class="nn">tqdm</span> <span class="k">import</span> <span class="n">tqdm</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">get_filename</span><span class="p">,</span> <span class="n">TqdmToLogger</span> +<span class="kn">from</span> <span class="nn">.protein</span> <span class="k">import</span> <span class="n">Protein</span> +<span class="kn">from</span> <span class="nn">.reader</span> <span class="k">import</span> <span class="n">MapFileListReader</span><span class="p">,</span> <span class="n">TblDistFile</span> +<span class="kn">from</span> <span class="nn">.protmap</span> <span class="k">import</span> <span class="p">(</span><span class="n">ResAtmMap</span><span class="p">,</span> <span class="n">ResMap</span><span class="p">,</span> <span class="n">SsAaAtmMap</span><span class="p">)</span> +<span class="kn">from</span> <span class="nn">mako.template</span> <span class="k">import</span> <span class="n">Template</span> +<span class="kn">from</span> <span class="nn">aria.Molecule</span> <span class="k">import</span> <span class="n">Molecule</span> +<span class="kn">from</span> <span class="nn">aria.tools</span> <span class="k">import</span> <span class="n">string_to_segid</span> +<span class="kn">from</span> <span class="nn">aria.AriaXML</span> <span class="k">import</span> <span class="n">AriaXMLPickler</span> +<span class="kn">from</span> <span class="nn">aria.PDBReader</span> <span class="k">import</span> <span class="n">PDBReader</span> +<span class="kn">from</span> <span class="nn">aria.ConversionTable</span> <span class="k">import</span> <span class="n">ConversionTable</span> +<span class="kn">from</span> <span class="nn">future.utils</span> <span class="k">import</span> <span class="n">iteritems</span> +<span class="kn">from</span> <span class="nn">aria.conversion</span> <span class="k">import</span> <span class="n">Converter</span><span class="p">,</span> <span class="n">SequenceList</span><span class="p">,</span> <span class="n">MoleculeSettings</span> +<span class="kn">from</span> <span class="nn">aria.DataContainer</span> <span class="k">import</span> <span class="n">DATA_TYPES</span><span class="p">,</span> <span class="n">DATA_SEQUENCE</span><span class="p">,</span> <span class="n">DATA_RDCS</span><span class="p">,</span> \ + <span class="n">DATA_ANNEALING_RDC</span> + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="AriaEcBbConverter"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcBbConverter">[docs]</a><span class="k">class</span> <span class="nc">AriaEcBbConverter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Bbcontacts convert main class"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> + <span class="c1"># TODO: check_type settings (AriaEcSettings)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span> <span class="o">=</span> <span class="n">Protein</span><span class="p">(</span><span class="n">settings</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">MapFileListReader</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">=</span> <span class="s1">''</span> + +<div class="viewcode-block" id="AriaEcBbConverter.run"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcBbConverter.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""BBConverter command"""</span> + <span class="c1"># Check input</span> + <span class="sd">"""</span> +<span class="sd"> main method</span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Settings:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">,</span> + <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Args:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> + <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> + <span class="c1"># TODO: redirect print output to logging ? (low priority)</span> + <span class="c1"># ----------------------------- Input -------------------------------- #</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">=</span> <span class="n">get_filename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> + <span class="kc">None</span><span class="p">))</span> + <span class="c1"># Load Sequence file</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">set_aa_sequence</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> + <span class="c1"># Load secondary structure prediction file</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">set_sec_struct</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sspred"</span><span class="p">,</span> + <span class="kc">None</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"contactfile"</span><span class="p">),</span> + <span class="n">maptypes</span><span class="o">=</span><span class="p">[</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"contact_type"</span><span class="p">)],</span> + <span class="n">protein</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> + <span class="n">groupby_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'groupby_method'</span><span class="p">],</span> + <span class="n">scsc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">)</span> + <span class="c1"># ---------------------------- Processing ---------------------------- #</span> + <span class="c1"># Convert contacts into couplingmatrix file (CCMPred format)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">maps</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">]</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span> + <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">.mat"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">),</span> + <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">"</span><span class="se">\t</span><span class="s2">"</span><span class="p">,</span> <span class="n">float_format</span><span class="o">=</span><span class="s2">"</span><span class="si">%13.10f</span><span class="s2">"</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'couplingmatrix'</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">.mat"</span> <span class="o">%</span> <span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">)</span> + <span class="c1"># Convert psipred format (fasta-like)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">write_ssfasta</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">.psipred"</span> <span class="o">%</span> <span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">),</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'psipredfile'</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">.psipred"</span> <span class="o">%</span> <span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">)</span> + <span class="c1"># Compute diversityvalue</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'diversityvalue'</span><span class="p">]</span> <span class="o">=</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">compute_diversityvalue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">bbconv</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"msa"</span><span class="p">),</span> + <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">))</span> + <span class="c1"># Generate .ini file with bbconv options (input args for bbcontacts)</span> + <span class="c1"># TODO: Generate with only bbconv option !</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">write_config</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">_bbconv.ini"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">))</span></div> + +<div class="viewcode-block" id="AriaEcBbConverter.compute_diversityvalue"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcBbConverter.compute_diversityvalue">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">compute_diversityvalue</span><span class="p">(</span><span class="n">msa</span><span class="p">,</span> <span class="n">seqlen</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Compute bbcontacts diversity value</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> msa : `str`</span> +<span class="sd"> multiple sequence alignment file path</span> +<span class="sd"> seqlen : `int`</span> +<span class="sd"> protein sequence length</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> diversity_score : `float`</span> +<span class="sd"> </span> + +<span class="sd"> Notes</span> +<span class="sd"> -----</span> +<span class="sd"> Diversity score correspond to the square root of the multiple</span> +<span class="sd"> sequence alignment length (:math:`m`) over the length of the protein</span> +<span class="sd"> sequence (:math:`l`)</span> +<span class="sd"> </span> +<span class="sd"> .. math:: Divscore = \frac{\sqrt{m}}{l}</span> +<span class="sd"> """</span> + <span class="n">msa_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^>[A-Za-z0-9]+_[A-Za-z0-9]+"</span><span class="p">)</span> + <span class="n">msalen</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">msa</span><span class="p">)</span> <span class="k">as</span> <span class="n">msafile</span><span class="p">:</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">msafile</span><span class="p">:</span> + <span class="n">match</span> <span class="o">=</span> <span class="n">msa_reg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="s2">"deselect"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span> + <span class="n">msalen</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">msalen</span><span class="p">)</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="n">seqlen</span><span class="p">)</span></div></div> + + +<div class="viewcode-block" id="AriaXMLConverter"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter">[docs]</a><span class="k">class</span> <span class="nc">AriaXMLConverter</span><span class="p">(</span><span class="n">Converter</span><span class="p">,</span> <span class="nb">object</span><span class="p">):</span> + <span class="sd">"""XML converter for aria files"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> + <span class="n">Converter</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span> <span class="o">=</span> <span class="n">MoleculeSettings</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_pickler</span> <span class="o">=</span> <span class="n">AriaXMLPickler</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_molecule</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_upflag</span> <span class="o">=</span> <span class="kc">False</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">=</span> <span class="s2">""</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + <span class="bp">self</span><span class="o">.</span><span class="n">structure</span> <span class="o">=</span> <span class="kc">None</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">molecule</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> aria.Molecule.Molecule object or None. If a structure has been loaded,</span> +<span class="sd"> use it to update the molecule</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">structure</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_molecule</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_upflag</span><span class="p">:</span> + <span class="c1"># update self._molecule with self.structure</span> + <span class="c1"># change value of self._upflag</span> + <span class="bp">self</span><span class="o">.</span><span class="n">upd_mol</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_molecule</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">structure</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_upflag</span> <span class="o">=</span> <span class="kc">True</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_molecule</span> + +<div class="viewcode-block" id="AriaXMLConverter.upd_mol"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.upd_mol">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">upd_mol</span><span class="p">(</span><span class="n">molecule</span><span class="p">,</span> <span class="n">structure</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Update molecule object according to pdb structure</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> molecule :</span> +<span class="sd"> </span> +<span class="sd"> structure :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Check if pdb structure is in the same format as molecule</span> + <span class="c1"># Loop over pdb structure and update/remove atoms in molecule chains (cf</span> + <span class="c1"># aria molecule and chain methods</span> + <span class="c1"># TODO</span> + <span class="k">pass</span></div> + +<div class="viewcode-block" id="AriaXMLConverter.read_seq"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.read_seq">[docs]</a> <span class="k">def</span> <span class="nf">read_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">seqpath</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Load aria Molecule object from seq file</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> seqpath :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'format'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'seq'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'input'</span><span class="p">]</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">seqpath</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'output'</span><span class="p">]</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="p">[</span><span class="s2">"xml"</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">+</span> <span class="s2">".xml"</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'PROTEIN'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'segid'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">' A'</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'first_residue_number'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'naming_convention'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> + + <span class="n">segids</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'segid'</span><span class="p">]</span> + <span class="n">segids</span> <span class="o">=</span> <span class="n">segids</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> + + <span class="n">segids</span> <span class="o">=</span> <span class="p">[</span><span class="n">string_to_segid</span><span class="p">(</span><span class="n">segid</span><span class="p">)</span> <span class="k">for</span> <span class="n">segid</span> <span class="ow">in</span> <span class="n">segids</span><span class="p">]</span> + <span class="c1"># Fetch molecule</span> + <span class="n">chain_types</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">for</span> <span class="n">segid</span> <span class="ow">in</span> <span class="n">segids</span><span class="p">:</span> + <span class="n">chain_types</span><span class="p">[</span><span class="n">segid</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span> + + <span class="n">sequence</span> <span class="o">=</span> <span class="n">SequenceList</span><span class="p">(</span><span class="n">chain_types</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'first_residue_number'</span><span class="p">])</span> + + <span class="c1"># with Capturing() as output:</span> + <span class="c1"># Initialize SequenceList object with seq file</span> + <span class="n">sequence</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'input'</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'format'</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'naming_convention'</span><span class="p">])</span> + + <span class="c1"># LOG.info("\n" + "".join(output))</span> + + <span class="c1"># Initialize aria Atom factory</span> + <span class="n">factory</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_factory</span><span class="p">()</span> + + <span class="n">factory</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span> + <span class="n">factory</span><span class="o">.</span><span class="n">unfreeze</span><span class="p">()</span> + + <span class="c1"># Create chains in SequenceList object with aria atom factory</span> + <span class="n">chains</span> <span class="o">=</span> <span class="n">sequence</span><span class="o">.</span><span class="n">create_chains</span><span class="p">(</span><span class="n">factory</span><span class="p">)</span> + + <span class="c1"># Instantiate aria molecule object</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_molecule</span> <span class="o">=</span> <span class="n">Molecule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'name'</span><span class="p">])</span> + <span class="k">for</span> <span class="n">segid</span> <span class="ow">in</span> <span class="n">segids</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">molecule</span><span class="o">.</span><span class="n">add_chain</span><span class="p">(</span><span class="n">chains</span><span class="p">[</span><span class="n">segid</span><span class="p">])</span></div> + +<div class="viewcode-block" id="AriaXMLConverter.read_pdb"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.read_pdb">[docs]</a> <span class="k">def</span> <span class="nf">read_pdb</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pdbpath</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pdbpath :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># read pdb file with aria pdb reader and load it in self.structure</span> + <span class="bp">self</span><span class="o">.</span><span class="n">structure</span> <span class="o">=</span> <span class="n">PDBReader</span><span class="p">()</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">pdbpath</span><span class="p">)</span></div> + +<div class="viewcode-block" id="AriaXMLConverter.write_xmlseq"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.write_xmlseq">[docs]</a> <span class="k">def</span> <span class="nf">write_xmlseq</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Use aria xml pickler to generate xml molecule file"""</span> + + <span class="k">try</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_pickler</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">molecule</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'output'</span><span class="p">])</span> + + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">msg</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">"Error for writing xml seq file </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'output'</span><span class="p">],</span> <span class="n">msg</span><span class="p">)</span> + <span class="k">raise</span> + + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mol_set</span><span class="p">[</span><span class="s1">'output'</span><span class="p">]</span></div> + +<div class="viewcode-block" id="AriaXMLConverter.deff"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.deff">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">deff</span><span class="p">(</span><span class="n">atm_dists</span><span class="p">,</span> <span class="n">dpow</span><span class="o">=</span><span class="mi">6</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Compute aria effective distance from input distances</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> atm_dists : list</span> +<span class="sd"> list of atm-atm distances</span> +<span class="sd"> dpow : int</span> +<span class="sd"> effective distance exponant (Default value = 6)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="nb">sum</span><span class="p">([</span><span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">dpow</span><span class="p">))</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> + <span class="n">atm_dists</span><span class="p">]),</span> <span class="o">-</span><span class="mi">1</span> <span class="o">/</span> <span class="mi">6</span><span class="p">)</span></div> + + <span class="c1"># TODO: should define distance restraints in a class, not a dict</span> + <span class="c1"># TODO: Use mako</span> +<div class="viewcode-block" id="AriaXMLConverter.write_dist_xml"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.write_dist_xml">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">write_dist_xml</span><span class="p">(</span><span class="n">dist_restraints</span><span class="p">,</span> <span class="n">outfile</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Write aria distance restraint xml file</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> dist_restraints :</span> +<span class="sd"> </span> +<span class="sd"> outfile :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">xml_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> + <span class="n">xml_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1"><!DOCTYPE distance_restraint_list SYSTEM "distance_restraint1.0.dtd"></span> +<span class="s1"><distance_restraint_list></span> +<span class="s1">'''</span><span class="p">)</span> + <span class="c1"># Pour chaque contrainte</span> + <span class="c1"># Pour chaque contribution</span> + <span class="k">for</span> <span class="n">restraint_id</span> <span class="ow">in</span> <span class="n">dist_restraints</span><span class="p">:</span> + <span class="n">restraint</span> <span class="o">=</span> <span class="p">{</span> + <span class="s1">'rest_id'</span><span class="p">:</span> <span class="n">restraint_id</span><span class="p">,</span> + <span class="s1">'rest_weight'</span><span class="p">:</span> <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"meta"</span><span class="p">][</span><span class="s2">"weight"</span><span class="p">],</span> + <span class="s1">'rest_dist'</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span> + <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"meta"</span><span class="p">][</span><span class="s2">"distance"</span><span class="p">]),</span> + <span class="s1">'lower_bound'</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span> + <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"meta"</span><span class="p">][</span><span class="s2">"lower_bound"</span><span class="p">]),</span> + <span class="s1">'upper_bound'</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span> + <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"meta"</span><span class="p">][</span><span class="s2">"upper_bound"</span><span class="p">]),</span> + <span class="s1">'reliable'</span><span class="p">:</span> <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"meta"</span><span class="p">][</span><span class="s2">"reliable"</span><span class="p">],</span> + <span class="s1">'list_name'</span><span class="p">:</span> <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"meta"</span><span class="p">][</span><span class="s2">"list_name"</span><span class="p">]</span> + <span class="p">}</span> + <span class="n">xml_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1"> <restraint id="</span><span class="si">{rest_id}</span><span class="s1">" weight="</span><span class="si">{rest_weight:.1f}</span><span class="s1">" distance="</span><span class="si">{rest_dist:.1f}</span><span class="s1">" </span><span class="se">\</span> +<span class="s1">lower_bound="</span><span class="si">{lower_bound:.1f}</span><span class="s1">" upper_bound="</span><span class="si">{upper_bound:.1f}</span><span class="s1">" active="1" </span><span class="se">\</span> +<span class="s1">reliable="</span><span class="si">{reliable}</span><span class="s1">" list_name="</span><span class="si">{list_name}</span><span class="s1">"></span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">restraint</span><span class="p">))</span> + <span class="k">for</span> <span class="n">contrib_id</span> <span class="ow">in</span> <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">]:</span> + <span class="n">res_id</span> <span class="o">=</span> <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">][</span><span class="n">contrib_id</span><span class="p">][</span> + <span class="s2">"spin_pair"</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> + <span class="c1"># TODO: Get segids from molecule file instead</span> + <span class="n">segids</span> <span class="o">=</span> <span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">][</span><span class="n">contrib_id</span><span class="p">][</span> + <span class="s2">"meta"</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"segids"</span><span class="p">)</span> + <span class="n">segid1</span> <span class="o">=</span> <span class="n">segids</span><span class="p">[</span><span class="n">res_id</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="k">if</span> <span class="n">segids</span> <span class="k">else</span> <span class="s2">" A"</span> + <span class="n">segid2</span> <span class="o">=</span> <span class="n">segids</span><span class="p">[</span><span class="n">res_id</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="k">if</span> <span class="n">segids</span> <span class="k">else</span> <span class="s2">" A"</span> + <span class="n">xml_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1"> <contribution id="</span><span class="si">{id}</span><span class="s1">" weight="</span><span class="si">{weight:.8f}</span><span class="s1">"></span> +<span class="s1"> <spin_pair></span> +<span class="s1"> <atom segid="</span><span class="si">{res1_segid}</span><span class="s1">" residue="</span><span class="si">{res1_pos}</span><span class="s1">" name="</span><span class="si">{atm1_name}</span><span class="s1">"/></span> +<span class="s1"> <atom segid="</span><span class="si">{res2_segid}</span><span class="s1">" residue="</span><span class="si">{res2_pos}</span><span class="s1">" name="</span><span class="si">{atm2_name}</span><span class="s1">"/></span> +<span class="s1"> </spin_pair></span> +<span class="s1"> </contribution></span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">contrib_id</span><span class="p">,</span> <span class="n">res1_segid</span><span class="o">=</span><span class="n">segid1</span><span class="p">,</span> <span class="n">res2_segid</span><span class="o">=</span><span class="n">segid2</span><span class="p">,</span> + <span class="n">weight</span><span class="o">=</span><span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">][</span><span class="n">contrib_id</span><span class="p">][</span><span class="s2">"meta"</span><span class="p">][</span> + <span class="s2">"weight"</span><span class="p">],</span> + <span class="n">res1_pos</span><span class="o">=</span><span class="n">res_id</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">res2_pos</span><span class="o">=</span><span class="n">res_id</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> + <span class="n">atm1_name</span><span class="o">=</span><span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">][</span><span class="n">contrib_id</span><span class="p">][</span> + <span class="s2">"spin_pair"</span><span class="p">][</span><span class="n">res_id</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span> + <span class="n">atm2_name</span><span class="o">=</span><span class="n">dist_restraints</span><span class="p">[</span><span class="n">restraint_id</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">][</span><span class="n">contrib_id</span><span class="p">][</span> + <span class="s2">"spin_pair"</span><span class="p">][</span><span class="n">res_id</span><span class="p">[</span><span class="mi">1</span><span class="p">]]))</span> + <span class="n">xml_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1"> </restraint></span> +<span class="s1">'''</span><span class="p">)</span> + <span class="n">xml_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1"></distance_restraint_list></span> +<span class="s1">'''</span><span class="p">)</span></div> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_write_helix_hb_tbl</span><span class="p">(</span><span class="n">sec_struct</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">dminus</span><span class="p">,</span> <span class="n">dplus</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> sec_struct :</span> +<span class="sd"> </span> +<span class="sd"> outfile :</span> +<span class="sd"> </span> +<span class="sd"> dminus :</span> +<span class="sd"> </span> +<span class="sd"> dplus :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"! Short range Hbond list (Alpha helix)"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">secstr</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sec_struct</span><span class="p">):</span> + <span class="k">if</span> <span class="p">(</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">4</span><span class="p">)</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">sec_struct</span><span class="p">):</span> + <span class="k">if</span> <span class="s1">'H'</span> <span class="ow">in</span> <span class="n">secstr</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">and</span> <span class="s1">'H'</span> <span class="ow">in</span> <span class="n">sec_struct</span><span class="p">[</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">4</span><span class="p">][</span><span class="mi">2</span><span class="p">]:</span> + <span class="c1"># Si residus dans helice</span> + <span class="n">res1</span> <span class="o">=</span> <span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">res2</span> <span class="o">=</span> <span class="n">idx</span> <span class="o">+</span> <span class="mi">5</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1">assign (resid </span><span class="si">{res1}</span><span class="s1"> and name o) (resid </span><span class="si">{res2}</span><span class="s1"> and name n) 2.8 </span><span class="si">{dminus}</span><span class="s1"> </span><span class="si">{dplus}</span><span class="s1"></span> +<span class="s1">assign (resid </span><span class="si">{res1}</span><span class="s1"> and name o) (resid </span><span class="si">{res2}</span><span class="s1"> and name hn) 1.8 </span><span class="si">{dminus}</span><span class="s1"> </span><span class="si">{dplus}</span><span class="s1"></span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">res1</span><span class="o">=</span><span class="n">res1</span><span class="p">,</span> <span class="n">res2</span><span class="o">=</span><span class="n">res2</span><span class="p">,</span> <span class="n">dminus</span><span class="o">=</span><span class="n">dminus</span><span class="p">,</span> <span class="n">dplus</span><span class="o">=</span><span class="n">dplus</span><span class="p">))</span> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_write_hbmap_tbl</span><span class="p">(</span><span class="n">hbmap</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">dminus</span><span class="p">,</span> <span class="n">dplus</span><span class="p">,</span> <span class="n">n_hb</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">hb_type</span><span class="o">=</span><span class="s2">"main"</span><span class="p">,</span> <span class="n">topo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Build hbdond distance restraints from a res-res contact map. Tbl</span> +<span class="sd"> restraints generated use pseudoatoms since we assume we don't know</span> +<span class="sd"> which donnor/acceptor are involved.</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> hbmap :</span> +<span class="sd"> Hbond contact map with first humanidx = ['donor',</span> +<span class="sd"> 'acceptor'] => Non symetric matrix !!!</span> +<span class="sd"> outfile :</span> +<span class="sd"> param dminus:</span> +<span class="sd"> dplus :</span> +<span class="sd"> param n_hb:</span> +<span class="sd"> hb_type :</span> +<span class="sd"> Long range hbond type (Default value = "main")</span> +<span class="sd"> dminus :</span> +<span class="sd"> </span> +<span class="sd"> n_hb :</span> +<span class="sd"> (Default value = None)</span> +<span class="sd"> topo :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: test with several deviation since these restraints should</span> + <span class="c1"># contain noise !!</span> + <span class="c1"># Parcourt la matrice de contact</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1">! Long range Hbond list (beta sheet)</span> +<span class="s1">'''</span><span class="p">)</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="n">hbmap</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">]</span><span class="o">.</span><span class="n">sortedset</span><span class="p">(</span><span class="n">human_idx</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="c1"># distmap = hbmap.get("distmap")</span> + <span class="k">if</span> <span class="n">n_hb</span><span class="p">:</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="n">contacts</span><span class="p">[:</span><span class="n">n_hb</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">contacts</span><span class="p">)</span> + <span class="n">donors</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">acces</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">contacts</span><span class="p">:</span> + <span class="c1"># The first residu represent the hydrogen bond donor and the</span> + <span class="c1"># second residu represent the hydrogen bond acceptor</span> + <span class="n">res1</span><span class="p">,</span> <span class="n">res2</span> <span class="o">=</span> <span class="n">contact</span> + <span class="k">if</span> <span class="n">res1</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">donors</span> <span class="o">+</span> <span class="n">acces</span> <span class="ow">and</span> <span class="n">res2</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">donors</span> <span class="o">+</span> <span class="n">acces</span><span class="p">:</span> + <span class="c1"># Add only if new donor and new acces don't belong to</span> + <span class="c1"># previous hbond restraints</span> + <span class="n">donors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">res1</span><span class="p">)</span> + <span class="n">acces</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">res2</span><span class="p">)</span> + <span class="c1"># residx1, residx2 = int(res1) - 1, int(res2) - 1</span> + <span class="c1"># TODO: find a way to use dist</span> + <span class="c1"># dist = distmap.iat[(residx1, residx2)]</span> + <span class="k">if</span> <span class="n">hb_type</span> <span class="o">==</span> <span class="s2">"all"</span><span class="p">:</span> + <span class="c1"># This method is deprecated seems it should add noise ...</span> + <span class="c1"># if topo:</span> + <span class="c1"># print(topo)</span> + <span class="c1"># print(res1, res2)</span> + <span class="c1"># print(topo[residx1][1]['dono'])</span> + <span class="c1"># print(topo[residx2][1]['acce'])</span> + <span class="c1"># print([x[0] for x in topo])</span> + <span class="c1"># print(hbmap['maplot'].sequence[residx1])</span> + <span class="c1"># print(hbmap['maplot'].sequence[residx2])</span> + <span class="c1"># print(distmap.index[residx2])</span> + <span class="c1"># print(dist)</span> + <span class="c1"># print(hbmap["scoremap"])</span> + <span class="c1"># Get all donor from cns topology file and make group atom/pseudoatm</span> + <span class="c1"># Get all acceptor from cns topology file</span> + <span class="c1"># !!!! Ignore case flag !!!!!</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="n">hb_type</span> <span class="o">!=</span> <span class="s2">"main"</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Wrong longrange hbond type given. Default "</span> + <span class="s2">"option used (main)"</span><span class="p">)</span> + <span class="c1"># First residue = donor for a backbone hydrogen bond (N-H...O=C)</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1"> assign (resid </span><span class="si">{res1}</span><span class="s1"> and name o) (resid </span><span class="si">{res2}</span><span class="s1"> and name n) 2.8 </span><span class="si">{dminus}</span><span class="s1"> </span><span class="si">{dplus}</span><span class="s1"></span> +<span class="s1"> assign (resid </span><span class="si">{res1}</span><span class="s1"> and name o) (resid </span><span class="si">{res2}</span><span class="s1"> and name hn) 1.8 </span><span class="si">{dminus}</span><span class="s1"> </span><span class="si">{dplus}</span><span class="s1"></span> +<span class="s1"> '''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">res1</span><span class="o">=</span><span class="n">res1</span><span class="p">,</span> <span class="n">res2</span><span class="o">=</span><span class="n">res2</span><span class="p">,</span> <span class="n">dminus</span><span class="o">=</span><span class="n">dminus</span><span class="p">,</span> + <span class="n">dplus</span><span class="o">=</span><span class="n">dplus</span><span class="p">))</span> <span class="c1"># , dist=dist))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Writing </span><span class="si">%d</span><span class="s2"> hbonds from hbmap in </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">donors</span><span class="p">),</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> + +<div class="viewcode-block" id="AriaXMLConverter.write_hb_tbl"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.write_hb_tbl">[docs]</a> <span class="k">def</span> <span class="nf">write_hb_tbl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protein</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">hbmap</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dminus</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> + <span class="n">dplus</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">n_hb</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lr_type</span><span class="o">=</span><span class="s1">'main'</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> protein :</span> +<span class="sd"> param outfile:</span> +<span class="sd"> hbmap :</span> +<span class="sd"> param dminus: (Default value = None)</span> +<span class="sd"> dplus :</span> +<span class="sd"> param n_hb: (Default value = 0.5)</span> +<span class="sd"> lr_type :</span> +<span class="sd"> return: (Default value = 'main')</span> +<span class="sd"> outfile :</span> +<span class="sd"> </span> +<span class="sd"> dminus :</span> +<span class="sd"> (Default value = 0.0)</span> +<span class="sd"> n_hb :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">outfile</span><span class="p">:</span> + <span class="c1"># Write short range hbond tbl restraints</span> + <span class="k">if</span> <span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_write_helix_hb_tbl</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> + <span class="n">dminus</span><span class="p">,</span> + <span class="n">dplus</span><span class="p">)</span> + <span class="k">if</span> <span class="n">hbmap</span><span class="p">:</span> + <span class="c1"># TODO: add another flag in order to generate hbmap xml</span> + <span class="c1"># ambig. Tbl pseudoatoms is probably not the best way to use</span> + <span class="c1"># hbmap</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_write_hbmap_tbl</span><span class="p">(</span><span class="n">hbmap</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">dminus</span><span class="p">,</span> <span class="n">dplus</span><span class="p">,</span> + <span class="n">n_hb</span><span class="o">=</span><span class="n">n_hb</span><span class="p">,</span> <span class="n">hb_type</span><span class="o">=</span><span class="n">lr_type</span><span class="p">,</span> + <span class="n">topo</span><span class="o">=</span><span class="n">protein</span><span class="o">.</span><span class="n">topology</span><span class="p">)</span></div> + +<div class="viewcode-block" id="AriaXMLConverter.write_ssdist_tbl"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.write_ssdist_tbl">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">write_ssdist_tbl</span><span class="p">(</span><span class="n">sec_struct</span><span class="p">,</span> <span class="n">ss_dist</span><span class="p">,</span> <span class="n">outfile</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> sec_struct :</span> +<span class="sd"> </span> +<span class="sd"> ss_dist :</span> +<span class="sd"> </span> +<span class="sd"> outfile :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Build global secondary structure distance restraints (H-H+4, E-E+1,</span> + <span class="c1"># ...)</span> + <span class="sd">"""</span> + +<span class="sd"> :param sec_struct:</span> +<span class="sd"> :param ss_dist:</span> +<span class="sd"> :param outfile:</span> +<span class="sd"> """</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">outfile</span><span class="p">:</span> + <span class="k">for</span> <span class="n">resid1</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">sec_struct</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span> + <span class="k">for</span> <span class="n">resid2</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">resid1</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">sec_struct</span><span class="p">)):</span> + <span class="n">ss1</span> <span class="o">=</span> <span class="n">sec_struct</span><span class="p">[</span><span class="n">resid1</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span> + <span class="n">ss2</span> <span class="o">=</span> <span class="n">sec_struct</span><span class="p">[</span><span class="n">resid2</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span> + <span class="k">if</span> <span class="p">(</span><span class="n">ss1</span> <span class="o">!=</span> <span class="n">ss2</span><span class="p">)</span> <span class="ow">or</span> <span class="s1">'C'</span> <span class="ow">in</span> <span class="n">ss1</span> <span class="ow">or</span> <span class="s1">'C'</span> <span class="ow">in</span> <span class="n">ss2</span><span class="p">:</span> + <span class="k">continue</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">gap</span> <span class="o">=</span> <span class="n">resid2</span> <span class="o">-</span> <span class="n">resid1</span> <span class="c1"># ecart en nombre de residus</span> + <span class="n">ss_dict_key</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">,</span><span class="si">%s</span><span class="s1">+</span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">ss1</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ss2</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">gap</span><span class="p">)</span> + <span class="n">ss_dist_subdict</span> <span class="o">=</span> <span class="n">ss_dist</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ss_dict_key</span><span class="p">)</span> + <span class="k">if</span> <span class="n">ss_dist_subdict</span><span class="p">:</span> + <span class="k">for</span> <span class="n">atoms</span><span class="p">,</span> <span class="p">(</span><span class="n">dist</span><span class="p">,</span> <span class="n">sdev</span><span class="p">)</span> <span class="ow">in</span> <span class="n">ss_dist_subdict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="k">if</span> <span class="n">dist</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">sdev</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">atoms</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">))</span> + <span class="n">res1</span> <span class="o">=</span> <span class="n">resid1</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">res2</span> <span class="o">=</span> <span class="n">resid2</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1">assign (resid </span><span class="si">{res1}</span><span class="s1"> and name </span><span class="si">{atm1}</span><span class="s1">) (resid </span><span class="si">{res2}</span><span class="s1"> and name </span><span class="si">{atm2}</span><span class="s1">) </span><span class="si">{dist}</span><span class="s1"> </span><span class="si">{sdev}</span><span class="s1"> </span><span class="si">{sdev}</span><span class="s1"> weight 5</span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">res1</span><span class="o">=</span><span class="n">res1</span><span class="p">,</span> <span class="n">atm1</span><span class="o">=</span><span class="n">atm1</span><span class="p">,</span> <span class="n">res2</span><span class="o">=</span><span class="n">res2</span><span class="p">,</span> <span class="n">atm2</span><span class="o">=</span><span class="n">atm2</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="n">dist</span><span class="p">,</span> <span class="n">sdev</span><span class="o">=</span><span class="n">sdev</span><span class="p">))</span></div> + +<div class="viewcode-block" id="AriaXMLConverter.write_dihedral_tbl"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaXMLConverter.write_dihedral_tbl">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">write_dihedral_tbl</span><span class="p">(</span><span class="n">secstructs</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">knrj</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">exp</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Build dihedral angle restraints (phi, psi) in tbl format</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> secstructs :</span> +<span class="sd"> </span> +<span class="sd"> outfile :</span> +<span class="sd"> </span> +<span class="sd"> knrj :</span> +<span class="sd"> (Default value = 0.5)</span> +<span class="sd"> exp :</span> +<span class="sd"> (Default value = 2)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">outfile</span><span class="p">:</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">secstructs</span><span class="p">)):</span> + <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">secstructs</span><span class="p">):</span> + <span class="k">if</span> <span class="n">secstructs</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="n">secstructs</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">]:</span> + <span class="c1"># Si ss identique</span> + <span class="n">secstruct</span> <span class="o">=</span> <span class="n">secstructs</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="n">res1</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">res2</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">2</span> + + <span class="k">if</span> <span class="n">secstruct</span> <span class="o">==</span> <span class="s1">'H'</span><span class="p">:</span> + <span class="n">phi</span> <span class="o">=</span> <span class="o">-</span><span class="mf">57.0</span> + <span class="n">psi</span> <span class="o">=</span> <span class="o">-</span><span class="mf">47.0</span> + <span class="n">anglerange</span> <span class="o">=</span> <span class="mf">7.0</span> + <span class="k">elif</span> <span class="n">secstruct</span> <span class="o">==</span> <span class="s1">'E'</span><span class="p">:</span> + <span class="n">phi</span> <span class="o">=</span> <span class="o">-</span><span class="mf">127.0</span> + <span class="n">psi</span> <span class="o">=</span> <span class="mf">122.0</span> + <span class="n">anglerange</span> <span class="o">=</span> <span class="mf">20.0</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">phi</span><span class="p">,</span> <span class="n">psi</span><span class="p">,</span> <span class="n">anglerange</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">phi</span> <span class="ow">and</span> <span class="n">psi</span><span class="p">:</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span><span class="se">\</span> +<span class="s1">assign (resid </span><span class="si">{res1}</span><span class="s1"> and name c) (resid </span><span class="si">{res2}</span><span class="s1"> and name n) (resid </span><span class="si">{res2}</span><span class="s1"> and name ca) </span><span class="se">\</span> +<span class="s1">(resid </span><span class="si">{res2}</span><span class="s1"> and name c) </span><span class="si">{k}</span><span class="s1"> </span><span class="si">{phi}</span><span class="s1"> </span><span class="si">{anglerange}</span><span class="s1"> </span><span class="si">{e}</span><span class="s1"></span> +<span class="s1">assign (resid </span><span class="si">{res1}</span><span class="s1"> and name n) (resid </span><span class="si">{res1}</span><span class="s1"> and name ca) (resid </span><span class="si">{res1}</span><span class="s1"> and name c) </span><span class="se">\</span> +<span class="s1">(resid </span><span class="si">{res2}</span><span class="s1"> and name n) </span><span class="si">{k}</span><span class="s1"> </span><span class="si">{psi}</span><span class="s1"> </span><span class="si">{anglerange}</span><span class="s1"> </span><span class="si">{e}</span><span class="s1"></span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">res1</span><span class="o">=</span><span class="n">res1</span><span class="p">,</span> <span class="n">res2</span><span class="o">=</span><span class="n">res2</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="n">knrj</span><span class="p">,</span> <span class="n">phi</span><span class="o">=</span><span class="n">phi</span><span class="p">,</span> <span class="n">psi</span><span class="o">=</span><span class="n">psi</span><span class="p">,</span> + <span class="n">anglerange</span><span class="o">=</span><span class="n">anglerange</span><span class="p">,</span> <span class="n">e</span><span class="o">=</span><span class="n">exp</span><span class="p">))</span></div></div> + + +<div class="viewcode-block" id="AriaEcXMLConverter"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter">[docs]</a><span class="k">class</span> <span class="nc">AriaEcXMLConverter</span><span class="p">(</span><span class="n">AriaXMLConverter</span><span class="p">):</span> + <span class="sd">"""XML converter ariaec to aria"""</span> + + <span class="c1"># TODO: use aria api instead to generate xml files</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">restraint_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="nb">super</span><span class="p">(</span><span class="n">AriaEcXMLConverter</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_write_hbmap_tbl</span><span class="p">(</span><span class="n">hbmap</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">dminus</span><span class="p">,</span> <span class="n">dplus</span><span class="p">,</span> <span class="n">n_hb</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">hb_type</span><span class="o">=</span><span class="s2">"main"</span><span class="p">,</span> <span class="n">topo</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> hbmap :</span> +<span class="sd"> </span> +<span class="sd"> outfile :</span> +<span class="sd"> </span> +<span class="sd"> dminus :</span> +<span class="sd"> </span> +<span class="sd"> dplus :</span> +<span class="sd"> </span> +<span class="sd"> n_hb :</span> +<span class="sd"> (Default value = None)</span> +<span class="sd"> hb_type :</span> +<span class="sd"> (Default value = "main")</span> +<span class="sd"> topo :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">AriaXMLConverter</span><span class="o">.</span><span class="n">_write_hbmap_tbl</span><span class="p">(</span><span class="n">hbmap</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">dminus</span><span class="p">,</span> <span class="n">dplus</span><span class="p">)</span> + + <span class="c1"># def atm_product(self, idx1, res1, idx2, res2, list_type="min", product=True):</span> + <span class="c1">#</span> + <span class="c1"># """</span> + <span class="c1">#</span> + <span class="c1">#</span> + <span class="c1"># Parameters</span> + <span class="c1"># ----------</span> + <span class="c1"># idx1 :</span> + <span class="c1"># res1:</span> + <span class="c1"># idx2 :</span> + <span class="c1"># res2:</span> + <span class="c1"># list_type :</span> + <span class="c1"># type of atoms in the product (Default value = "min")</span> + <span class="c1"># product :</span> + <span class="c1"># res1 :</span> + <span class="c1">#</span> + <span class="c1"># res2 :</span> + <span class="c1">#</span> + <span class="c1">#</span> + <span class="c1"># Returns</span> + <span class="c1"># -------</span> + <span class="c1">#</span> + <span class="c1">#</span> + <span class="c1"># """</span> + <span class="c1">#</span> + <span class="c1"># def resname(res):</span> + <span class="c1"># """</span> + <span class="c1">#</span> + <span class="c1">#</span> + <span class="c1"># Parameters</span> + <span class="c1"># ----------</span> + <span class="c1"># res :</span> + <span class="c1"># return:</span> + <span class="c1">#</span> + <span class="c1"># Returns</span> + <span class="c1"># -------</span> + <span class="c1">#</span> + <span class="c1">#</span> + <span class="c1"># """</span> + <span class="c1"># return AminoAcid.AminoAcid(res)[0]</span> + <span class="c1">#</span> + <span class="c1"># def min_filter(aa1, aa2, atms):</span> + <span class="c1"># """</span> + <span class="c1">#</span> + <span class="c1">#</span> + <span class="c1"># Parameters</span> + <span class="c1"># ----------</span> + <span class="c1"># aa1 : residue name 1</span> + <span class="c1">#</span> + <span class="c1"># aa2 : residue name 2</span> + <span class="c1">#</span> + <span class="c1"># atms : atom pair list of residue 1</span> + <span class="c1">#</span> + <span class="c1">#</span> + <span class="c1"># Returns</span> + <span class="c1"># -------</span> + <span class="c1">#</span> + <span class="c1">#</span> + <span class="c1"># """</span> + <span class="c1"># return [atm for atm in atms if atm in (</span> + <span class="c1"># 'CA', 'CB',</span> + <span class="c1"># self.settings.scsc_min[resname(aa1)][resname(aa2)][0])]</span> + <span class="c1">#</span> + <span class="c1"># atms1 = self.molecule.get_chains()[0].getResidues()[idx1].atoms.keys()</span> + <span class="c1"># atms2 = self.molecule.get_chains()[0].getResidues()[idx2].atoms.keys()</span> + <span class="c1">#</span> + <span class="c1"># if list_type == "min":</span> + <span class="c1"># atms1 = min_filter(res1, res2, atms1)</span> + <span class="c1"># atms2 = min_filter(res2, res1, atms2)</span> + <span class="c1"># elif list_type == "heavy":</span> + <span class="c1"># atms1 = filter(ResAtmMap.heavy_reg.match, atms1)</span> + <span class="c1"># atms2 = filter(ResAtmMap.heavy_reg.match, atms2)</span> + <span class="c1"># elif list_type != 'all':</span> + <span class="c1"># LOG.warning("Wrong pair_list option. Pair_list set to min")</span> + <span class="c1"># atms1 = min_filter(res1, res2, atms1)</span> + <span class="c1"># atms2 = min_filter(res2, res1, atms2)</span> + <span class="c1">#</span> + <span class="c1"># if product:</span> + <span class="c1"># return list(itertools.product(atms1, atms2))</span> + <span class="c1"># else:</span> + <span class="c1"># # Return atm1-atm2 list if both atoms are of the same type (except</span> + <span class="c1"># # for min atom list with the side chain atom</span> + <span class="c1"># return [</span> + <span class="c1"># (atm1, atm2) for (atm1, atm2) in list(itertools.product(atms1, atms2))</span> + <span class="c1"># if atm1 == atm2 or (</span> + <span class="c1"># atm1 not in ('CA', 'CB')</span> + <span class="c1"># and atm2 not in ('CA', 'CB'))] if list_type == 'min' else [</span> + <span class="c1"># (atm1, atm2) for (atm1, atm2) in list(itertools.product(atms1, atms2))</span> + <span class="c1"># if atm1 == atm2]</span> + +<div class="viewcode-block" id="AriaEcXMLConverter.atm_list"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.atm_list">[docs]</a> <span class="k">def</span> <span class="nf">atm_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx1</span><span class="p">,</span> <span class="n">res1</span><span class="p">,</span> <span class="n">idx2</span><span class="p">,</span> <span class="n">res2</span><span class="p">,</span> <span class="n">list_type</span><span class="o">=</span><span class="s2">"min"</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> idx1</span> +<span class="sd"> res1</span> +<span class="sd"> idx2</span> +<span class="sd"> res2</span> +<span class="sd"> list_type</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + + <span class="k">def</span> <span class="nf">resname</span><span class="p">(</span><span class="n">res</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> res :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">res</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + + <span class="k">def</span> <span class="nf">min_filter</span><span class="p">(</span><span class="n">aa1</span><span class="p">,</span> <span class="n">aa2</span><span class="p">,</span> <span class="n">atms</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> aa1 : residue name 1</span> + +<span class="sd"> aa2 : residue name 2</span> + +<span class="sd"> atms : atom pair list of residue 1</span> + + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="k">return</span> <span class="p">[</span><span class="n">atm</span> <span class="k">for</span> <span class="n">atm</span> <span class="ow">in</span> <span class="n">atms</span> <span class="k">if</span> <span class="n">atm</span> <span class="ow">in</span> <span class="p">(</span> + <span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">[</span><span class="n">resname</span><span class="p">(</span><span class="n">aa1</span><span class="p">)][</span><span class="n">resname</span><span class="p">(</span><span class="n">aa2</span><span class="p">)][</span><span class="mi">0</span><span class="p">])]</span> + + <span class="n">atms1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">molecule</span><span class="o">.</span><span class="n">get_chains</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getResidues</span><span class="p">()[</span><span class="n">idx1</span><span class="p">]</span><span class="o">.</span><span class="n">atoms</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> + <span class="n">atms2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">molecule</span><span class="o">.</span><span class="n">get_chains</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">getResidues</span><span class="p">()[</span><span class="n">idx2</span><span class="p">]</span><span class="o">.</span><span class="n">atoms</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> + + <span class="k">if</span> <span class="n">list_type</span> <span class="o">==</span> <span class="s2">"min"</span><span class="p">:</span> + <span class="n">atms1</span> <span class="o">=</span> <span class="n">min_filter</span><span class="p">(</span><span class="n">res1</span><span class="p">,</span> <span class="n">res2</span><span class="p">,</span> <span class="n">atms1</span><span class="p">)</span> + <span class="n">atms2</span> <span class="o">=</span> <span class="n">min_filter</span><span class="p">(</span><span class="n">res2</span><span class="p">,</span> <span class="n">res1</span><span class="p">,</span> <span class="n">atms2</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">list_type</span> <span class="o">==</span> <span class="s2">"heavy"</span><span class="p">:</span> + <span class="n">atms1</span> <span class="o">=</span> <span class="nb">filter</span><span class="p">(</span><span class="n">ResAtmMap</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="n">atms1</span><span class="p">)</span> + <span class="n">atms2</span> <span class="o">=</span> <span class="nb">filter</span><span class="p">(</span><span class="n">ResAtmMap</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="n">atms2</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">list_type</span> <span class="o">!=</span> <span class="s1">'all'</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Wrong pair_list option. Pair_list set to min"</span><span class="p">)</span> + <span class="n">atms1</span> <span class="o">=</span> <span class="n">min_filter</span><span class="p">(</span><span class="n">res1</span><span class="p">,</span> <span class="n">res2</span><span class="p">,</span> <span class="n">atms1</span><span class="p">)</span> + <span class="n">atms2</span> <span class="o">=</span> <span class="n">min_filter</span><span class="p">(</span><span class="n">res2</span><span class="p">,</span> <span class="n">res1</span><span class="p">,</span> <span class="n">atms2</span><span class="p">)</span> + + <span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">atms1</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">atms2</span><span class="p">)</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.atm_product"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.atm_product">[docs]</a> <span class="k">def</span> <span class="nf">atm_product</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx1</span><span class="p">,</span> <span class="n">res1</span><span class="p">,</span> <span class="n">idx2</span><span class="p">,</span> <span class="n">res2</span><span class="p">,</span> <span class="n">list_type</span><span class="o">=</span><span class="s2">"min"</span><span class="p">,</span> + <span class="n">adr_flag</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">product_type</span><span class="o">=</span><span class="s2">"allvsall"</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> product_type</span> +<span class="sd"> adr_flag</span> +<span class="sd"> idx1 :</span> +<span class="sd"> res1:</span> +<span class="sd"> idx2 :</span> +<span class="sd"> res2:</span> +<span class="sd"> list_type :</span> +<span class="sd"> type of atoms in the product (Default value = "min")</span> +<span class="sd"> res1 :</span> + +<span class="sd"> res2 :</span> + + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + + <span class="k">def</span> <span class="nf">resname</span><span class="p">(</span><span class="n">res</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> res :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">res</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + + <span class="n">atms1</span><span class="p">,</span> <span class="n">atms2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">atm_list</span><span class="p">(</span><span class="n">idx1</span><span class="p">,</span> <span class="n">res1</span><span class="p">,</span> <span class="n">idx2</span><span class="p">,</span> <span class="n">res2</span><span class="p">,</span> + <span class="n">list_type</span><span class="o">=</span><span class="n">list_type</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">adr_flag</span> <span class="ow">and</span> <span class="n">product_type</span> <span class="o">==</span> <span class="s2">"same"</span><span class="p">:</span> + <span class="c1"># We return here only minimized list with equal atoms</span> + <span class="c1"># Return atm1-atm2 list if both atoms are of the same type (except</span> + <span class="c1"># for min atom list with the side chain atom</span> + <span class="k">return</span> <span class="p">[[</span> + <span class="p">((</span><span class="n">idx1</span><span class="p">,</span> <span class="n">atm1</span><span class="p">),</span> <span class="p">(</span><span class="n">idx2</span><span class="p">,</span> <span class="n">atm2</span><span class="p">))</span> <span class="k">for</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="ow">in</span> + <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="n">atms1</span><span class="p">,</span> <span class="n">atms2</span><span class="p">))</span> + <span class="k">if</span> <span class="n">atm1</span> <span class="o">==</span> <span class="n">atm2</span> <span class="ow">or</span> <span class="p">(</span> + <span class="n">atm1</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">)</span> + <span class="ow">and</span> <span class="n">atm2</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">)</span> + <span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">[</span> + <span class="n">resname</span><span class="p">(</span><span class="n">res1</span><span class="p">)][</span><span class="n">resname</span><span class="p">(</span><span class="n">res2</span><span class="p">)]],</span> <span class="p">]</span> <span class="k">if</span> <span class="n">list_type</span> <span class="o">==</span> <span class="s1">'min'</span> \ + <span class="k">else</span> <span class="p">[[(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="ow">in</span> + <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="n">atms1</span><span class="p">,</span> <span class="n">atms2</span><span class="p">))</span> + <span class="k">if</span> <span class="n">atm1</span> <span class="o">==</span> <span class="n">atm2</span><span class="p">],</span> <span class="p">]</span> + <span class="k">elif</span> <span class="n">adr_flag</span> <span class="ow">and</span> <span class="n">product_type</span> <span class="o">==</span> <span class="s2">"onevsall"</span><span class="p">:</span> + <span class="c1"># Nested list with combination between one atom against all</span> + <span class="c1"># other atoms in the other list</span> + <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">atm1</span> <span class="ow">in</span> <span class="n">atms1</span><span class="p">:</span> + <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">([</span> + <span class="p">((</span><span class="n">idx1</span><span class="p">,</span> <span class="n">atm1</span><span class="p">),</span> <span class="p">(</span><span class="n">idx2</span><span class="p">,</span> <span class="n">atm2</span><span class="p">))</span> <span class="k">for</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="ow">in</span> + <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">([</span><span class="n">atm1</span><span class="p">],</span> <span class="n">atms2</span><span class="p">))])</span> + <span class="k">return</span> <span class="n">result</span> + <span class="k">elif</span> <span class="n">adr_flag</span> <span class="ow">and</span> <span class="n">product_type</span> <span class="o">==</span> <span class="s2">"allvsall"</span><span class="p">:</span> + <span class="c1"># ADR with allvsall</span> + <span class="k">return</span> <span class="p">[[</span> + <span class="p">((</span><span class="n">idx1</span><span class="p">,</span> <span class="n">atm1</span><span class="p">),</span> <span class="p">(</span><span class="n">idx2</span><span class="p">,</span> <span class="n">atm2</span><span class="p">))</span> <span class="k">for</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="ow">in</span> + <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="n">atms1</span><span class="p">,</span> <span class="n">atms2</span><span class="p">))],</span> <span class="p">]</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">adr_flag</span> <span class="ow">and</span> <span class="n">product_type</span> <span class="o">==</span> <span class="s2">"same"</span><span class="p">:</span> + <span class="c1"># We return here only minimized list with equal atoms</span> + <span class="c1"># Return atm1-atm2 list if both atoms are of the same type (except</span> + <span class="c1"># for min atom list with the side chain atom</span> + <span class="k">return</span> <span class="p">[</span> + <span class="p">((</span><span class="n">idx1</span><span class="p">,</span> <span class="n">atm1</span><span class="p">),</span> <span class="p">(</span><span class="n">idx2</span><span class="p">,</span> <span class="n">atm2</span><span class="p">))</span> <span class="k">for</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="ow">in</span> + <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="n">atms1</span><span class="p">,</span> <span class="n">atms2</span><span class="p">))</span> + <span class="k">if</span> <span class="n">atm1</span> <span class="o">==</span> <span class="n">atm2</span> <span class="ow">or</span> <span class="p">(</span> + <span class="n">atm1</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">)</span> + <span class="ow">and</span> <span class="n">atm2</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span> + <span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">))</span> <span class="ow">or</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">[</span> + <span class="n">resname</span><span class="p">(</span><span class="n">res1</span><span class="p">)][</span> + <span class="n">resname</span><span class="p">(</span><span class="n">res2</span><span class="p">)]]</span> <span class="k">if</span> <span class="n">list_type</span> <span class="o">==</span> <span class="s1">'min'</span> <span class="k">else</span> <span class="p">[</span> + <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="ow">in</span> + <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="n">atms1</span><span class="p">,</span> <span class="n">atms2</span><span class="p">))</span> + <span class="k">if</span> <span class="n">atm1</span> <span class="o">==</span> <span class="n">atm2</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Unambig restraints, we have only one list with all possible</span> + <span class="c1"># combination between atoms. No matter what kind of product type, it</span> + <span class="c1"># will be the same</span> + <span class="k">return</span> <span class="p">[</span> + <span class="p">((</span><span class="n">idx1</span><span class="p">,</span> <span class="n">atm1</span><span class="p">),</span> <span class="p">(</span><span class="n">idx2</span><span class="p">,</span> <span class="n">atm2</span><span class="p">))</span> <span class="k">for</span> <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="ow">in</span> + <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="n">atms1</span><span class="p">,</span> <span class="n">atms2</span><span class="p">))]</span></div> + + <span class="k">def</span> <span class="nf">_pdbdistmaps</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="c1"># TODO: use precision level, actually we only use SsAaAtmMaps</span> + <span class="n">precision_level</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"pdbdistance_level"</span><span class="p">,</span> <span class="s2">"ss"</span><span class="p">)</span> + <span class="n">atom_types</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"atoms_type"</span><span class="p">,</span> <span class="s2">"min"</span><span class="p">)</span> + + <span class="c1"># TODO: Do the same for heavy matrices, it is actually hard coded to min</span> + <span class="c1"># matrices sinces we only have this kind of information in data/pdbdists</span> + <span class="n">pdbstasts_groups</span> <span class="o">=</span> <span class="p">(</span> + <span class="p">(</span><span class="s1">'INTERLOWERBOUNDS'</span><span class="p">,</span> <span class="s1">'interlowerbounds_pdbstat'</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'INTERTARGET'</span><span class="p">,</span> <span class="s1">'intertarget_pdbstat'</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'INTERUPPERBOUNDS'</span><span class="p">,</span> <span class="s1">'interupperbounds_pdbstat'</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'INTRALOWERBOUNDS'</span><span class="p">,</span> <span class="s1">'intralowerbounds_pdbstat'</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'INTRATARGET'</span><span class="p">,</span> <span class="s1">'intratarget_pdbstat'</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'INTRAUPPERBOUNDS'</span><span class="p">,</span> <span class="s1">'intraupperbounds_pdbstat'</span><span class="p">)</span> + <span class="p">)</span> + <span class="n">pdbdistmaps</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">for</span> <span class="n">pdbstasts_group</span> <span class="ow">in</span> <span class="n">pdbstasts_groups</span><span class="p">:</span> + <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pdbstasts_group</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="n">pkgpath</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">,</span> <span class="n">pdbstasts_group</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="c1"># TODO: ONLY MIN PAIR ATOMS FOR TARGET PDB DIST</span> + <span class="n">targetmap</span> <span class="o">=</span> <span class="n">SsAaAtmMap</span><span class="p">(</span><span class="n">atom_types</span><span class="o">=</span><span class="n">atom_types</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">path</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">path</span><span class="p">:</span> + <span class="k">with</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_stream</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">pkgpath</span><span class="p">)</span> <span class="k">as</span> <span class="n">pkgfile</span><span class="p">:</span> + <span class="n">pdbdistmap</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">pkgfile</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">as</span> <span class="n">pdbdistmapfile</span><span class="p">:</span> + <span class="n">pdbdistmap</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">pdbdistmapfile</span><span class="p">)</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">IOError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span> + <span class="k">with</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_stream</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">pkgpath</span><span class="p">)</span> <span class="k">as</span> <span class="n">pkgfile</span><span class="p">:</span> + <span class="n">pdbdistmap</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">pkgfile</span><span class="p">)</span> + + <span class="n">pdbdistmap</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">pdbdistmap</span><span class="p">)</span> + <span class="c1"># We do not want 0. values here ...</span> + <span class="n">pdbdistmap</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="mf">0.</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">NaN</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">pdbdistmap</span><span class="o">.</span><span class="n">columns</span><span class="o">.</span><span class="n">set_names</span><span class="p">(</span> + <span class="p">[</span><span class="s1">'SecStruct'</span><span class="p">,</span> <span class="s1">'AminoAcid'</span><span class="p">,</span> <span class="s1">'Atom'</span><span class="p">],</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">pdbdistmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">set_names</span><span class="p">(</span> + <span class="p">[</span><span class="s1">'SecStruct'</span><span class="p">,</span> <span class="s1">'AminoAcid'</span><span class="p">,</span> <span class="s1">'Atom'</span><span class="p">],</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">pdbdistmap</span><span class="o">.</span><span class="n">sort_index</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">pdbdistmap</span><span class="o">.</span><span class="n">sort_index</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">targetmap</span><span class="o">.</span><span class="n">sort_index</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">targetmap</span><span class="o">.</span><span class="n">sort_index</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">targetmap</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">pdbdistmap</span><span class="p">[:]</span> + <span class="c1"># # TODO: Find a way to rearrange index or</span> + <span class="n">pdbdistmaps</span><span class="p">[</span><span class="n">pdbstasts_group</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">targetmap</span> + + <span class="k">return</span> <span class="n">pdbdistmaps</span> + +<div class="viewcode-block" id="AriaEcXMLConverter.neighcontact"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.neighcontact">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">neighcontact</span><span class="p">(</span><span class="n">contact</span><span class="p">,</span> <span class="n">maxidx</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> contact: tuple object</span> +<span class="sd"> maxidx: int</span> +<span class="sd"> offset: int</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="n">neighcontacts</span> <span class="o">=</span> <span class="p">[]</span> + <span class="c1"># Add N - 1 contact</span> + <span class="k">if</span> <span class="mi">0</span> <span class="o">+</span> <span class="n">offset</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">contact</span><span class="p">:</span> + <span class="n">neighcontacts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span> + <span class="n">neighcontacts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> + <span class="c1"># Add N + 1 contact</span> + <span class="k">if</span> <span class="n">maxidx</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">contact</span><span class="p">:</span> + <span class="n">neighcontacts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span> + <span class="k">return</span> <span class="n">neighcontacts</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.neighcontacts"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.neighcontacts">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">neighcontacts</span><span class="p">(</span><span class="n">contacts</span><span class="p">,</span> <span class="n">maxidx</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> contacts: list of tuple</span> +<span class="sd"> maxidx: int</span> +<span class="sd"> Maximum index value in pairs</span> +<span class="sd"> offset: int</span> +<span class="sd"> If indexes in pairs start by 0 or 0 + offset</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="n">neighcontacts</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">contacts</span><span class="p">:</span> + <span class="n">neighcontacts</span> <span class="o">+=</span> <span class="n">AriaEcXMLConverter</span><span class="o">.</span><span class="n">neighcontact</span><span class="p">(</span> + <span class="n">contact</span><span class="p">,</span> <span class="n">maxidx</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">neighcontacts</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.targetdistmaps"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.targetdistmaps">[docs]</a> <span class="k">def</span> <span class="nf">targetdistmaps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="n">distfile</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> distfile :</span> +<span class="sd"> param groupby: (Default value = None)</span> +<span class="sd"> sequence :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: valeur par defaut de distfile au fichier contenant les infos</span> + <span class="c1"># fixes</span> + <span class="c1"># ! target est une ResAtmMap pour les 20 aa, sinon il s'agit d'une</span> + <span class="c1"># carte de distance (native ou predite)</span> + <span class="c1"># Fixed</span> + <span class="c1"># -----</span> + <span class="c1"># => target contient des infos pour les 20 aa qui modifieront le champ</span> + <span class="c1"># distance de la contrainte</span> + <span class="c1"># => AaAtmMap (20 aa) OU AtmMap</span> + <span class="c1"># pdbstat</span> + <span class="c1"># -------</span> + <span class="c1"># => target contient des infos pour les 20 aa. Ces valeurs</span> + <span class="c1"># correspondant au mode des distribution des structures de haute</span> + <span class="c1"># resolution.</span> + <span class="c1"># => Construire Maps en fonction des modes des distribution</span> + <span class="c1"># => SsAaAtmMap (Ajout info structure secondaire) OU AaAtmMap (20</span> + <span class="c1"># aa) OU AaMap (20 aa) OU AtmMap pour les 20 aa</span> + <span class="c1"># distfile</span> + <span class="c1"># ---------</span> + <span class="c1"># => target contient les infos de distances predites en fonction</span> + <span class="c1"># des positions</span> + <span class="c1"># => ResMap (contacts pdb ou predits)</span> + + <span class="c1"># 2 solutions when we use pdbstat:</span> + <span class="c1">#</span> + <span class="n">targetmaps</span> <span class="o">=</span> <span class="p">{</span> + <span class="s1">'INTERLOWERBOUNDS'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s1">'INTERTARGET'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s1">'INTERUPPERBOUNDS'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s1">'INTRALOWERBOUNDS'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s1">'INTRATARGET'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s1">'INTRAUPPERBOUNDS'</span><span class="p">:</span> <span class="kc">None</span> + <span class="p">}</span> + <span class="n">distype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"distance_type"</span><span class="p">,</span> <span class="s2">"fixed"</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">distype</span> <span class="o">==</span> <span class="s2">"distfile"</span> <span class="ow">and</span> <span class="n">distfile</span><span class="p">:</span> + <span class="c1"># Retourne ResAtmMap associe au fichier de distance pdb</span> + <span class="n">targetmaps</span><span class="p">[</span><span class="s1">'INTERTARGET'</span><span class="p">]</span> <span class="o">=</span> <span class="n">distfile</span><span class="o">.</span><span class="n">mapdict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'alldistmap'</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">distype</span> <span class="o">==</span> <span class="s2">"fixed"</span><span class="p">:</span> + <span class="c1"># Fixed distances with bound in aria_ec.ini</span> + <span class="c1"># retourne ResAtmMap (20 aa)</span> + <span class="c1"># targetmap = ResAtmMap(sequence)</span> + <span class="c1"># targetmap[:] = self.settings.setup.config["restraint_distance"]</span> + <span class="c1"># targetmaps['INTERTARGET'] = targetmap</span> + <span class="n">targetmaps</span><span class="p">[</span><span class="s1">'INTERTARGET'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s2">"restraint_distance"</span><span class="p">]</span> + <span class="k">elif</span> <span class="n">distype</span> <span class="o">==</span> <span class="s2">"pdbstat"</span><span class="p">:</span> + <span class="c1"># TODO: pdbstats a partir d'une matrice pickle (faire une</span> + <span class="c1"># fonction qui genere la matrice en dehors et la sauvegarde</span> + <span class="c1"># dans le dossier data)</span> + <span class="c1"># Met a jour les valeurs de targetmaps en fonction de celles dispo</span> + <span class="c1"># dans pdbstat</span> + + <span class="c1"># settings = self.settings.setup.config</span> + <span class="c1"># pdbdict = {atmbound.replace('_upper_bound', ''): settings.get(</span> + <span class="c1"># atmbound, None) for atmbound in (bound for bound in settings</span> + <span class="c1"># if '_upper_bound' in bound.lower())}</span> + <span class="c1"># targetmaps.subfill(pdbdict, level=1)</span> + <span class="c1"># targetmaps = SsAaAtmMap()</span> + <span class="n">targetmaps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pdbdistmaps</span><span class="p">()</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># retourne fixed AtmMap</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Unknown distance_type </span><span class="si">%s</span><span class="s2"> or wrong distance file"</span> <span class="o">%</span> + <span class="n">distype</span><span class="p">)</span> + <span class="k">return</span> <span class="n">targetmaps</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.get_dist"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.get_dist">[docs]</a> <span class="k">def</span> <span class="nf">get_dist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">distmap</span><span class="p">,</span> <span class="n">contribs</span><span class="p">,</span> <span class="n">defaultdist</span><span class="p">,</span> <span class="n">protein</span><span class="p">,</span> + <span class="n">groupby</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Get target distance from distance map</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> distmap</span> +<span class="sd"> contribs</span> +<span class="sd"> defaultdist</span> +<span class="sd"> protein</span> +<span class="sd"> groupby</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + + <span class="k">def</span> <span class="nf">resname</span><span class="p">(</span><span class="n">res</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> res :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">res</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> + + <span class="n">distype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"distance_type"</span><span class="p">,</span> <span class="s2">"fixed"</span><span class="p">)</span> + <span class="n">groupby</span> <span class="o">=</span> <span class="n">groupby</span> <span class="k">if</span> <span class="n">groupby</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s2">"groupby_method"</span><span class="p">]</span> + <span class="c1"># TODO: Avoid reduce call if possible (slow)</span> + <span class="k">if</span> <span class="n">distype</span> <span class="o">!=</span> <span class="s2">"fixed"</span><span class="p">:</span> + <span class="n">distmap</span> <span class="o">=</span> <span class="n">distmap</span> <span class="k">if</span> <span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span> <span class="k">else</span> <span class="n">distmap</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span> + <span class="n">groupby</span><span class="o">=</span><span class="n">groupby</span><span class="p">)</span> + <span class="c1"># Definir le type de la carte Puis</span> + <span class="c1"># Calculer l'index relatif a la paire ou la liste de paires d'atomes</span> + <span class="n">dist_list</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">distmap</span><span class="p">)</span> <span class="o">==</span> <span class="n">ResAtmMap</span> <span class="ow">and</span> \ + <span class="n">distmap</span><span class="o">.</span><span class="n">sequence</span> <span class="o">==</span> <span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">:</span> + <span class="k">for</span> <span class="n">contrib</span> <span class="ow">in</span> <span class="n">contribs</span><span class="p">:</span> + <span class="n">mapidx_x</span> <span class="o">=</span> <span class="n">distmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">levels</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span> + <span class="n">mapidx_y</span> <span class="o">=</span> <span class="n">distmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">levels</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">contrib</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span> + <span class="n">dist_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">distmap</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span> + <span class="n">mapidx_x</span><span class="p">,</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]][</span> + <span class="n">mapidx_y</span><span class="p">,</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]])</span> + <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">distmap</span><span class="p">)</span> <span class="o">==</span> <span class="n">SsAaAtmMap</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="p">:</span> + <span class="c1"># TODO: Actually only inter distances used</span> + <span class="c1"># TODO: Works only with minimal target map (with CA, CB, SC indexes)</span> + <span class="k">for</span> <span class="n">contrib</span> <span class="ow">in</span> <span class="n">contribs</span><span class="p">:</span> + <span class="n">residx1</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="n">res1</span> <span class="o">=</span> <span class="n">resname</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">[</span><span class="n">residx1</span><span class="p">])</span> + <span class="n">atm1</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> + <span class="n">atm1</span> <span class="o">=</span> <span class="n">atm1</span> <span class="k">if</span> <span class="n">atm1</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'SC'</span> + <span class="n">residx2</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="n">res2</span> <span class="o">=</span> <span class="n">resname</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">[</span><span class="n">residx2</span><span class="p">])</span> + <span class="n">atm2</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> + <span class="n">atm2</span> <span class="o">=</span> <span class="n">atm2</span> <span class="k">if</span> <span class="n">atm2</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'SC'</span> + <span class="n">idx1</span> <span class="o">=</span> <span class="n">res1</span><span class="p">,</span> <span class="n">atm1</span> + <span class="n">idx2</span> <span class="o">=</span> <span class="n">res2</span><span class="p">,</span> <span class="n">atm2</span> + <span class="n">dist</span> <span class="o">=</span> <span class="n">distmap</span><span class="o">.</span><span class="n">sort_index</span><span class="p">()</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">idx1</span><span class="p">][</span><span class="n">idx2</span><span class="p">]</span> + <span class="n">dist</span> <span class="o">=</span> <span class="n">dist</span> <span class="k">if</span> <span class="n">pd</span><span class="o">.</span><span class="n">notnull</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> <span class="ow">and</span> <span class="n">dist</span> <span class="o">!=</span> <span class="mf">0.</span> <span class="k">else</span> \ + <span class="n">distmap</span><span class="o">.</span><span class="n">sort_index</span><span class="p">()</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">idx2</span><span class="p">][</span><span class="n">idx1</span><span class="p">]</span> + <span class="k">if</span> <span class="n">pd</span><span class="o">.</span><span class="n">notnull</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> <span class="ow">and</span> <span class="n">dist</span> <span class="o">!=</span> <span class="mf">0.</span><span class="p">:</span> + <span class="n">dist_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">dist_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">defaultdist</span><span class="p">)</span> + <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">distmap</span><span class="p">)</span> <span class="o">==</span> <span class="n">SsAaAtmMap</span><span class="p">:</span> + <span class="c1"># TODO: Actually only inter distances used</span> + <span class="c1"># TODO: Works only with minimal target map (with CA, CB, SC indexes)</span> + <span class="k">for</span> <span class="n">contrib</span> <span class="ow">in</span> <span class="n">contribs</span><span class="p">:</span> + <span class="n">residx1</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="n">res1</span> <span class="o">=</span> <span class="n">resname</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">[</span><span class="n">residx1</span><span class="p">])</span> + <span class="n">atm1</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> + <span class="n">atm1</span> <span class="o">=</span> <span class="n">atm1</span> <span class="k">if</span> <span class="n">atm1</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'SC'</span> + <span class="n">ss1</span> <span class="o">=</span> <span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">sequence</span><span class="p">[</span><span class="n">residx1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="n">ss1</span> <span class="o">=</span> <span class="n">ss1</span> <span class="k">if</span> <span class="n">ss1</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'E'</span><span class="p">,</span> <span class="s1">'H'</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'X'</span> + <span class="n">residx2</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="n">res2</span> <span class="o">=</span> <span class="n">resname</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">[</span><span class="n">residx2</span><span class="p">])</span> + <span class="n">atm2</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> + <span class="n">atm2</span> <span class="o">=</span> <span class="n">atm2</span> <span class="k">if</span> <span class="n">atm2</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'SC'</span> + <span class="n">ss2</span> <span class="o">=</span> <span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">sequence</span><span class="p">[</span><span class="n">residx2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="n">ss2</span> <span class="o">=</span> <span class="n">ss2</span> <span class="k">if</span> <span class="n">ss2</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'E'</span><span class="p">,</span> <span class="s1">'H'</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'X'</span> + <span class="n">idx1</span> <span class="o">=</span> <span class="n">ss1</span><span class="p">,</span> <span class="n">res1</span><span class="p">,</span> <span class="n">atm1</span> + <span class="n">idx2</span> <span class="o">=</span> <span class="n">ss2</span><span class="p">,</span> <span class="n">res2</span><span class="p">,</span> <span class="n">atm2</span> + <span class="n">dist</span> <span class="o">=</span> <span class="n">distmap</span><span class="o">.</span><span class="n">sort_index</span><span class="p">()</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">idx1</span><span class="p">][</span><span class="n">idx2</span><span class="p">]</span> + <span class="n">dist</span> <span class="o">=</span> <span class="n">dist</span> <span class="k">if</span> <span class="n">pd</span><span class="o">.</span><span class="n">notnull</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> <span class="ow">and</span> <span class="n">dist</span> <span class="o">!=</span> <span class="mf">0.</span> <span class="k">else</span> \ + <span class="n">distmap</span><span class="o">.</span><span class="n">sort_index</span><span class="p">()</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">idx2</span><span class="p">][</span><span class="n">idx1</span><span class="p">]</span> + <span class="k">if</span> <span class="n">pd</span><span class="o">.</span><span class="n">notnull</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> <span class="ow">and</span> <span class="n">dist</span> <span class="o">!=</span> <span class="mf">0.</span><span class="p">:</span> + <span class="n">dist_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">dist_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">defaultdist</span><span class="p">)</span> + <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">distmap</span><span class="p">)</span> <span class="o">==</span> <span class="n">ResMap</span> <span class="ow">and</span> \ + <span class="n">distmap</span><span class="o">.</span><span class="n">sequence</span> <span class="o">==</span> <span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">:</span> + <span class="k">for</span> <span class="n">contrib</span> <span class="ow">in</span> <span class="n">contribs</span><span class="p">:</span> + <span class="n">dist_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%.2f</span><span class="s2">"</span> <span class="o">%</span> <span class="n">distmap</span><span class="o">.</span><span class="n">iat</span><span class="p">[</span> + <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]])</span> + <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">distmap</span><span class="p">)</span> <span class="o">==</span> <span class="nb">float</span><span class="p">:</span> + <span class="k">return</span> <span class="n">distmap</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="n">defaultdist</span> + + <span class="c1"># Retourner la distance si elle est unique ou une valeur utilisant la</span> + <span class="c1"># methode groupby</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">dist_list</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="k">return</span> <span class="n">dist_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">elif</span> <span class="n">groupby</span> <span class="o">==</span> <span class="s2">"deff"</span><span class="p">:</span> + <span class="c1"># Compute effective distance from distance list between</span> + <span class="c1"># all pairs in the adr</span> + <span class="k">return</span> <span class="s2">"</span><span class="si">%.2f</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">deff</span><span class="p">(</span><span class="n">dist_list</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"deffpow"</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">groupby</span> <span class="o">==</span> <span class="s2">"mean"</span><span class="p">:</span> + <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">dist_list</span><span class="p">)</span> + <span class="k">elif</span> <span class="n">groupby</span> <span class="o">==</span> <span class="s2">"min"</span><span class="p">:</span> + <span class="k">return</span> <span class="nb">min</span><span class="p">(</span><span class="n">dist_list</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="n">defaultdist</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.write_map_restraint"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.write_map_restraint">[docs]</a> <span class="k">def</span> <span class="nf">write_map_restraint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protein</span><span class="p">,</span> <span class="n">contactmap</span><span class="p">,</span> <span class="n">nb_c</span><span class="p">,</span> <span class="n">targetdists</span><span class="p">,</span> + <span class="n">scoremap</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">listname</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Translate maplot in ARIA XML restraint</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> protein</span> +<span class="sd"> listname :</span> +<span class="sd"> param contactmap: ResAtmMap for a protein (Default value = "")</span> +<span class="sd"> nb_c :</span> +<span class="sd"> Number of restraints selected</span> +<span class="sd"> targetdists : dict</span> +<span class="sd"> ResAtmMap for each atom for each amino acid</span> +<span class="sd"> scoremap :</span> +<span class="sd"> sorted list of contacts (Default value = None)</span> +<span class="sd"> contactmap :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + + <span class="k">if</span> <span class="n">scoremap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="c1"># TODO: implement viterbiscore as scoremap for bbcontacts ?</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="n">scoremap</span><span class="o">.</span><span class="n">sortedset</span><span class="p">()[:</span><span class="n">nb_c</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># TODO: Probleme selection des contacts utilises en l'absence de</span> + <span class="c1"># poids:</span> + <span class="c1"># - aleatoire (implementation actuelle) => Tester la</span> + <span class="c1"># robustesse</span> + <span class="c1"># - trouver une maniere d'attribuer des poids dans le cas</span> + <span class="c1"># d'une matrice de distance d'un pdb ?</span> + <span class="c1"># - Def le max independent set dans le graphe (matrice de</span> + <span class="c1"># contacts) => utiliser tout les contact de ce set ou def des</span> + <span class="c1"># poids pour selectionner l * f contacts de ce set</span> + <span class="k">if</span> <span class="n">nb_c</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">contactmap</span><span class="o">.</span><span class="n">contactset</span><span class="p">()):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span> + <span class="s2">"Initialize sampling for contact selection with seed </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'seed'</span><span class="p">])</span> + <span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'seed'</span><span class="p">])</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">contactmap</span><span class="o">.</span><span class="n">contactset</span><span class="p">(),</span> <span class="n">nb_c</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Using all contacts"</span><span class="p">)</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="n">contactmap</span><span class="o">.</span><span class="n">contactset</span><span class="p">()[:]</span> + + <span class="n">hum_list</span> <span class="o">=</span> <span class="p">[(</span><span class="n">con1</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">con2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">con1</span><span class="p">,</span> <span class="n">con2</span> <span class="ow">in</span> <span class="n">contacts</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Selecting </span><span class="si">%d</span><span class="s2"> contacts"</span><span class="p">,</span> <span class="n">nb_c</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">textwrap</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span> + <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"(</span><span class="si">%2d</span><span class="s2">, </span><span class="si">%2d</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">pair</span> <span class="k">for</span> <span class="n">pair</span> <span class="ow">in</span> <span class="n">hum_list</span><span class="p">]),</span> <span class="n">width</span><span class="o">=</span><span class="mi">80</span><span class="p">)))</span> + + <span class="n">weight_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="mf">10.0</span> <span class="o">/</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span> + <span class="n">contacts</span><span class="p">))</span> <span class="k">if</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'evfold_weight'</span><span class="p">]</span> <span class="ow">and</span> \ + <span class="n">scoremap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="nb">list</span><span class="p">(</span><span class="mf">1.0</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">contacts</span><span class="p">)</span> + + <span class="n">neigh_flag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'neighborhood_contact'</span><span class="p">]</span> + <span class="n">adr_flag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"ambiguous_distance_restraint"</span><span class="p">]</span> + <span class="n">contribs_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"contributions_type"</span><span class="p">]</span> + <span class="n">atms_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"atoms_type"</span><span class="p">]</span> + <span class="n">default_target_dist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"restraint_distance"</span><span class="p">]</span> + <span class="c1"># TODO: Lower bound and upper bound matrix not used actually...</span> + <span class="n">targetdistmap</span> <span class="o">=</span> <span class="n">targetdists</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'INTERTARGET'</span><span class="p">)</span> + <span class="n">nat_reliable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"native_reliable"</span><span class="p">]</span> + + <span class="k">def</span> <span class="nf">resname_3l</span><span class="p">(</span><span class="n">residx</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> residx :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">contactmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">residx</span><span class="p">][</span><span class="o">-</span><span class="mi">3</span><span class="p">:])[</span><span class="mi">1</span><span class="p">]</span> + + <span class="n">max_seqidx</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">contactmap</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> + <span class="n">restraint_dict</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">()</span> + <span class="n">rest_id</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">contrib_id</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">tqdm_out</span> <span class="o">=</span> <span class="n">TqdmToLogger</span><span class="p">(</span><span class="n">LOG</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span> + <span class="k">for</span> <span class="n">contactidx</span><span class="p">,</span> <span class="n">subcontacts</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span> + <span class="n">tqdm</span><span class="p">(</span><span class="n">contacts</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">tqdm_out</span><span class="p">,</span> <span class="n">mininterval</span><span class="o">=</span><span class="mf">1.</span><span class="p">)):</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Writing restraint related to contact </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> + <span class="nb">str</span><span class="p">((</span><span class="n">subcontacts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">subcontacts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)))</span> + <span class="c1"># Get weight related to the contact</span> + <span class="n">contactweight</span> <span class="o">=</span> <span class="n">weight_list</span><span class="p">[</span><span class="n">contactidx</span><span class="p">]</span> + + <span class="c1"># Define Residue lists for the contact. Those lists contains</span> + <span class="c1"># normally only one element by default except if we introduce</span> + <span class="c1"># neighbors with neigh_flag triggered</span> + <span class="n">subcontacts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">neighcontact</span><span class="p">(</span><span class="n">subcontacts</span><span class="p">,</span> + <span class="n">max_seqidx</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">neigh_flag</span> \ + <span class="k">else</span> <span class="p">[</span><span class="n">subcontacts</span><span class="p">]</span> + + <span class="c1"># Define list of atom pairs</span> + <span class="n">contribs_lists</span> <span class="o">=</span> <span class="p">[]</span> + <span class="c1"># Compute all lists of atompair related to the contact</span> + <span class="k">for</span> <span class="n">subcontact</span> <span class="ow">in</span> <span class="n">subcontacts</span><span class="p">:</span> + <span class="n">contribs_lists</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">atm_product</span><span class="p">(</span> + <span class="n">subcontact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">resname_3l</span><span class="p">(</span><span class="n">subcontact</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">subcontact</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> + <span class="n">resname_3l</span><span class="p">(</span><span class="n">subcontact</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="n">list_type</span><span class="o">=</span><span class="n">atms_type</span><span class="p">,</span> + <span class="n">adr_flag</span><span class="o">=</span><span class="n">adr_flag</span><span class="p">,</span> <span class="n">product_type</span><span class="o">=</span><span class="n">contribs_type</span><span class="p">)</span> + + <span class="c1"># We have a unique atmpair list, trick to have a unique loop for</span> + <span class="c1"># all kind of restraints in the following</span> + <span class="n">contribs_lists</span> <span class="o">=</span> <span class="p">[</span> + <span class="n">contribs_lists</span><span class="p">,</span> <span class="p">]</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">adr_flag</span> <span class="k">else</span> <span class="n">contribs_lists</span> + + <span class="c1"># If ADR, build a restraint with contributions containing</span> + <span class="c1"># all atom pair in atmpairs => Get 1 target distance related to</span> + <span class="c1"># atmpairs list</span> + <span class="c1"># Else unambig, build a restraint with one contribution get a</span> + <span class="c1"># target distance for each atom pair</span> + <span class="k">for</span> <span class="n">contribs_list</span> <span class="ow">in</span> <span class="n">contribs_lists</span><span class="p">:</span> + <span class="n">rest_id</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="c1"># For each atom list (only one list normally if unambig restraints)</span> + <span class="c1"># If adr flag, each list is a contribution list for one restraint</span> + + <span class="k">for</span> <span class="n">contrib_idx</span><span class="p">,</span> <span class="n">contrib</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">contribs_list</span><span class="p">):</span> + + <span class="n">res1_idx</span><span class="p">,</span> <span class="n">atm1</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">res2_idx</span><span class="p">,</span> <span class="n">atm2</span> <span class="o">=</span> <span class="n">contrib</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + + <span class="c1"># Increment restraint id if not adr else keep the same</span> + <span class="c1"># restraint id for the actual contribution list</span> + <span class="n">rest_id</span> <span class="o">=</span> <span class="n">rest_id</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">contrib_idx</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">adr_flag</span> <span class="k">else</span> <span class="n">rest_id</span> + <span class="c1"># Increment contribution id if adr else reset to 1</span> + <span class="n">contrib_id</span> <span class="o">=</span> <span class="n">contrib_id</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">contrib_idx</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">adr_flag</span> <span class="k">else</span> <span class="mi">1</span> + + <span class="n">lower_bound</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"lower_bound"</span><span class="p">])</span> + <span class="n">targetdist</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">get_dist</span><span class="p">(</span><span class="n">targetdistmap</span><span class="p">,</span> <span class="n">contribs_list</span><span class="p">,</span> + <span class="n">default_target_dist</span><span class="p">,</span> <span class="n">protein</span><span class="p">))</span> <span class="k">if</span> \ + <span class="n">adr_flag</span> <span class="k">else</span> <span class="nb">float</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">get_dist</span><span class="p">(</span><span class="n">targetdistmap</span><span class="p">,</span> <span class="p">[</span><span class="n">contrib</span><span class="p">],</span> + <span class="n">default_target_dist</span><span class="p">,</span> <span class="n">protein</span><span class="p">))</span> + <span class="n">upper_bound</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"ca_upper_bound"</span><span class="p">])</span> <span class="k">if</span> \ + <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="o">==</span> <span class="p">(</span><span class="s2">"CA"</span><span class="p">,</span> <span class="s2">"CA"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">adr_flag</span> <span class="k">else</span> \ + <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"cb_upper_bound"</span><span class="p">])</span> <span class="k">if</span> \ + <span class="p">(</span><span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span><span class="p">)</span> <span class="o">==</span> <span class="p">(</span><span class="s2">"CB"</span><span class="p">,</span> <span class="s2">"CB"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">adr_flag</span> <span class="k">else</span> \ + <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"def_upper_bound"</span><span class="p">])</span> + + <span class="c1"># TODO: Better way to define upper_bound if target > upper ???</span> + <span class="n">upper_bound</span> <span class="o">=</span> <span class="n">upper_bound</span> <span class="k">if</span> <span class="n">targetdist</span> <span class="o"><=</span> <span class="n">upper_bound</span> <span class="k">else</span> \ + <span class="n">targetdist</span> <span class="o">+</span> <span class="n">lower_bound</span> + + <span class="k">if</span> <span class="n">restraint_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">rest_id</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">restraint_dict</span><span class="p">[</span><span class="n">rest_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"meta"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="n">contactweight</span><span class="p">,</span> + <span class="s2">"distance"</span><span class="p">:</span> <span class="n">targetdist</span><span class="p">,</span> + <span class="s2">"lower_bound"</span><span class="p">:</span> <span class="n">lower_bound</span><span class="p">,</span> + <span class="s2">"upper_bound"</span><span class="p">:</span> <span class="n">upper_bound</span><span class="p">,</span> + <span class="s2">"active"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"reliable"</span><span class="p">:</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">nat_reliable</span> <span class="ow">and</span> <span class="n">listname</span> <span class="ow">in</span> <span class="p">(</span> + <span class="s2">"native"</span><span class="p">,</span> <span class="s2">"native_full"</span><span class="p">,</span> <span class="s2">"pdb"</span><span class="p">)</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"list_name"</span><span class="p">:</span> <span class="n">listname</span> + <span class="p">},</span> + <span class="s2">"contrib"</span><span class="p">:</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">()</span> + <span class="p">}</span> + + <span class="n">restraint_dict</span><span class="p">[</span><span class="n">rest_id</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">][</span><span class="n">contrib_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"meta"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mf">1.0</span> + <span class="p">},</span> + <span class="s2">"spin_pair"</span><span class="p">:</span> <span class="p">{</span> + <span class="n">res1_idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span> <span class="n">atm1</span><span class="p">,</span> + <span class="n">res2_idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span> <span class="n">atm2</span> + <span class="p">}</span> + <span class="p">}</span> + + <span class="c1"># Compute xml restraint file path</span> + <span class="n">xml_file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="p">[</span><span class="s2">"xml"</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"/"</span> <span class="o">+</span> <span class="s2">"_"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">,</span> <span class="n">listname</span><span class="p">))</span> <span class="o">+</span> <span class="s2">".xml"</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Write </span><span class="si">%d</span><span class="s2"> xml distance restraints in </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">nb_c</span><span class="p">,</span> <span class="n">xml_file</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">write_dist_xml</span><span class="p">(</span><span class="n">restraint_dict</span><span class="p">,</span> <span class="n">xml_file</span><span class="p">)</span> + <span class="k">return</span> <span class="n">xml_file</span><span class="p">,</span> <span class="n">contacts</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.write_maplist_restraints"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.write_maplist_restraints">[docs]</a> <span class="k">def</span> <span class="nf">write_maplist_restraints</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">maplist</span><span class="p">,</span> <span class="n">targetmaps</span><span class="p">,</span> <span class="n">protein</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Generate ARIA XML restraints from maplist</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> maplist : list of ResAtmMap or ResMap object</span> +<span class="sd"> </span> +<span class="sd"> targetmaps : dict</span> + +<span class="sd"> protein</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">out</span> <span class="o">=</span> <span class="p">([],</span> <span class="p">[])</span> + + <span class="k">for</span> <span class="n">maptype</span> <span class="ow">in</span> <span class="n">maplist</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Writing </span><span class="si">%s</span><span class="s2"> ARIA XML distance restraints"</span><span class="p">,</span> <span class="n">maptype</span><span class="p">)</span> + <span class="n">outfile</span><span class="p">,</span> <span class="n">pairlist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">write_map_restraint</span><span class="p">(</span> + <span class="n">protein</span><span class="p">,</span> <span class="n">maplist</span><span class="p">[</span><span class="n">maptype</span><span class="p">][</span><span class="s1">'maplot'</span><span class="p">],</span> <span class="n">maplist</span><span class="p">[</span><span class="n">maptype</span><span class="p">][</span><span class="s2">"nb_c"</span><span class="p">],</span> + <span class="n">targetmaps</span><span class="p">,</span> <span class="n">listname</span><span class="o">=</span><span class="n">maptype</span><span class="p">,</span> + <span class="n">scoremap</span><span class="o">=</span><span class="n">maplist</span><span class="p">[</span><span class="n">maptype</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"scoremap"</span><span class="p">))</span> + <span class="n">out</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">outfile</span><span class="p">)</span> + <span class="n">maplist</span><span class="p">[</span><span class="n">maptype</span><span class="p">][</span><span class="s2">"filteredlist"</span><span class="p">]</span> <span class="o">=</span> <span class="n">pairlist</span> + <span class="n">out</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pairlist</span><span class="p">)</span> + <span class="k">return</span> <span class="n">out</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.write_tbl_restraints"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.write_tbl_restraints">[docs]</a> <span class="k">def</span> <span class="nf">write_tbl_restraints</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protein</span><span class="p">,</span> <span class="n">hbmap</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">n_hb</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Write tbl restraints</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> protein</span> +<span class="sd"> hbmap</span> +<span class="sd"> Extra hbond map (eg: metapsicov hbonds) (Default value = None)</span> +<span class="sd"> n_hb</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> dict</span> +<span class="sd"> {'hbond': hb_file, 'dihed': dihed_file, 'ssdist': ssdist_file}</span> +<span class="sd"> """</span> + <span class="n">dihed_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="p">[</span><span class="s2">"tbl"</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">+</span> + <span class="s2">"_dihed.tbl"</span><span class="p">)</span> + <span class="n">hb_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="p">[</span><span class="s2">"tbl"</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">+</span> + <span class="s2">"_hbond.tbl"</span><span class="p">)</span> + <span class="n">ssdist_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="p">[</span><span class="s2">"tbl"</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">+</span> + <span class="s2">"_ssdist.tbl"</span><span class="p">)</span> + <span class="k">if</span> <span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">" Dihedral restraints for secondary structures (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">dihed_file</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">write_dihedral_tbl</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">,</span> <span class="n">dihed_file</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">" Secondary structure restraints (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">ssdist_file</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">write_ssdist_tbl</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">,</span> + <span class="n">protein</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">ssdist</span><span class="p">,</span> + <span class="n">ssdist_file</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">" Helix bond restraints (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">hb_file</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">write_hb_tbl</span><span class="p">(</span><span class="n">protein</span><span class="p">,</span> <span class="n">hb_file</span><span class="p">,</span> + <span class="n">hbmap</span><span class="o">=</span><span class="n">hbmap</span><span class="p">,</span> <span class="n">n_hb</span><span class="o">=</span><span class="n">n_hb</span><span class="p">,</span> + <span class="n">lr_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'longrange_hbtype'</span><span class="p">],</span> + <span class="n">dminus</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'hb_dminus'</span><span class="p">],</span> + <span class="n">dplus</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'hb_dplus'</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">dihed_file</span> <span class="o">=</span> <span class="kc">None</span> + <span class="n">ssdist_file</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">hbmap</span><span class="p">:</span> + <span class="n">hb_file</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'hbond'</span><span class="p">:</span> <span class="n">hb_file</span><span class="p">,</span> <span class="s1">'dihed'</span><span class="p">:</span> <span class="n">dihed_file</span><span class="p">,</span> <span class="s1">'ssdist'</span><span class="p">:</span> <span class="n">ssdist_file</span><span class="p">}</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.write_ariaproject"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.write_ariaproject">[docs]</a> <span class="k">def</span> <span class="nf">write_ariaproject</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aria_template</span><span class="p">,</span> <span class="n">seqfile</span><span class="p">,</span> <span class="n">dist_files</span><span class="p">,</span> <span class="n">tbl_files</span><span class="p">,</span> + <span class="n">desclist</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Generate ariaproject.xml file</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> aria_template: str</span> +<span class="sd"> ariaproject.xml template path</span> +<span class="sd"> seqfile: str</span> +<span class="sd"> path of molecule sequence in SEQ format</span> +<span class="sd"> dist_files: list of str</span> +<span class="sd"> List of distance restraint files in ARIA XML format</span> +<span class="sd"> tbl_files: dict</span> +<span class="sd"> Distance restraint files in CNS TBL format</span> +<span class="sd"> desclist: list of str</span> +<span class="sd"> List of data descriptor for the actual run (Default value = None).</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> None</span> +<span class="sd"> """</span> + <span class="c1"># TODO: Use aria API to build project in the future</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Loading aria template file </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">aria_template</span><span class="p">)</span> + + <span class="n">molecule</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">molecule</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> + <span class="n">datas</span> <span class="o">=</span> <span class="n">desclist</span> <span class="k">if</span> <span class="n">desclist</span> <span class="k">else</span> <span class="s1">''</span> + + <span class="n">templatepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">aria_template</span><span class="p">)</span> + <span class="n">ariaproj_template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">filename</span><span class="o">=</span><span class="n">templatepath</span><span class="p">,</span> + <span class="n">module_directory</span><span class="o">=</span><span class="s2">"/tmp/mako_modules"</span><span class="p">)</span> + + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">templatepath</span><span class="p">):</span> + <span class="k">pass</span> + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">msg</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="s2">"""Can't open template file "</span><span class="si">%s</span><span class="s2">". </span><span class="si">%s</span><span class="s2">"""</span> <span class="o">%</span> + <span class="p">(</span><span class="n">templatepath</span><span class="p">,</span> <span class="n">msg</span><span class="p">))</span> + <span class="k">raise</span> + + <span class="n">aria_project_dict</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="c1"># Check if ratio cool1 / cool2 is 5:4 ... (relevant ?)</span> + <span class="c1"># steps_1 = float(self.settings.setup.config['md_parameters_steps_cool1'])</span> + <span class="c1"># steps_2 = float(self.settings.setup.config['md_parameters_steps_cool2'])</span> + <span class="c1"># if steps_1 / steps_2 != float(5) / int(4):</span> + <span class="c1"># sys.exit(</span> + <span class="c1"># 'Length of first and second cooling stages must be fixed in '</span> + <span class="c1"># 'the ratio %.2f:%.2f' % (steps_1, steps_2))</span> + + <span class="n">aria_project_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">)</span> + + <span class="n">work_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span><span class="p">)</span> + <span class="n">temp_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">aria_project_dict</span><span class="p">[</span><span class="s1">'temp_root'</span><span class="p">]),</span> + <span class="n">molecule</span><span class="p">,</span> <span class="s2">"_"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">datas</span><span class="p">))</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">work_dir</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Working dir </span><span class="si">%s</span><span class="s2"> doesn't exist."</span><span class="p">,</span> <span class="n">work_dir</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Create new directory </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">work_dir</span><span class="p">)</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">work_dir</span><span class="p">)</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Temp directory </span><span class="si">%s</span><span class="s2"> doesn't exist."</span><span class="p">,</span> <span class="n">temp_dir</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Create new directory </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">temp_dir</span><span class="p">)</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">)</span> + + <span class="n">aria_project_dict</span><span class="p">[</span><span class="s1">'working_directory'</span><span class="p">]</span> <span class="o">=</span> <span class="n">work_dir</span> + <span class="n">aria_project_dict</span><span class="p">[</span><span class="s1">'temp_root'</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp_dir</span> + + <span class="k">if</span> <span class="s2">"-o"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">aria_project_dict</span><span class="p">[</span><span class="s1">'host_command'</span><span class="p">]:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"No output file defined in host_command. You should add"</span> + <span class="s2">" the output option (-o) to your command."</span><span class="p">)</span> + + <span class="n">project</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'project_name'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">,</span> + <span class="s1">'date'</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">()</span><span class="o">.</span><span class="n">isoformat</span><span class="p">(),</span> + <span class="s1">'file_root'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">}</span> + <span class="n">aria_project_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">project</span><span class="p">)</span> + + <span class="n">data_molecule</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'molecule_file'</span><span class="p">:</span> <span class="n">seqfile</span><span class="p">}</span> + <span class="n">aria_project_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">data_molecule</span><span class="p">)</span> + + <span class="n">un_dict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> + <span class="n">am_dict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span> + + <span class="c1"># SS dist tbl restraint</span> + <span class="k">if</span> <span class="n">tbl_files</span><span class="p">[</span><span class="s2">"ssdist"</span><span class="p">]:</span> + <span class="n">un_dict</span><span class="p">[</span><span class="s1">'ss'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s1">'file'</span><span class="p">:</span> <span class="n">tbl_files</span><span class="p">[</span><span class="s2">"ssdist"</span><span class="p">],</span> + <span class="s1">'format'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'ss_dist_format'</span><span class="p">],</span> + <span class="s1">'ccpn_id'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> + <span class="s1">'enabled'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'ss_dist_enabled'</span><span class="p">],</span> + <span class="s1">'add_to_network'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'ss_dist_add_to_network'</span><span class="p">],</span> + <span class="s1">'calibrate'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'ss_dist_calibrate'</span><span class="p">],</span> + <span class="s1">'run_network_anchoring'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'ss_dist_run_network_anchoring'</span><span class="p">],</span> + <span class="s1">'filter_contributions'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'ss_dist_filter_contributions'</span><span class="p">]}</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"ambiguous_distance_restraint"</span><span class="p">]:</span> + <span class="c1"># Ajout dist_files a am_dict</span> + <span class="k">for</span> <span class="n">distfile</span> <span class="ow">in</span> <span class="n">dist_files</span><span class="p">:</span> + <span class="n">am_dict</span><span class="p">[</span><span class="n">distfile</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s1">'file'</span><span class="p">:</span> <span class="n">distfile</span><span class="p">,</span> + <span class="s1">'format'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'dist_format'</span><span class="p">],</span> + <span class="s1">'ccpn_id'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> + <span class="s1">'enabled'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'dist_enabled'</span><span class="p">],</span> + <span class="s1">'add_to_network'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'dist_add_to_network'</span><span class="p">],</span> + <span class="s1">'calibrate'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'dist_calibrate'</span><span class="p">],</span> + <span class="s1">'run_network_anchoring'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'dist_run_network_anchoring'</span><span class="p">],</span> + <span class="s1">'filter_contributions'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'dist_filter_contributions'</span><span class="p">],</span> + <span class="s1">'avg_exponent'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'dist_avg_exponent'</span><span class="p">]</span> + <span class="p">}</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Ajout dist_files a un_dict</span> + <span class="k">for</span> <span class="n">distfile</span> <span class="ow">in</span> <span class="n">dist_files</span><span class="p">:</span> + <span class="n">un_dict</span><span class="p">[</span><span class="n">distfile</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s1">'file'</span><span class="p">:</span> <span class="n">distfile</span><span class="p">,</span> + <span class="s1">'format'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'dist_format'</span><span class="p">],</span> + <span class="s1">'ccpn_id'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> + <span class="s1">'enabled'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'dist_enabled'</span><span class="p">],</span> + <span class="s1">'add_to_network'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'dist_add_to_network'</span><span class="p">],</span> + <span class="s1">'calibrate'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'dist_calibrate'</span><span class="p">],</span> + <span class="s1">'run_network_anchoring'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'dist_run_network_anchoring'</span><span class="p">],</span> + <span class="s1">'filter_contributions'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'dist_filter_contributions'</span><span class="p">]}</span> + + <span class="n">aria_project_dict</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">'unambiguous_distance_restraints'</span><span class="p">:</span> <span class="n">un_dict</span><span class="p">})</span> + <span class="n">aria_project_dict</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">'ambiguous_distance_restraints'</span><span class="p">:</span> <span class="n">am_dict</span><span class="p">})</span> + + <span class="n">aria_project_dict</span><span class="o">.</span><span class="n">update</span><span class="p">({</span> + <span class="s1">'hbond_dist_file'</span><span class="p">:</span> <span class="n">tbl_files</span><span class="p">[</span><span class="s2">"hbond"</span><span class="p">]</span> + <span class="k">if</span> <span class="n">tbl_files</span><span class="p">[</span><span class="s1">'hbond'</span><span class="p">]</span> <span class="k">else</span> <span class="kc">None</span><span class="p">})</span> + + <span class="n">aria_project_dict</span><span class="o">.</span><span class="n">update</span><span class="p">({</span> + <span class="s1">'dihed_angle_file'</span><span class="p">:</span> <span class="n">tbl_files</span><span class="p">[</span><span class="s2">"dihed"</span><span class="p">]</span> + <span class="k">if</span> <span class="n">tbl_files</span><span class="p">[</span><span class="s1">'dihed'</span><span class="p">]</span> <span class="k">else</span> <span class="kc">None</span><span class="p">})</span> + + <span class="n">aria_project_dict</span><span class="p">[</span><span class="s1">'n_cpus'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'cpus'</span><span class="p">,</span> + <span class="s1">'20'</span><span class="p">)</span> + + <span class="n">proj_file</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">/ariaproject.xml"</span> <span class="o">%</span> <span class="n">work_dir</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">proj_file</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">proj_xml</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Writing ARIA project file (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">proj_file</span><span class="p">)</span> + <span class="n">proj_xml</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">ariaproj_template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">**</span><span class="n">aria_project_dict</span><span class="p">))</span> + + <span class="c1"># TODO: Load aria project file if exists and extract data and rdc</span> + <span class="c1"># parameters (use flag in args)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">'ariaproject'</span><span class="p">]:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Reading ARIA project file"</span><span class="p">)</span> + <span class="n">ecproject</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pickler</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">proj_file</span><span class="p">)</span> + <span class="n">project</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pickler</span><span class="o">.</span><span class="n">load</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">'ariaproject'</span><span class="p">])</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">'extractall'</span><span class="p">]:</span> + <span class="c1"># Add only data to the generated project</span> + <span class="k">for</span> <span class="n">datatype</span> <span class="ow">in</span> <span class="n">DATA_TYPES</span><span class="p">:</span> + <span class="n">datas</span> <span class="o">=</span> <span class="p">[</span><span class="n">dat</span> <span class="k">for</span> <span class="n">dat</span> <span class="ow">in</span> <span class="n">project</span><span class="o">.</span><span class="n">getData</span><span class="p">(</span><span class="n">datatype</span><span class="p">)]</span> + <span class="k">if</span> <span class="n">datas</span><span class="p">:</span> + <span class="n">ecdatas</span> <span class="o">=</span> <span class="p">[</span><span class="n">dat</span> <span class="k">for</span> <span class="n">dat</span> <span class="ow">in</span> <span class="n">ecproject</span><span class="o">.</span><span class="n">getData</span><span class="p">(</span><span class="n">datatype</span><span class="p">)]</span> + <span class="k">if</span> <span class="p">[</span><span class="n">dat</span><span class="o">.</span><span class="n">as_dict</span><span class="p">()</span> <span class="k">for</span> <span class="n">dat</span> <span class="ow">in</span> <span class="n">datas</span><span class="p">]</span> <span class="o">!=</span> \ + <span class="p">[</span><span class="n">dat</span><span class="o">.</span><span class="n">as_dict</span><span class="p">()</span> <span class="k">for</span> <span class="n">dat</span> <span class="ow">in</span> <span class="n">ecdatas</span><span class="p">]:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Update </span><span class="si">%s</span><span class="s2"> data in project"</span><span class="p">,</span> <span class="n">datatype</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">datas</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Old </span><span class="si">%s</span><span class="s2"> section:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">datatype</span><span class="p">,</span> + <span class="n">ecproject</span><span class="o">.</span><span class="n">getData</span><span class="p">(</span><span class="n">datatype</span><span class="p">))</span> + <span class="c1"># TODO: check if sequence file is similar with the</span> + <span class="c1"># one generated</span> + <span class="k">if</span> <span class="n">datatype</span> <span class="o">==</span> <span class="n">DATA_SEQUENCE</span><span class="p">:</span> + <span class="p">[</span><span class="n">ecproject</span><span class="o">.</span><span class="n">delData</span><span class="p">(</span><span class="n">dat</span><span class="p">)</span> + <span class="k">for</span> <span class="n">dat</span> <span class="ow">in</span> <span class="n">ecproject</span><span class="o">.</span><span class="n">getData</span><span class="p">(</span><span class="n">datatype</span><span class="p">)]</span> + <span class="p">[</span><span class="n">ecproject</span><span class="o">.</span><span class="n">addData</span><span class="p">(</span><span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">dat</span> <span class="ow">in</span> <span class="n">datas</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Updated </span><span class="si">%s</span><span class="s2"> section:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">datatype</span><span class="p">,</span> + <span class="n">ecproject</span><span class="o">.</span><span class="n">getData</span><span class="p">(</span><span class="n">datatype</span><span class="p">))</span> + <span class="k">if</span> <span class="n">datatype</span> <span class="o">==</span> <span class="n">DATA_RDCS</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Update </span><span class="si">%s</span><span class="s2"> annealing parameters"</span><span class="p">,</span> + <span class="n">datatype</span><span class="p">)</span> + <span class="n">rdc_params</span> <span class="o">=</span> <span class="n">project</span><span class="o">.</span><span class="n">getStructureEngine</span><span class="p">()</span><span class="o">.</span><span class="n">getAnnealingParameters</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="n">DATA_ANNEALING_RDC</span><span class="p">)</span> + <span class="n">engine</span> <span class="o">=</span> <span class="n">ecproject</span><span class="o">.</span><span class="n">getStructureEngine</span><span class="p">()</span> + <span class="n">annealing</span> <span class="o">=</span> <span class="n">engine</span><span class="o">.</span><span class="n">getAnnealingParameters</span><span class="p">()</span> + <span class="n">annealing</span><span class="p">[</span><span class="n">DATA_ANNEALING_RDC</span><span class="p">]</span> <span class="o">=</span> <span class="n">rdc_params</span> + <span class="n">engine</span><span class="o">.</span><span class="n">setAnnealingParameters</span><span class="p">(</span><span class="n">annealing</span><span class="p">)</span> + <span class="n">ecproject</span><span class="o">.</span><span class="n">setStructureEngine</span><span class="p">(</span><span class="n">engine</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Writing new ARIA xml file (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">proj_file</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_pickler</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">ecproject</span><span class="p">,</span> <span class="n">proj_file</span><span class="p">)</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.tbl2xml"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.tbl2xml">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">tbl2xml</span><span class="p">(</span><span class="n">outdir_path</span><span class="p">,</span> <span class="n">molecule_path</span><span class="p">,</span> <span class="n">tbl_paths</span><span class="p">,</span> <span class="n">list_name</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Read cns distance restraints in TBL format and convert them into ARIA</span> +<span class="sd"> XML format</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> outdir_path : str</span> +<span class="sd"> Path where ARIA XML files are saved </span> +<span class="sd"> molecule_path : str</span> +<span class="sd"> Path of molecule file in ARIA XML format </span> +<span class="sd"> tbl_paths : list of str</span> +<span class="sd"> List of distance restraints paths</span> +<span class="sd"> list_name : str</span> +<span class="sd"> Name of spec in tbl file which will be converted into XML format</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> xml_paths: str</span> +<span class="sd"> List of distance restraints in ARIA XML format</span> +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">pickler</span> <span class="o">=</span> <span class="n">AriaXMLPickler</span><span class="p">()</span> + <span class="n">molecule</span> <span class="o">=</span> <span class="n">pickler</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">molecule_path</span><span class="p">)</span> + <span class="n">convtable</span> <span class="o">=</span> <span class="n">ConversionTable</span><span class="p">()</span> + <span class="n">xml_paths</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="c1"># Read tbl file(s) and build dist_restraints dict</span> + <span class="k">for</span> <span class="n">tbl_path</span> <span class="ow">in</span> <span class="n">tbl_paths</span><span class="p">:</span> + + <span class="n">tbl</span> <span class="o">=</span> <span class="n">TblDistFile</span><span class="p">(</span><span class="n">tbl_path</span><span class="p">)</span> + <span class="n">tbl</span><span class="o">.</span><span class="n">load</span><span class="p">()</span> + <span class="n">xml_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="n">outdir_path</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">tbl_path</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"_restraints.xml"</span><span class="p">)</span> + + <span class="n">xmldists</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">()</span> + <span class="n">restno</span> <span class="o">=</span> <span class="kc">None</span> + <span class="n">listflag</span> <span class="o">=</span> <span class="kc">False</span> + + <span class="k">for</span> <span class="n">idline</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">iteritems</span><span class="p">(</span><span class="n">tbl</span><span class="o">.</span><span class="n">lines</span><span class="p">):</span> + + <span class="n">assign_flag</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="s2">"assign"</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"restflag"</span><span class="p">)</span> <span class="k">else</span> <span class="kc">False</span> + <span class="n">res1_id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"resid1"</span><span class="p">))</span> + <span class="n">res2_id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"resid2"</span><span class="p">))</span> + <span class="n">res1</span> <span class="o">=</span> <span class="n">molecule</span><span class="o">.</span><span class="n">getChain</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"segid1"</span><span class="p">))[</span><span class="n">res1_id</span><span class="p">]</span> + <span class="n">res2</span> <span class="o">=</span> <span class="n">molecule</span><span class="o">.</span><span class="n">getChain</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"segid2"</span><span class="p">))[</span><span class="n">res2_id</span><span class="p">]</span> + + <span class="c1"># Convert atom name</span> + <span class="c1"># TBL file follow cns nomenclature for atom names</span> + <span class="c1"># ARIA XML distance restraints follow iupac names</span> + <span class="n">atm1_name</span> <span class="o">=</span> <span class="n">convtable</span><span class="o">.</span><span class="n">convert_atom</span><span class="p">(</span> + <span class="n">res1</span><span class="o">.</span><span class="n">getType</span><span class="p">(),</span> <span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"atm1"</span><span class="p">),</span> <span class="s1">'cns'</span><span class="p">,</span> <span class="s1">'iupac'</span><span class="p">,</span> + <span class="s1">'AMINO_ACID'</span><span class="p">)</span> + <span class="n">atm2_name</span> <span class="o">=</span> <span class="n">convtable</span><span class="o">.</span><span class="n">convert_atom</span><span class="p">(</span> + <span class="n">res2</span><span class="o">.</span><span class="n">getType</span><span class="p">(),</span> <span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"atm2"</span><span class="p">),</span> <span class="s1">'cns'</span><span class="p">,</span> <span class="s1">'iupac'</span><span class="p">,</span> + <span class="s1">'AMINO_ACID'</span><span class="p">)</span> + + <span class="c1"># If assign flag, initialize a new restraint</span> + <span class="k">if</span> <span class="n">assign_flag</span><span class="p">:</span> + <span class="n">listflag</span> <span class="o">=</span> <span class="kc">False</span> + <span class="n">restno</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"restno"</span><span class="p">)</span> + <span class="n">restlistname</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"listname"</span><span class="p">)</span> + <span class="k">if</span> <span class="n">list_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">restlistname</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> + <span class="n">listflag</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">dtarg</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"dtarget"</span><span class="p">))</span> + <span class="n">lwbound</span> <span class="o">=</span> <span class="n">dtarg</span> <span class="o">-</span> <span class="nb">float</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"dminus"</span><span class="p">))</span> + <span class="n">upbound</span> <span class="o">=</span> <span class="n">dtarg</span> <span class="o">+</span> <span class="nb">float</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"dplus"</span><span class="p">))</span> + <span class="n">xmldists</span><span class="p">[</span><span class="n">restno</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"meta"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"weight"</span><span class="p">)),</span> + <span class="s2">"distance"</span><span class="p">:</span> <span class="n">dtarg</span><span class="p">,</span> + <span class="s2">"lower_bound"</span><span class="p">:</span> <span class="n">lwbound</span><span class="p">,</span> + <span class="s2">"upper_bound"</span><span class="p">:</span> <span class="n">upbound</span><span class="p">,</span> + <span class="s2">"active"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"reliable"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"list_name"</span><span class="p">:</span> <span class="n">restlistname</span> + <span class="p">},</span> + <span class="s2">"contrib"</span><span class="p">:</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">()</span> + <span class="p">}</span> + <span class="n">contrib_id</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">xmldists</span><span class="p">[</span><span class="n">restno</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">xmldists</span><span class="p">[</span><span class="n">restno</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">][</span><span class="n">contrib_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"meta"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mf">1.0</span> + <span class="p">},</span> + <span class="s2">"spin_pair"</span><span class="p">:</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">([</span> + <span class="p">(</span><span class="n">res1_id</span><span class="p">,</span> <span class="n">atm1_name</span><span class="p">),</span> + <span class="p">(</span><span class="n">res2_id</span><span class="p">,</span> <span class="n">atm2_name</span><span class="p">)</span> + <span class="p">])</span> + <span class="p">}</span> + <span class="c1"># Else add contrib to restraint</span> + <span class="k">elif</span> <span class="n">listflag</span><span class="p">:</span> + <span class="n">contrib_id</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">xmldists</span><span class="p">[</span><span class="n">restno</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">xmldists</span><span class="p">[</span><span class="n">restno</span><span class="p">][</span><span class="s2">"contrib"</span><span class="p">][</span><span class="n">contrib_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"meta"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mf">1.0</span> + <span class="p">},</span> + <span class="s2">"spin_pair"</span><span class="p">:</span> <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="p">([</span> + <span class="p">(</span><span class="n">res1_id</span><span class="p">,</span> <span class="n">atm1_name</span><span class="p">),</span> + <span class="p">(</span><span class="n">res2_id</span><span class="p">,</span> <span class="n">atm2_name</span><span class="p">)</span> + <span class="p">])</span> + <span class="p">}</span> + + <span class="c1"># Generate distance restraint file using self.write_dist_xml</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">xmldists</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Wrote </span><span class="si">%d</span><span class="s2"> xml distance restraints in </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="nb">len</span><span class="p">(</span><span class="n">xmldists</span><span class="p">),</span> + <span class="n">xml_path</span><span class="p">)</span> + <span class="n">AriaXMLConverter</span><span class="o">.</span><span class="n">write_dist_xml</span><span class="p">(</span><span class="n">xmldists</span><span class="p">,</span> <span class="n">xml_path</span><span class="p">)</span> + <span class="n">xml_paths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">xml_path</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">xml_paths</span></div> + +<div class="viewcode-block" id="AriaEcXMLConverter.run_tbl2xml"><a class="viewcode-back" href="../../ariaec.html#ariaec.converter.AriaEcXMLConverter.run_tbl2xml">[docs]</a> <span class="k">def</span> <span class="nf">run_tbl2xml</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Main command to convert tbl file(s) in ARIA XML Format"""</span> + <span class="c1"># Check if we have the correct args in self.settings</span> + <span class="n">outdir_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">tbl2xml</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">]</span> + <span class="n">molecule_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">tbl2xml</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"molecule"</span><span class="p">]</span> + <span class="n">tbl_paths</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">tbl2xml</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"infiles"</span><span class="p">]</span> + <span class="n">list_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">tbl2xml</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"listname"</span><span class="p">]</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">tbl2xml</span><span class="p">(</span><span class="n">outdir_path</span><span class="p">,</span> <span class="n">molecule_path</span><span class="p">,</span> <span class="n">tbl_paths</span><span class="p">,</span> <span class="n">list_name</span><span class="p">)</span></div></div> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/maplot.html b/examples-dev/olds/_build/html/_modules/ariaec/maplot.html new file mode 100644 index 0000000..e4f1784 --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/maplot.html @@ -0,0 +1,425 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.maplot — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.maplot</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.maplot</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Input/Output aria_ec scripts</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> + +<span class="kn">import</span> <span class="nn">sys</span> +<span class="kn">import</span> <span class="nn">json</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">get_filename</span> +<span class="kn">from</span> <span class="nn">.reader</span> <span class="k">import</span> <span class="n">MapFileListReader</span> +<span class="kn">from</span> <span class="nn">.protmap</span> <span class="k">import</span> <span class="n">MapFilter</span> +<span class="kn">from</span> <span class="nn">.protein</span> <span class="k">import</span> <span class="n">Protein</span> + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="AriaEcContactMap"><a class="viewcode-back" href="../../ariaec.html#ariaec.maplot.AriaEcContactMap">[docs]</a><span class="k">class</span> <span class="nc">AriaEcContactMap</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Contact maplot class"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> + <span class="c1"># TODO: check_type settings (AriaEcSettings)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span> <span class="o">=</span> <span class="n">Protein</span><span class="p">(</span><span class="n">settings</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">file_reader</span> <span class="o">=</span> <span class="n">MapFileListReader</span><span class="p">(</span> + <span class="n">cont_def</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">contactdef</span><span class="o">.</span><span class="n">config</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filter</span> <span class="o">=</span> <span class="n">MapFilter</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">,</span> + <span class="n">nofilter</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"no_filter"</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protname</span> <span class="o">=</span> <span class="s1">''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">refmap</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">refname</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reftype</span> <span class="o">=</span> <span class="s1">''</span> + +<div class="viewcode-block" id="AriaEcContactMap.run"><a class="viewcode-back" href="../../ariaec.html#ariaec.maplot.AriaEcContactMap.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Contact map analysis command"""</span> + <span class="c1"># Check input</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Settings:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">config</span><span class="p">,</span> + <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Args:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> + <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"onlyreport"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">make_infra</span><span class="p">()</span> + <span class="c1"># ----------------------------- Input -------------------------------- #</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protname</span> <span class="o">=</span> <span class="n">get_filename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> + <span class="c1"># Load Sequence file</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">set_aa_sequence</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> + <span class="c1"># Load secondary structure prediction file</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">set_sec_struct</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sspred"</span><span class="p">,</span> + <span class="kc">None</span><span class="p">),</span> + <span class="n">ssdist_filename</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">ssdist</span><span class="p">,</span> + <span class="n">ssidx</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"ssidx"</span><span class="p">,</span> <span class="kc">False</span><span class="p">))</span> + <span class="c1"># ---------------------------- Processing ---------------------------- #</span> + + <span class="c1"># Reading step</span> + <span class="c1"># ------------</span> + <span class="bp">self</span><span class="o">.</span><span class="n">file_reader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"infiles"</span><span class="p">),</span> + <span class="n">maptypes</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"contact_types"</span><span class="p">),</span> + <span class="n">protein</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> + <span class="n">groupby_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'groupby_method'</span><span class="p">],</span> + <span class="n">scsc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">fo</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_reader</span><span class="o">.</span><span class="n">maps</span><span class="p">):</span> + <span class="c1"># fo need a maplot in order to wite XML dist restraints</span> + <span class="c1"># TODO: filter pour toutes les map de mapdict !! (fonction remove</span> + <span class="c1"># s'applique sur l'humanidx contenant les residus)</span> + <span class="k">if</span> <span class="n">idx</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> map set as reference"</span><span class="p">,</span> <span class="n">fo</span><span class="o">.</span><span class="n">filetype</span><span class="o">.</span><span class="n">capitalize</span><span class="p">())</span> + <span class="bp">self</span><span class="o">.</span><span class="n">refmap</span> <span class="o">=</span> <span class="n">fo</span><span class="o">.</span><span class="n">mapdict</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reftype</span> <span class="o">=</span> <span class="n">fo</span><span class="o">.</span><span class="n">filetype</span> + <span class="bp">self</span><span class="o">.</span><span class="n">refname</span> <span class="o">=</span> <span class="n">fo</span><span class="o">.</span><span class="n">filename</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">list</span> \ + <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> + + <span class="c1"># Filtering step</span> + <span class="c1"># --------------</span> + <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"filter"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">idx</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> \ + <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"filter"</span><span class="p">)</span> + <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_reader</span><span class="o">.</span><span class="n">maps</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span> + <span class="c1"># Filtering all maplot except the reference map</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Filtering </span><span class="si">%s</span><span class="s2"> map"</span><span class="p">,</span> <span class="n">fo</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">fo</span><span class="o">.</span><span class="n">mapdict</span><span class="p">,</span> <span class="n">fo</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> <span class="n">fo</span><span class="o">.</span><span class="n">contactlist</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> <span class="n">clashlist</span><span class="o">=</span><span class="n">fo</span><span class="o">.</span><span class="n">clashlist</span><span class="p">,</span> + <span class="n">outprefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">)</span> <span class="o">==</span> <span class="nb">list</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">,</span> + <span class="n">outdir</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span><span class="p">)</span> + <span class="c1"># else:</span> + <span class="c1"># Use only position filter</span> + <span class="c1"># self.filter(fo.mapdict, fo.filetype, fo.contactlist,</span> + <span class="c1"># self.protein, clashlist=fo.clashlist,</span> + <span class="c1"># protname=self.protname,</span> + <span class="c1"># outdir=self.settings.outdir, mapfilters="pos")</span> + + <span class="c1"># Save the loaded map into allresmap dict</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[(</span><span class="n">fo</span><span class="o">.</span><span class="n">filename</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">list</span> <span class="k">else</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">[</span><span class="n">idx</span><span class="p">],</span> <span class="n">fo</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> + <span class="n">fo</span><span class="o">.</span><span class="n">filepath</span><span class="p">)]</span> <span class="o">=</span> <span class="n">fo</span><span class="o">.</span><span class="n">mapdict</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">refmap</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">refmap</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span> + <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"First contact map should be a valid file"</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + + <span class="c1"># nb_c = int(len(self.protein.aa_sequence.sequence) *</span> + <span class="c1"># self.settings.setup.config.get("n_factor"))</span> + <span class="n">plotparams</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> + <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'size_fig'</span><span class="p">,</span> <span class="s1">'plot_ext'</span><span class="p">,</span> <span class="s1">'plot_dpi'</span><span class="p">)}</span> + <span class="n">outdir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span> + + <span class="c1"># Reference contact map plot</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"save_fig"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"onlyreport"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> + <span class="n">refmap</span><span class="o">.</span><span class="n">saveplot</span><span class="p">(</span><span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">,</span> + <span class="n">outprefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">)</span> <span class="o">==</span> <span class="nb">list</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">,</span> + <span class="o">**</span><span class="n">plotparams</span><span class="p">)</span> + + <span class="c1"># Merge maps if asked by the user</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"merge"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span> + <span class="c1"># Combine map with other maps</span> + <span class="n">mergelist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"merge"</span><span class="p">)</span> + <span class="c1"># LOG.info("Merging contact maps (%s)" % ', '.join(mergelist))</span> + <span class="k">for</span> <span class="n">mergetype</span> <span class="ow">in</span> <span class="n">mergelist</span><span class="p">:</span> + <span class="k">if</span> <span class="n">mergetype</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="o">.</span><span class="n">keys</span><span class="p">())[</span><span class="mi">0</span><span class="p">]:</span> + <span class="n">mergemaps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">mergetype</span><span class="p">)</span> + <span class="n">mergecontactmap</span> <span class="o">=</span> <span class="n">mergemaps</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"maplot"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">mapname</span><span class="p">,</span> <span class="n">mapt</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> + <span class="k">if</span> <span class="n">mapt</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reftype</span><span class="p">:</span> + <span class="c1"># TODO: DON'T WORK !!!!</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Merging </span><span class="si">%s</span><span class="s2"> with </span><span class="si">%s</span><span class="s2"> map"</span><span class="p">,</span> + <span class="n">mergetype</span><span class="p">,</span> <span class="n">mapt</span><span class="p">)</span> + <span class="n">up_map</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="n">mapt</span><span class="p">][</span><span class="s2">"maplot"</span><span class="p">]</span> + <span class="n">up_map</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">up_map</span><span class="p">[:]</span> <span class="o">+</span> <span class="n">mergecontactmap</span><span class="p">[:]</span> + <span class="n">mergekey</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">_</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">mapt</span><span class="p">,</span> <span class="n">mergetype</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="n">mergekey</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="n">mergekey</span><span class="p">][</span><span class="s2">"maplot"</span><span class="p">]</span> <span class="o">=</span> <span class="n">up_map</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span> + + <span class="c1"># ------------------------------ Output ------------------------------ #</span> + + <span class="k">for</span> <span class="n">mapname</span><span class="p">,</span> <span class="n">mapt</span><span class="p">,</span> <span class="n">mapath</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> + <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prefix"</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prefix"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">""</span> + + <span class="k">if</span> <span class="n">mapname</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">refname</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"onlyreport"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> + <span class="n">refmap</span><span class="o">.</span><span class="n">write_contacts</span><span class="p">(</span><span class="n">mapname</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span> + <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">,</span> + <span class="n">scoremap</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">refmap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"scoremap"</span><span class="p">,</span> + <span class="kc">None</span><span class="p">))</span> + <span class="k">continue</span> + + <span class="n">prefix</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">_</span><span class="si">%s</span><span class="s2">vs</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">protname</span><span class="p">,</span> <span class="n">mapt</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">reftype</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prefix"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">""</span> + <span class="n">scoremap</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[(</span><span class="n">mapname</span><span class="p">,</span> <span class="n">mapt</span><span class="p">,</span> <span class="n">mapath</span><span class="p">)]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s1">'scoremap'</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> + <span class="c1"># if self.allresmap[mapt].get("maplot") is not None and \</span> + <span class="c1"># self.allresmap[mapt].get("scoremap") is not None:</span> + <span class="c1"># Get top contact map/list</span> + <span class="c1"># cmpmap = self.allresmap[mapt]["maplot"].topmap(</span> + <span class="c1"># self.allresmap[mapt]["scoremap"], nb_c)</span> + <span class="c1"># cmplist = self.allresmap[mapt]['scoremap'].sortedset(</span> + <span class="c1"># human_idx=True)[:nb_c]</span> + <span class="c1"># elif self.allresmap[mapt].get("maplot") is not None:</span> + <span class="c1"># If no score given, use all contact list</span> + <span class="n">cmpmap</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[(</span><span class="n">mapname</span><span class="p">,</span> <span class="n">mapt</span><span class="p">,</span> <span class="n">mapath</span><span class="p">)][</span><span class="s2">"maplot"</span><span class="p">]</span> + <span class="n">cmplist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[(</span><span class="n">mapname</span><span class="p">,</span> <span class="n">mapt</span><span class="p">,</span> <span class="n">mapath</span><span class="p">)][</span> + <span class="s1">'maplot'</span><span class="p">]</span><span class="o">.</span><span class="n">contact_list</span><span class="p">(</span><span class="n">human_idx</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="c1"># else:</span> + <span class="c1"># LOG.warning("%s map doesn't have any score related. Can't "</span> + <span class="c1"># "define top list related to this map", mapt)</span> + <span class="c1"># continue</span> + + <span class="c1"># TODO: only one function for output files</span> + <span class="c1"># Write contact list in txt file</span> + <span class="n">refmap</span><span class="o">.</span><span class="n">report</span><span class="p">(</span><span class="n">cmpmap</span><span class="p">,</span> <span class="n">scoremap</span><span class="o">=</span><span class="n">scoremap</span><span class="p">,</span> + <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">,</span> <span class="n">outprefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span> + <span class="n">plotag</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"onlyreport"</span><span class="p">),</span> + <span class="n">plotdir</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"graphics"</span><span class="p">,</span> <span class="n">outdir</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"onlyreport"</span><span class="p">)</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">outdir</span><span class="p">)</span> + <span class="c1"># Contact map comparison plot</span> + <span class="c1"># TODO: elementwise error with compare method</span> + <span class="c1"># Write cmp stats</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"onlyreport"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> + <span class="n">cmpmap</span><span class="o">.</span><span class="n">write_contacts</span><span class="p">(</span><span class="n">mapname</span><span class="p">,</span> + <span class="n">scoremap</span><span class="o">=</span><span class="n">scoremap</span><span class="p">,</span> + <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">)</span> + <span class="n">cmpmap</span><span class="o">.</span><span class="n">compare_contactmap</span><span class="p">(</span><span class="n">refmap</span><span class="p">,</span> <span class="n">cmplist</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> + <span class="n">distmap</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">refmap</span><span class="p">[</span><span class="s2">"distmap"</span><span class="p">],</span> + <span class="n">human_idx</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">)</span> + <span class="n">refmap</span><span class="o">.</span><span class="n">compareplot</span><span class="p">(</span><span class="n">cmpmap</span><span class="p">,</span> <span class="n">outprefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span> + <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">,</span> + <span class="n">save_fig</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"save_fig"</span><span class="p">),</span> + <span class="n">alpha</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"alpha"</span><span class="p">),</span> + <span class="o">**</span><span class="n">plotparams</span><span class="p">)</span></div></div> + <span class="c1"># Contingency table</span> + <span class="c1"># print(cmpmap.to_series())</span> + <span class="c1"># LOG.info(pd.crosstab(cmpmap.values, refmap.values,</span> + <span class="c1"># rownames=[mapt], colnames=[self.reftype]))</span> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/ndconv.html b/examples-dev/olds/_build/html/_modules/ariaec/ndconv.html new file mode 100644 index 0000000..139d782 --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/ndconv.html @@ -0,0 +1,385 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.ndconv — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.ndconv</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.ndconv</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Network deconvolution tool</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> + +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> + + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="net_deconv"><a class="viewcode-back" href="../../ariaec.html#ariaec.ndconv.net_deconv">[docs]</a><span class="k">def</span> <span class="nf">net_deconv</span><span class="p">(</span><span class="n">npmat</span><span class="p">,</span> <span class="n">beta</span><span class="o">=</span><span class="mf">0.99</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">control</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> This is a python implementation/translation of network deconvolution by</span> +<span class="sd"> MIT-KELLIS LAB</span> +<span class="sd"> </span> +<span class="sd"> </span> +<span class="sd"> LICENSE: MIT-KELLIS LAB</span> +<span class="sd"> </span> +<span class="sd"> </span> +<span class="sd"> AUTHORS:</span> +<span class="sd"> Algorithm was programmed by Soheil Feizi.</span> +<span class="sd"> Paper authors are S. Feizi, D. Marbach, M. Medard and M. Kellis</span> +<span class="sd"> Python implementation: Gideon Rosenthal</span> +<span class="sd"> </span> +<span class="sd"> REFERENCES:</span> +<span class="sd"> For more details, see the following paper:</span> +<span class="sd"> Network Deconvolution as a General Method to Distinguish</span> +<span class="sd"> Direct Dependencies over Networks</span> +<span class="sd"> By: Soheil Feizi, Daniel Marbach, Muriel Medard and Manolis Kellis</span> +<span class="sd"> Nature Biotechnology</span> +<span class="sd"> </span> +<span class="sd"> --------------------------------------------------------------------------</span> +<span class="sd"> ND.m: network deconvolution</span> +<span class="sd"> --------------------------------------------------------------------------</span> +<span class="sd"> </span> +<span class="sd"> DESCRIPTION:</span> +<span class="sd"> </span> +<span class="sd"> USAGE:</span> +<span class="sd"> mat_nd = ND(npmat)</span> +<span class="sd"> mat_nd = ND(npmat,beta)</span> +<span class="sd"> mat_nd = ND(npmat,beta,alpha,control)</span> +<span class="sd"> </span> +<span class="sd"> </span> +<span class="sd"> INPUT ARGUMENTS:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> npmat :</span> +<span class="sd"> Input matrix, if it is a square matrix, the program assumes</span> +<span class="sd"> it is a relevance matrix where npmat(i,j) represents the</span> +<span class="sd"> similarity content between nodes i and j. Elements of</span> +<span class="sd"> matrix should be non-negative.</span> +<span class="sd"> optional parameters:</span> +<span class="sd"> beta :</span> +<span class="sd"> Scaling parameter, the program maps the largest absolute</span> +<span class="sd"> eigenvalue of the direct dependency matrix to beta. It</span> +<span class="sd"> should be between 0 and 1. (Default value = 0.99)</span> +<span class="sd"> alpha :</span> +<span class="sd"> fraction of edges of the observed dependency matrix to be</span> +<span class="sd"> kept in deconvolution process. (Default value = 1)</span> +<span class="sd"> control :</span> +<span class="sd"> if 0, displaying direct weights for observed</span> +<span class="sd"> interactions, if 1, displaying direct weights for both</span> +<span class="sd"> observed and</span> +<span class="sd"> non-observed interactions.</span> +<span class="sd"> OUTPUT ARGUMENTS:</span> +<span class="sd"> mat_nd Output deconvolved matrix (direct dependency matrix). Its</span> +<span class="sd"> components</span> +<span class="sd"> represent direct edge weights of observed interactions.</span> +<span class="sd"> Choosing top direct interactions (a cut-off) depends on</span> +<span class="sd"> the application and</span> +<span class="sd"> is not implemented in this code.</span> +<span class="sd"> To apply ND on regulatory networks, follow steps explained in</span> +<span class="sd"> Supplementary notes</span> +<span class="sd"> 1.4.1 and 2.1 and 2.3 of the paper.</span> +<span class="sd"> In this implementation, input matrices are made symmetric.</span> +<span class="sd"> **************************************************************************</span> +<span class="sd"> loading scaling and thresholding parameters (Default value = 0)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="kn">import</span> <span class="nn">scipy.stats.mstats</span> <span class="k">as</span> <span class="nn">stat</span> + <span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">linalg</span> <span class="k">as</span> <span class="n">la</span> + + <span class="k">if</span> <span class="n">beta</span> <span class="o">>=</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">beta</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s1">'error: beta should be in (0,1)'</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">alpha</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">alpha</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s1">'error: alpha should be in (0,1)'</span><span class="p">)</span> + + <span class="sd">'''</span> +<span class="sd"> ***********************************</span> +<span class="sd"> Processing the input matrix</span> +<span class="sd"> diagonal values are filtered</span> +<span class="sd"> '''</span> + + <span class="c1"># n = npmat.shape[0]</span> + <span class="n">np</span><span class="o">.</span><span class="n">fill_diagonal</span><span class="p">(</span><span class="n">npmat</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> + + <span class="sd">'''</span> +<span class="sd"> Thresholding the input matrix</span> +<span class="sd"> '''</span> + <span class="n">y</span> <span class="o">=</span> <span class="n">stat</span><span class="o">.</span><span class="n">mquantiles</span><span class="p">(</span><span class="n">npmat</span><span class="p">[:],</span> <span class="n">prob</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span> <span class="o">-</span> <span class="n">alpha</span><span class="p">])</span> + <span class="n">th</span> <span class="o">=</span> <span class="n">npmat</span> <span class="o">>=</span> <span class="n">y</span> + <span class="n">mat_th</span> <span class="o">=</span> <span class="n">npmat</span> <span class="o">*</span> <span class="n">th</span> + + <span class="sd">'''</span> +<span class="sd"> making the matrix symetric if already not</span> +<span class="sd"> '''</span> + <span class="n">mat_th</span> <span class="o">=</span> <span class="p">(</span><span class="n">mat_th</span> <span class="o">+</span> <span class="n">mat_th</span><span class="o">.</span><span class="n">T</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span> + + <span class="sd">'''</span> +<span class="sd"> ***********************************</span> +<span class="sd"> eigen decomposition</span> +<span class="sd"> '''</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'Decomposition and deconvolution...'</span><span class="p">)</span> + + <span class="c1"># noinspection PyTypeChecker</span> + <span class="n">dv</span><span class="p">,</span> <span class="n">u</span> <span class="o">=</span> <span class="n">la</span><span class="o">.</span><span class="n">eigh</span><span class="p">(</span><span class="n">mat_th</span><span class="p">)</span> + <span class="n">d</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">dv</span><span class="p">)</span> + <span class="n">lam_n</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">d</span><span class="p">)),</span> <span class="mi">0</span><span class="p">))</span> + <span class="n">lam_p</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">d</span><span class="p">)),</span> <span class="mi">0</span><span class="p">))</span> + + <span class="n">m1</span> <span class="o">=</span> <span class="n">lam_p</span> <span class="o">*</span> <span class="p">(</span><span class="mi">1</span> <span class="o">-</span> <span class="n">beta</span><span class="p">)</span> <span class="o">/</span> <span class="n">beta</span> + <span class="n">m2</span> <span class="o">=</span> <span class="n">lam_n</span> <span class="o">*</span> <span class="p">(</span><span class="mi">1</span> <span class="o">+</span> <span class="n">beta</span><span class="p">)</span> <span class="o">/</span> <span class="n">beta</span> + <span class="n">m</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">m1</span><span class="p">,</span> <span class="n">m2</span><span class="p">)</span> + + <span class="c1"># network deconvolution</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span> + <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="p">])</span> <span class="o">/</span> <span class="p">(</span><span class="n">m</span> <span class="o">+</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="p">])</span> + + <span class="n">mat_new1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">la</span><span class="o">.</span><span class="n">inv</span><span class="p">(</span><span class="n">u</span><span class="p">)))</span> + + <span class="sd">'''</span> + +<span class="sd"> ***********************************</span> +<span class="sd"> displaying direct weights</span> +<span class="sd"> '''</span> + <span class="k">if</span> <span class="n">control</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">ind_edges</span> <span class="o">=</span> <span class="p">(</span><span class="n">mat_th</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="o">*</span> <span class="mf">1.0</span> + <span class="n">ind_nonedges</span> <span class="o">=</span> <span class="p">(</span><span class="n">mat_th</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="o">*</span> <span class="mf">1.0</span> + <span class="n">m1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">npmat</span> <span class="o">*</span> <span class="n">ind_nonedges</span><span class="p">))</span> + <span class="n">m2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mat_new1</span><span class="p">))</span> + <span class="n">mat_new2</span> <span class="o">=</span> <span class="p">(</span><span class="n">mat_new1</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">m1</span> <span class="o">-</span> <span class="n">m2</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span> <span class="o">*</span> <span class="n">ind_edges</span> <span class="o">+</span> <span class="p">(</span> + <span class="n">npmat</span> <span class="o">*</span> <span class="n">ind_nonedges</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">m2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mat_new1</span><span class="p">))</span> + <span class="n">mat_new2</span> <span class="o">=</span> <span class="p">(</span><span class="n">mat_new1</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="o">-</span><span class="n">m2</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span> + + <span class="sd">'''</span> +<span class="sd"> ***********************************</span> +<span class="sd"> linearly mapping the deconvolved matrix to be between 0 and 1</span> +<span class="sd"> '''</span> + <span class="n">m1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mat_new2</span><span class="p">))</span> + <span class="n">m2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mat_new2</span><span class="p">))</span> + <span class="n">mat_nd</span> <span class="o">=</span> <span class="p">(</span><span class="n">mat_new2</span> <span class="o">-</span> <span class="n">m1</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">m2</span> <span class="o">-</span> <span class="n">m1</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">mat_nd</span></div> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/pdbdist.html b/examples-dev/olds/_build/html/_modules/ariaec/pdbdist.html new file mode 100644 index 0000000..e669fdc --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/pdbdist.html @@ -0,0 +1,646 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.pdbdist — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.pdbdist</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.pdbdist</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> PDB distance distribution generation</span> +<span class="sd">"""</span> + +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">sys</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span> +<span class="kn">import</span> <span class="nn">pbxplore</span> <span class="k">as</span> <span class="nn">pbx</span> +<span class="kn">from</span> <span class="nn">glob</span> <span class="k">import</span> <span class="n">glob</span> + +<span class="kn">from</span> <span class="nn">Bio.PDB</span> <span class="k">import</span> <span class="n">PDBList</span><span class="p">,</span> <span class="n">PDBParser</span><span class="p">,</span> <span class="n">Selection</span><span class="p">,</span> <span class="n">is_aa</span><span class="p">,</span> <span class="n">NeighborSearch</span><span class="p">,</span> \ + <span class="n">MMCIFParser</span> +<span class="kn">from</span> <span class="nn">Bio.PDB.DSSP</span> <span class="k">import</span> <span class="n">dssp_dict_from_pdb_file</span> +<span class="kn">from</span> <span class="nn">future.utils</span> <span class="k">import</span> <span class="n">iteritems</span> +<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">defaultdict</span><span class="p">,</span> <span class="n">OrderedDict</span> + +<span class="c1"># from .base import ppdict</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">Capturing</span> +<span class="kn">from</span> <span class="nn">.reader</span> <span class="k">import</span> <span class="n">CulledPdbFile</span> +<span class="kn">from</span> <span class="nn">.protmap</span> <span class="k">import</span> <span class="n">ResAtmMap</span> + +<span class="kn">from</span> <span class="nn">aria.legacy.AminoAcid</span> <span class="k">import</span> <span class="n">AminoAcid</span> + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="PDBDist"><a class="viewcode-back" href="../../ariaec.html#ariaec.pdbdist.PDBDist">[docs]</a><span class="k">class</span> <span class="nc">PDBDist</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Extract pdb distance distribution from culled list of pdb files provided by</span> +<span class="sd"> PICSES server [G. Wang and R. L. Dunbrack, Jr. PISCES: a protein sequence</span> +<span class="sd"> culling server. Bioinformatics, 19:1589-1591, 2003.] with Bio.PDB tools</span> +<span class="sd"> [Hamelryck, T., Manderick, B. (2003) PDB pdbparser and structure class</span> +<span class="sd"> implemented in Python. Bioinformatics 19: 2308–2310]</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">_obsoletedir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s1">'obsolete_directory'</span><span class="p">,</span> <span class="s1">'/tmp/obsolete'</span><span class="p">)</span> + <span class="c1"># Setting trash directory for old downloaded pdbs</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_obsoletedir</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">F_OK</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> directory does not exist. Making a new directory"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_obsoletedir</span><span class="p">)</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_obsoletedir</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">pdblist</span> <span class="o">=</span> <span class="n">PDBList</span><span class="p">(</span><span class="n">obsolete_pdb</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_obsoletedir</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">pdbparser</span> <span class="o">=</span> <span class="n">PDBParser</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mmcifparser</span> <span class="o">=</span> <span class="n">MMCIFParser</span><span class="p">()</span> + +<div class="viewcode-block" id="PDBDist.get_proteinblocks"><a class="viewcode-back" href="../../ariaec.html#ariaec.pdbdist.PDBDist.get_proteinblocks">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">get_proteinblocks</span><span class="p">(</span><span class="n">pdb</span><span class="p">,</span> <span class="n">chain</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Get Protein Block assignment index for chain with pbxplore</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pdb : pdb file path</span> +<span class="sd"> </span> +<span class="sd"> chain : str</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">with</span> <span class="n">Capturing</span><span class="p">()</span> <span class="k">as</span> <span class="n">output</span><span class="p">:</span> + <span class="n">chain</span> <span class="o">=</span> <span class="p">[</span><span class="n">ch</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">pbx</span><span class="o">.</span><span class="n">chains_from_files</span><span class="p">([</span><span class="n">pdb</span><span class="p">])</span> + <span class="k">if</span> <span class="n">ch</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="n">chain</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="k">if</span> <span class="n">output</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> + + <span class="c1"># Assign protein blocks</span> + <span class="n">tmpblocks</span> <span class="o">=</span> <span class="n">pbx</span><span class="o">.</span><span class="n">assign</span><span class="p">(</span><span class="n">chain</span><span class="o">.</span><span class="n">get_phi_psi_angles</span><span class="p">())</span> + <span class="c1"># Get related list of resid</span> + <span class="n">sequence</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">atm</span><span class="o">.</span><span class="n">resid</span> <span class="k">for</span> <span class="n">atm</span> <span class="ow">in</span> <span class="n">chain</span><span class="o">.</span><span class="n">atoms</span><span class="p">])</span> + <span class="c1"># In case of missing residues, define result as default dict</span> + <span class="n">pblocks</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="s1">''</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">res_id</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sequence</span><span class="p">):</span> + <span class="n">pblocks</span><span class="p">[</span><span class="n">res_id</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">tmpblocks</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> + + <span class="k">return</span> <span class="n">pblocks</span></div> + + <span class="c1"># TODO: similar function in another part of the package, have to merge them</span> +<div class="viewcode-block" id="PDBDist.get_secstructs"><a class="viewcode-back" href="../../ariaec.html#ariaec.pdbdist.PDBDist.get_secstructs">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">get_secstructs</span><span class="p">(</span><span class="n">backbone</span><span class="p">,</span> <span class="n">dssp_dict</span><span class="p">,</span> <span class="n">chain</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Return related secondary structure dictionary for each backbone residue</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> backbone : :obj: `list` of :obj: `Bio.PDB.Residue.Residue`</span> +<span class="sd"> List of bacbkone residues</span> +<span class="sd"> dssp_dict :</span> +<span class="sd"> </span> +<span class="sd"> chain :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Computing secondary structure index"</span><span class="p">)</span> + <span class="n">ss_idx</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="s1">''</span><span class="p">)</span> + <span class="n">ss_count</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'H'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'E'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'X'</span><span class="p">:</span> <span class="mi">1</span><span class="p">}</span> + + <span class="c1"># Sort backbone by resid</span> + <span class="n">backbone</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">backbone</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">resx</span><span class="p">:</span> <span class="n">resx</span><span class="o">.</span><span class="n">id</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + + <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">res_x</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">backbone</span><span class="p">):</span> + + <span class="n">resid_x</span> <span class="o">=</span> <span class="n">res_x</span><span class="o">.</span><span class="n">id</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="c1"># Get secondary structure in dssp dict or set ss as X element</span> + <span class="n">ss_x</span> <span class="o">=</span> <span class="n">dssp_dict</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="n">chain</span><span class="p">,</span> <span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="n">resid_x</span><span class="p">,</span> <span class="s2">" "</span><span class="p">)),</span> <span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="s2">"X"</span><span class="p">))[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">ss_x</span> <span class="o">=</span> <span class="s2">"X"</span> <span class="k">if</span> <span class="n">ss_x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">]</span> <span class="k">else</span> <span class="n">ss_x</span> + <span class="c1"># Udate secondary structure index for residue x</span> + <span class="n">ss_idx</span><span class="p">[</span><span class="n">resid_x</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ss_x</span><span class="p">,</span> <span class="n">ss_count</span><span class="p">[</span><span class="n">ss_x</span><span class="p">])</span> + + <span class="c1"># Check if next residue still belongs to the same secondary</span> + <span class="c1"># structure</span> + <span class="k">if</span> <span class="n">idx</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">backbone</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">resid_j</span> <span class="o">=</span> <span class="n">backbone</span><span class="p">[</span><span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">id</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">ss_j</span> <span class="o">=</span> <span class="n">dssp_dict</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="n">chain</span><span class="p">,</span> <span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="n">resid_j</span><span class="p">,</span> <span class="s2">" "</span><span class="p">)),</span> <span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="s2">"X"</span><span class="p">))[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">ss_j</span> <span class="o">=</span> <span class="s2">"X"</span> <span class="k">if</span> <span class="n">ss_j</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">]</span> <span class="k">else</span> <span class="n">ss_j</span> + + <span class="k">if</span> <span class="n">ss_x</span> <span class="o">!=</span> <span class="n">ss_j</span><span class="p">:</span> + <span class="c1"># If end of secondary structure element, increase related ss</span> + <span class="c1"># count</span> + <span class="n">ss_count</span><span class="p">[</span><span class="n">ss_x</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">ss_idx</span><span class="p">)</span> + <span class="k">return</span> <span class="n">ss_idx</span></div> + +<div class="viewcode-block" id="PDBDist.pdbdists"><a class="viewcode-back" href="../../ariaec.html#ariaec.pdbdist.PDBDist.pdbdists">[docs]</a> <span class="k">def</span> <span class="nf">pdbdists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pdb</span><span class="p">,</span> <span class="n">pdbid</span><span class="p">,</span> <span class="n">chain</span><span class="p">,</span> <span class="n">pair_list</span><span class="o">=</span><span class="s2">"all"</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Get distance matrix from pdb file and write distances into output file</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pdb : str</span> +<span class="sd"> Path of pdb file</span> +<span class="sd"> pdbid : str</span> +<span class="sd"> PDB id</span> +<span class="sd"> chain : str</span> +<span class="sd"> Chain id</span> +<span class="sd"> pair_list : {'all', 'min', 'heavy'}</span> +<span class="sd"> Defining if we generate a distance distribution for a minimal set</span> +<span class="sd"> of atom pairs, heavy pairs or all atom pairs (Default value = "all")</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> dists: :obj: `list` of :obj: `OrderedDict`</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: Do we have to take disordered atoms into account ?</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Compute atom distances for chain </span><span class="si">%s</span><span class="s2"> of </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">chain</span><span class="p">,</span> <span class="n">pdbid</span><span class="p">)</span> + <span class="c1"># out = ""</span> + <span class="n">dists</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">cutoff</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"contact_cutoff"</span><span class="p">)</span> + <span class="c1"># Check if dssp executable exists otherwise we can't find secondary</span> + <span class="c1"># structures</span> + <span class="n">dssp_exec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"dssp_exec"</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">dssp_exec</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">F_OK</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"DSSP executable not found. Check if dssp_exec parameter"</span> + <span class="s2">" in config file is correct !"</span><span class="p">)</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + + <span class="c1"># Get chain structure object with Bio.PDB pdbparser or mmcifparser</span> + <span class="c1"># (related to model 0)</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">pdb</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'.pdb'</span><span class="p">,</span> <span class="s1">'.ent'</span><span class="p">):</span> + <span class="n">structure</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pdbparser</span><span class="o">.</span><span class="n">get_structure</span><span class="p">(</span><span class="n">pdbid</span><span class="p">,</span> <span class="n">pdb</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="n">chain</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">structure</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mmcifparser</span><span class="o">.</span><span class="n">get_structure</span><span class="p">(</span><span class="n">pdbid</span><span class="p">,</span> <span class="n">pdb</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="n">chain</span><span class="p">]</span> + + <span class="c1"># Get list of residues by ignoring heteroatoms, water molecules</span> + <span class="c1"># by looking at the hetero-flag in residue id (H_ for hetero atoms or</span> + <span class="c1"># W_ for water molecules) with only one resx object by amino acid (ca</span> + <span class="c1"># filter). Also ignore insertion mutants</span> + <span class="n">residues</span> <span class="o">=</span> <span class="p">[</span><span class="n">res</span> <span class="k">for</span> <span class="n">res</span> <span class="ow">in</span> <span class="n">structure</span><span class="o">.</span><span class="n">get_residues</span><span class="p">()</span> + <span class="k">if</span> <span class="n">res</span><span class="o">.</span><span class="n">get_id</span><span class="p">()[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'H'</span><span class="p">,</span> <span class="s1">'W'</span><span class="p">]</span> + <span class="ow">and</span> <span class="n">res</span><span class="o">.</span><span class="n">get_id</span><span class="p">()[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s1">' '</span> + <span class="ow">and</span> <span class="n">is_aa</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="ow">and</span> <span class="n">res</span><span class="o">.</span><span class="n">has_id</span><span class="p">(</span><span class="s1">'CA'</span><span class="p">)]</span> + + <span class="c1"># Unfold atom list related to selected residues</span> + <span class="n">atoms</span> <span class="o">=</span> <span class="n">Selection</span><span class="o">.</span><span class="n">unfold_entities</span><span class="p">(</span><span class="n">residues</span><span class="p">,</span> <span class="s2">"A"</span><span class="p">)</span> + + <span class="c1"># Get dssp dictionary and related dssp keys from pdb file</span> + <span class="n">logging</span><span class="o">.</span><span class="n">captureWarnings</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">dssp_dict</span><span class="p">,</span> <span class="n">dssp_keys</span> <span class="o">=</span> <span class="n">dssp_dict_from_pdb_file</span><span class="p">(</span> + <span class="n">pdb</span><span class="p">,</span> <span class="n">DSSP</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"dssp_exec"</span><span class="p">))</span> + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">msg</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span> + + <span class="c1"># Compute secondary structure index</span> + <span class="n">ss_idx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_secstructs</span><span class="p">(</span><span class="n">residues</span><span class="p">,</span> <span class="n">dssp_dict</span><span class="p">,</span> <span class="n">chain</span><span class="p">)</span> + <span class="n">pb_idx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_proteinblocks</span><span class="p">(</span><span class="n">pdb</span><span class="p">,</span> <span class="n">chain</span><span class="p">)</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Protein Blocks assignment (</span><span class="si">%s</span><span class="s2">):</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">pb_idx</span><span class="p">),</span> <span class="n">pb_idx</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Secondary structure index (</span><span class="si">%s</span><span class="s2">):</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">ss_idx</span><span class="p">),</span> <span class="n">ss_idx</span><span class="p">)</span> + + <span class="c1"># TODO: could be a better idea to use protmap.AtmMap class</span> + <span class="c1"># Initialize square checking matrix (if a resx has already been seen)</span> + <span class="n">atoms_idx</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">([</span><span class="n">atmx</span><span class="o">.</span><span class="n">get_serial_number</span><span class="p">()</span> <span class="k">for</span> <span class="n">atmx</span> <span class="ow">in</span> <span class="n">atoms</span><span class="p">])</span> + <span class="n">seen</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">int</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">atoms_idx</span><span class="p">,</span> + <span class="n">columns</span><span class="o">=</span><span class="n">atoms_idx</span><span class="p">)</span> + + <span class="c1"># Initialize Neighbor searching object</span> + <span class="n">neighsearch</span> <span class="o">=</span> <span class="n">NeighborSearch</span><span class="p">(</span><span class="n">atoms</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">resx</span> <span class="ow">in</span> <span class="n">residues</span><span class="p">:</span> + + <span class="n">resx_name</span> <span class="o">=</span> <span class="n">AminoAcid</span><span class="p">(</span><span class="n">resx</span><span class="o">.</span><span class="n">get_resname</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">resx_id</span> <span class="o">=</span> <span class="n">resx</span><span class="o">.</span><span class="n">id</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">ssx</span> <span class="o">=</span> <span class="n">ss_idx</span><span class="p">[</span><span class="n">resx_id</span><span class="p">]</span> + <span class="n">pblocx</span> <span class="o">=</span> <span class="n">pb_idx</span><span class="p">[</span><span class="n">resx_id</span><span class="p">]</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Start at residue </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">) with </span><span class="si">%s</span><span class="s2"> atoms"</span><span class="p">,</span> <span class="n">resx_id</span><span class="p">,</span> + <span class="n">resx_name</span><span class="p">,</span> <span class="n">resx</span><span class="o">.</span><span class="n">get_list</span><span class="p">())</span> + + <span class="k">for</span> <span class="n">atmx</span> <span class="ow">in</span> <span class="n">resx</span><span class="o">.</span><span class="n">get_list</span><span class="p">():</span> + + <span class="n">atmx_id</span> <span class="o">=</span> <span class="n">atmx</span><span class="o">.</span><span class="n">get_serial_number</span><span class="p">()</span> + <span class="n">atmx_name</span> <span class="o">=</span> <span class="n">atmx</span><span class="o">.</span><span class="n">get_name</span><span class="p">()</span> + + <span class="c1"># Find neighboring res around atom in resi within defined cutoff</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Looking for residues in contact with atom </span><span class="si">%s</span><span class="s2"> of res "</span> + <span class="s2">"</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">atmx_name</span><span class="p">,</span> <span class="n">resx_name</span><span class="p">,</span> <span class="n">resx_id</span><span class="p">)</span> + <span class="n">neighbors</span> <span class="o">=</span> <span class="n">neighsearch</span><span class="o">.</span><span class="n">search</span><span class="p">(</span> + <span class="n">atmx</span><span class="o">.</span><span class="n">get_coord</span><span class="p">(),</span> <span class="n">cutoff</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="s2">"R"</span><span class="p">)</span> + <span class="c1"># Select long range contacts</span> + <span class="n">longr_contacts</span> <span class="o">=</span> <span class="p">[</span><span class="n">res</span> <span class="k">for</span> <span class="n">res</span> <span class="ow">in</span> <span class="n">neighbors</span> <span class="k">if</span> + <span class="nb">abs</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">id</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">resx_id</span><span class="p">)</span> <span class="o">></span> <span class="mi">5</span><span class="p">]</span> + + <span class="c1"># For each residue in contact with the selected atom</span> + <span class="k">for</span> <span class="n">resy</span> <span class="ow">in</span> <span class="n">longr_contacts</span><span class="p">:</span> + + <span class="n">resy_name</span> <span class="o">=</span> <span class="n">AminoAcid</span><span class="p">(</span><span class="n">resy</span><span class="o">.</span><span class="n">get_resname</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">resy_id</span> <span class="o">=</span> <span class="n">resy</span><span class="o">.</span><span class="n">id</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">ssy</span> <span class="o">=</span> <span class="n">ss_idx</span><span class="p">[</span><span class="n">resy_id</span><span class="p">]</span> + <span class="n">pblocy</span> <span class="o">=</span> <span class="n">pb_idx</span><span class="p">[</span><span class="n">resy_id</span><span class="p">]</span> + + <span class="c1"># Ignore disulfide bridges and unkonwn residues</span> + <span class="k">if</span> <span class="p">(</span><span class="n">resx_name</span> <span class="o">==</span> <span class="s2">"CYS"</span> <span class="ow">and</span> <span class="n">resy_name</span> <span class="o">==</span> <span class="s2">"CYS"</span><span class="p">)</span> \ + <span class="ow">or</span> <span class="ow">not</span> <span class="n">resx_name</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">resy_name</span><span class="p">:</span> + <span class="k">continue</span> + + <span class="n">scx_name</span><span class="p">,</span> <span class="n">scy_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">[</span><span class="n">resx_name</span><span class="p">][</span> + <span class="n">resy_name</span><span class="p">]</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">pair_list</span> <span class="o">==</span> <span class="s2">"min"</span> <span class="ow">and</span> + <span class="n">atmx_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"CA"</span><span class="p">,</span> <span class="s2">"CB"</span><span class="p">,</span> <span class="n">scx_name</span><span class="p">))</span> <span class="ow">or</span> \ + <span class="p">(</span><span class="n">pair_list</span> <span class="o">==</span> <span class="s2">"heavy"</span> + <span class="ow">and</span> <span class="ow">not</span> <span class="n">ResAtmMap</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">atmx_name</span><span class="p">)):</span> + <span class="k">continue</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Contact detected for atom </span><span class="si">%s</span><span class="s2"> of res </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">) with"</span> + <span class="s2">" res </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">atmx_name</span><span class="p">,</span> <span class="n">resx_id</span><span class="p">,</span> <span class="n">resx_name</span><span class="p">,</span> <span class="n">resy_id</span><span class="p">,</span> <span class="n">resy_name</span><span class="p">)</span> + + <span class="c1"># Define secondary structure type</span> + <span class="n">ss_type</span> <span class="o">=</span> <span class="n">ssx</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">ssy</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">if</span> <span class="n">ssx</span> <span class="o">!=</span> <span class="n">ssy</span><span class="p">:</span> + <span class="k">if</span> <span class="n">ss_type</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"HH"</span><span class="p">,</span> <span class="s2">"EE"</span><span class="p">,</span> <span class="s2">"HE"</span><span class="p">,</span> <span class="s2">"EH"</span><span class="p">):</span> + <span class="c1"># Contact between helice or beta strand</span> + <span class="n">ss_type</span> <span class="o">=</span> <span class="s2">"HE"</span> <span class="k">if</span> <span class="n">ss_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"HH"</span><span class="p">,</span> <span class="s2">"EE"</span><span class="p">)</span> \ + <span class="k">else</span> <span class="n">ss_type</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Contact with loops or other secondary</span> + <span class="c1"># structure</span> + <span class="n">ss_type</span> <span class="o">=</span> <span class="s2">"XH"</span> <span class="k">if</span> <span class="s2">"H"</span> <span class="ow">in</span> <span class="n">ss_type</span> <span class="k">else</span> <span class="s2">"XE"</span> \ + <span class="k">if</span> <span class="s2">"E"</span> <span class="ow">in</span> <span class="n">ss_type</span> <span class="k">else</span> <span class="s2">"XX"</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Same secondary structure</span> + <span class="n">ss_type</span> <span class="o">=</span> <span class="n">ssx</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> + + <span class="c1"># PB type</span> + <span class="n">pb_type</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">pblocx</span> <span class="o">+</span> <span class="n">pblocy</span><span class="p">))</span> + + <span class="k">for</span> <span class="n">atmy</span> <span class="ow">in</span> <span class="n">resy</span><span class="o">.</span><span class="n">get_list</span><span class="p">():</span> + + <span class="n">atmy_id</span> <span class="o">=</span> <span class="n">atmy</span><span class="o">.</span><span class="n">get_serial_number</span><span class="p">()</span> + <span class="n">atmy_name</span> <span class="o">=</span> <span class="n">atmy</span><span class="o">.</span><span class="n">get_name</span><span class="p">()</span> + <span class="c1"># Filter atom pairs if pair_list is not equal to "all"</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Contact filter: </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">,</span><span class="si">%s</span><span class="s2">) </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">,</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">resx_name</span><span class="p">,</span> <span class="n">resy_name</span><span class="p">,</span> <span class="n">resx_id</span><span class="p">,</span> <span class="n">resy_id</span><span class="p">,</span> + <span class="n">atmx_name</span><span class="p">,</span> <span class="n">atmy_name</span><span class="p">,</span> <span class="n">atmx_id</span><span class="p">,</span> <span class="n">atmy_id</span><span class="p">)</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">pair_list</span> <span class="o">==</span> <span class="s2">"min"</span> <span class="ow">and</span> + <span class="n">atmy_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"CA"</span><span class="p">,</span> <span class="s2">"CB"</span><span class="p">,</span> <span class="n">scy_name</span><span class="p">))</span> <span class="ow">or</span> \ + <span class="p">(</span><span class="n">pair_list</span> <span class="o">==</span> <span class="s2">"heavy"</span> + <span class="ow">and</span> <span class="ow">not</span> <span class="n">ResAtmMap</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">atmy_name</span><span class="p">)):</span> + <span class="n">seen</span><span class="p">[</span><span class="n">atmx_id</span><span class="p">][</span><span class="n">atmy_id</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + <span class="n">seen</span><span class="p">[</span><span class="n">atmy_id</span><span class="p">][</span><span class="n">atmx_id</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + <span class="k">continue</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"...valid"</span><span class="p">)</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">seen</span><span class="p">[</span><span class="n">atmx_id</span><span class="p">][</span><span class="n">atmy_id</span><span class="p">]:</span> + <span class="c1"># If contact between two atoms not already seen,</span> + <span class="c1"># write distance in the output file</span> + <span class="n">dist</span> <span class="o">=</span> <span class="n">atmx</span> <span class="o">-</span> <span class="n">atmy</span> + + <span class="n">dists</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">OrderedDict</span><span class="p">([</span> + <span class="p">(</span><span class="s1">'pdbid'</span><span class="p">,</span> <span class="n">pdbid</span><span class="p">),</span> <span class="p">(</span><span class="s1">'ss_type'</span><span class="p">,</span> <span class="n">ss_type</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'ssx'</span><span class="p">,</span> <span class="n">ssx</span><span class="p">),</span> <span class="p">(</span><span class="s1">'ssy'</span><span class="p">,</span> <span class="n">ssy</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'pb_type'</span><span class="p">,</span> <span class="n">pb_type</span><span class="p">),</span> <span class="p">(</span><span class="s1">'pblocx'</span><span class="p">,</span> <span class="n">pblocx</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'pblocy'</span><span class="p">,</span> <span class="n">pblocy</span><span class="p">),</span> <span class="p">(</span><span class="s1">'resx_id'</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">resx_id</span><span class="p">)),</span> + <span class="p">(</span><span class="s1">'resy_id'</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">resy_id</span><span class="p">)),</span> + <span class="p">(</span><span class="s1">'resx_name'</span><span class="p">,</span> <span class="n">resx_name</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'resy_name'</span><span class="p">,</span> <span class="n">resy_name</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'atmx_id'</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">atmx_id</span><span class="p">)),</span> + <span class="p">(</span><span class="s1">'atmy_id'</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">atmy_id</span><span class="p">)),</span> + <span class="p">(</span><span class="s1">'atmx_name'</span><span class="p">,</span> <span class="n">atmx_name</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'atmy_name'</span><span class="p">,</span> <span class="n">atmy_name</span><span class="p">),</span> + <span class="p">(</span><span class="s1">'dist'</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">dist</span><span class="p">))</span> + <span class="p">]))</span> + + <span class="n">seen</span><span class="p">[</span><span class="n">atmx_id</span><span class="p">][</span><span class="n">atmy_id</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + <span class="n">seen</span><span class="p">[</span><span class="n">atmy_id</span><span class="p">][</span><span class="n">atmx_id</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> + <span class="k">return</span> <span class="n">dists</span></div> + +<div class="viewcode-block" id="PDBDist.run"><a class="viewcode-back" href="../../ariaec.html#ariaec.pdbdist.PDBDist.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""main method"""</span> + + <span class="c1"># Set pdb directory</span> + <span class="n">outdir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"output_directory"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">())</span> + <span class="n">pdbdir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'pdbdir'</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'pdbdir'</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">pdbdir</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">F_OK</span><span class="p">):</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"download_pdbs"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span> + <span class="s2">"PDB directory not given and download inactivated."</span> + <span class="s2">" PDBDist command can't download pdb files."</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># We have to download all files so we set outdir as pdbdir</span> + <span class="n">pdbdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">outdir</span><span class="p">),</span> <span class="s1">'pdbs'</span><span class="p">)</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">pdbdir</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">F_OK</span><span class="p">):</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">pdbdir</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">pdbdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">pdbdir</span><span class="p">)</span> + + <span class="n">pair_flag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"pair_list"</span><span class="p">,</span> <span class="s2">"all"</span><span class="p">)</span> + <span class="n">distpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">outdir</span><span class="p">,</span> <span class="s2">"pdbdists.dat"</span><span class="p">)</span> + <span class="n">distpath</span> <span class="o">=</span> <span class="n">distpath</span> <span class="k">if</span> <span class="n">pair_flag</span> <span class="ow">in</span> <span class="n">distpath</span> <span class="k">else</span> \ + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">distpath</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"_"</span> <span class="o">+</span> <span class="n">pair_flag</span> <span class="o">+</span> \ + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">distpath</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> + + <span class="c1"># Load cullpdb file</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Loading culled list of pdb file(s)"</span><span class="p">)</span> + <span class="n">cullfile</span> <span class="o">=</span> <span class="n">CulledPdbFile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"cullpdbs"</span><span class="p">))</span> + <span class="n">cullfile</span><span class="o">.</span><span class="n">load</span><span class="p">()</span> + + <span class="c1"># Load all pdb files and generate distance file</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Looking for pdb entries into </span><span class="si">%s</span><span class="s2"> folder"</span><span class="p">,</span> <span class="n">pdbdir</span><span class="p">)</span> + <span class="n">header</span> <span class="o">=</span> <span class="s2">""</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">distpath</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">distfile</span><span class="p">:</span> + + <span class="k">for</span> <span class="n">idline</span><span class="p">,</span> <span class="n">pdbent</span> <span class="ow">in</span> <span class="n">iteritems</span><span class="p">(</span><span class="n">cullfile</span><span class="o">.</span><span class="n">lines</span><span class="p">):</span> + + <span class="n">pdbid</span> <span class="o">=</span> <span class="n">pdbent</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"pdb_id"</span><span class="p">)</span> + + <span class="c1"># Download file if necessary</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">glob</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">/*</span><span class="si">%s</span><span class="s1">*'</span> <span class="o">%</span> <span class="p">(</span><span class="n">pdbdir</span><span class="p">,</span> <span class="n">pdbid</span><span class="o">.</span><span class="n">lower</span><span class="p">())):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Download pdb entry for </span><span class="si">%s</span><span class="s2"> pdb"</span><span class="p">,</span> <span class="n">pdbid</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">pdblist</span><span class="o">.</span><span class="n">retrieve_pdb_file</span><span class="p">(</span><span class="n">pdbid</span><span class="p">,</span> <span class="n">pdir</span><span class="o">=</span><span class="n">pdbdir</span><span class="p">,</span> + <span class="n">file_format</span><span class="o">=</span><span class="s2">"pdb"</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">msg</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span> + <span class="k">continue</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">glob</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">/*</span><span class="si">%s</span><span class="s1">*'</span> <span class="o">%</span> <span class="p">(</span><span class="n">pdbdir</span><span class="p">,</span> <span class="n">pdbid</span><span class="o">.</span><span class="n">lower</span><span class="p">())):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Error during download, try to download in "</span> + <span class="s2">"mmCIF format"</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">pdblist</span><span class="o">.</span><span class="n">retrieve_pdb_file</span><span class="p">(</span><span class="n">pdbid</span><span class="p">,</span> <span class="n">pdir</span><span class="o">=</span><span class="n">pdbdir</span><span class="p">,</span> + <span class="n">file_format</span><span class="o">=</span><span class="s2">"mmCif"</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">msg</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span> + <span class="k">continue</span> + + <span class="n">pdbpaths</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">/*</span><span class="si">%s</span><span class="s1">*'</span> <span class="o">%</span> <span class="p">(</span><span class="n">pdbdir</span><span class="p">,</span> <span class="n">pdbid</span><span class="o">.</span><span class="n">lower</span><span class="p">()))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Found </span><span class="si">%s</span><span class="s2"> file(s) related to </span><span class="si">%s</span><span class="s2"> pdb entry into </span><span class="si">%s</span><span class="s2"> folder "</span> + <span class="s2">"(</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">pdbpaths</span><span class="p">),</span> <span class="n">pdbid</span><span class="p">,</span> <span class="n">pdbdir</span><span class="p">,</span> <span class="n">pdbpaths</span><span class="p">)</span> + + <span class="c1"># Get distance matrix from pdb file and write distances into</span> + <span class="c1"># output file</span> + <span class="n">dists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pdbdists</span><span class="p">(</span> + <span class="n">pdbpaths</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">pdbid</span><span class="p">,</span> <span class="n">pdbent</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"chain_id"</span><span class="p">),</span> + <span class="n">pair_list</span><span class="o">=</span><span class="n">pair_flag</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">idline</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Writing header line"</span><span class="p">)</span> + <span class="n">header</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">dists</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">header</span><span class="p">))</span> + <span class="n">distfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">header</span><span class="p">))</span> + + <span class="k">for</span> <span class="n">dist</span> <span class="ow">in</span> <span class="n">dists</span><span class="p">:</span> + <span class="n">distfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">dist</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">header</span><span class="p">]))</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbdist</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"remove_pdbs"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Remove </span><span class="si">%s</span><span class="s2"> pdb file"</span><span class="p">,</span> <span class="n">pdbid</span><span class="p">)</span> + <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">pdbpaths</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"PDBdist finished"</span><span class="p">)</span></div></div> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/pdbqual.html b/examples-dev/olds/_build/html/_modules/ariaec/pdbqual.html new file mode 100644 index 0000000..2623c8e --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/pdbqual.html @@ -0,0 +1,278 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.pdbqual — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.pdbqual</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.pdbqual</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd">Created on 9/5/16</span> +<span class="sd">@author: fallain</span> + +<span class="sd">Derived from qual.py script by Dr. Benjamin Bardiaux</span> +<span class="sd">"""</span> +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">shutil</span> +<span class="kn">import</span> <span class="nn">logging</span> + +<span class="kn">from</span> <span class="nn">aria.legacy.QualityChecks</span> <span class="k">import</span> <span class="n">QualityChecks</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">CommandProtocol</span> + + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="AriaEcPdbqual"><a class="viewcode-back" href="../../ariaec.html#ariaec.pdbqual.AriaEcPdbqual">[docs]</a><span class="k">class</span> <span class="nc">AriaEcPdbqual</span><span class="p">(</span><span class="n">CommandProtocol</span><span class="p">):</span> + <span class="sd">"""Quality pdb tool"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">AriaEcPdbqual</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + +<div class="viewcode-block" id="AriaEcPdbqual.run"><a class="viewcode-back" href="../../ariaec.html#ariaec.pdbqual.AriaEcPdbqual.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Starting quality runs with </span><span class="si">%s</span><span class="s2"> file(s)"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"infiles"</span><span class="p">])</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Copying file(s) to output directory"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">infile</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"infiles"</span><span class="p">]:</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">infile</span><span class="p">)</span> <span class="o">!=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">]):</span> + <span class="n">shutil</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">infile</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">])</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">])</span> + <span class="n">QualityChecks</span><span class="o">.</span><span class="n">runChecks</span><span class="p">(</span> + <span class="n">workingDirectory</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">],</span> + <span class="n">trashDirectory</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"trash_directory"</span><span class="p">],</span> + <span class="n">prosaOnOff</span><span class="o">=</span><span class="mi">1</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"prosa"</span><span class="p">]</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> + <span class="n">procheckExe</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">main</span><span class="p">[</span><span class="s2">"procheck_executable"</span><span class="p">],</span> + <span class="n">whatIfExe</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">main</span><span class="p">[</span><span class="s2">"whatif_executable"</span><span class="p">],</span> + <span class="n">clashlistExe</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">main</span><span class="p">[</span><span class="s2">"clashlist_executable"</span><span class="p">],</span> + <span class="n">prosaExe</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">main</span><span class="p">[</span><span class="s2">"prosa_executable"</span><span class="p">]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">main</span><span class="p">[</span><span class="s2">"prosa_executable"</span><span class="p">]</span> <span class="k">else</span> <span class="s2">""</span><span class="p">,</span> + <span class="n">cshExe</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"csh_executable"</span><span class="p">],</span> + <span class="n">howManyPdb</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"infiles"</span><span class="p">]),</span> + <span class="n">verbose</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> + <span class="n">fileList</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"infiles"</span><span class="p">],</span> + <span class="n">skipPrefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"skip_prefix"</span><span class="p">]</span> + <span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> generated"</span><span class="p">,</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">],</span> + <span class="n">QualityChecks</span><span class="o">.</span><span class="n">FILENAME_REPORT</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Removing infile(s) in output directory </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">])</span> + <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">],</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">infile</span><span class="p">)))</span> + <span class="k">for</span> <span class="n">infile</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"infiles"</span><span class="p">]</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">pdbqual</span><span class="p">[</span><span class="s2">"output_directory"</span><span class="p">],</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">infile</span><span class="p">)))]</span></div></div> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/protein.html b/examples-dev/olds/_build/html/_modules/ariaec/protein.html new file mode 100644 index 0000000..88f8a22 --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/protein.html @@ -0,0 +1,861 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.protein — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.protein</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.protein</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Secondary structure list</span> +<span class="sd">"""</span> + +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span><span class="p">,</span> \ + <span class="n">unicode_literals</span> + +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">sys</span> +<span class="kn">import</span> <span class="nn">re</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">pkg_resources</span> <span class="k">as</span> <span class="nn">pkgr</span> +<span class="kn">import</span> <span class="nn">aria.legacy.SequenceList</span> <span class="k">as</span> <span class="nn">SequenceList</span> +<span class="kn">import</span> <span class="nn">aria.legacy.AminoAcid</span> <span class="k">as</span> <span class="nn">AmnAcd</span> +<span class="kn">from</span> <span class="nn">six</span> <span class="k">import</span> <span class="n">iteritems</span><span class="p">,</span> <span class="n">text_type</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="p">(</span><span class="n">reg_load</span><span class="p">,</span> <span class="n">ppdict</span><span class="p">)</span> +<span class="c1"># import skbio.Protein as skprot</span> +<span class="c1"># TODO: interface skbio ??</span> + + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<span class="c1"># TODO: implement psipred format 3.5</span> +<div class="viewcode-block" id="SsList"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.SsList">[docs]</a><span class="k">class</span> <span class="nc">SsList</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Reader for secondary prediction structure files"""</span> + <span class="n">psipred_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^(?P<up_index>\d+)'</span> + <span class="sa">r</span><span class="s1">'\s+(?P<up_residue>[AC-IK-NP-TVWYZ])'</span> + <span class="sa">r</span><span class="s1">'\s+(?P<ss_pred>[HEC])'</span> + <span class="sa">r</span><span class="s1">'\s+(?P<ss_conf>\d?)'</span><span class="p">)</span> + <span class="n">psipred2_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^(?P<ss_pred>[HEC]+)'</span><span class="p">)</span> + <span class="n">indxplus_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<up_index>\d+)\s+(?P<up_residue>[AC-IK-NP-TVWYZ])\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<ss_pred>[CEH])\s+(?P<ss_conf>\d)\s+(?P<msa_index>[\d\-]+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<msa_consper>[\d\-]+)\s+(?P<msa_cons>[*~\-])\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<in_const>[*~\-])\s+(?P<pdb_atom>[\d\-]+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<pdb_chain>[\-\w])\s+(?P<pdb_index>[\d\-]+\w?)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<pdb_residue>[AC-IK-NP-TVWYZ\-])\s+(?P<pdb_x_pos>[\d.\-]+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<pdb_y_pos>[\d.\-]+)\s+(?P<pdb_z_pos>[\d\-.]+)'</span><span class="p">)</span> + <span class="n">ss_dist_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\s+(\d+\.\d+) \( (\d+\.\d+)\)"</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sett</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :param sett:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">sett</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span> <span class="o">=</span> <span class="p">[]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ssdist</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">=</span> <span class="s1">''</span> + + <span class="k">def</span> <span class="nf">__bool__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="kc">True</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span> <span class="k">else</span> <span class="kc">False</span> + + <span class="k">def</span> <span class="nf">__nonzero__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__bool__</span><span class="p">()</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">:</span> + <span class="c1"># Assuming human idx (1 ...) correspond to ss_matrix first column !!!</span> + <span class="k">return</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">_</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">)[</span><span class="mi">0</span><span class="p">]]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[]</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">sequence</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[</span><span class="n">_</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">)[</span><span class="mi">2</span><span class="p">]]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[]</span> + +<div class="viewcode-block" id="SsList.check_filetype"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.SsList.check_filetype">[docs]</a> <span class="k">def</span> <span class="nf">check_filetype</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">filename</span><span class="p">)[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span></div> + <span class="c1"># TODO: check if given file is supported</span> + +<div class="viewcode-block" id="SsList.read"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.SsList.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">check_filetype</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Reading secondary structure file </span><span class="si">%s</span><span class="s2"> [</span><span class="si">%s</span><span class="s2">]"</span><span class="p">,</span> + <span class="n">filename</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="c1"># TODO: better read with getattr</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">==</span> <span class="s2">"indextableplus"</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">read_indextableplus</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">read_psipred</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Secondary structure list:</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> + <span class="s2">"Secondary structure dict:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">)</span></div> + +<div class="viewcode-block" id="SsList.read_psipred"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.SsList.read_psipred">[docs]</a> <span class="k">def</span> <span class="nf">read_psipred</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span> <span class="o">=</span> <span class="n">reg_load</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">psipred_reg</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span> + <span class="c1"># TODO: supprimer psipred_list dans les futures implementations</span> + <span class="n">ss_index_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'H'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'E'</span><span class="p">:</span> <span class="mi">1</span><span class="p">}</span> + <span class="k">for</span> <span class="n">line_id</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span> + <span class="c1"># Modif champ ss_pred</span> + <span class="c1"># Si line_id</span> + <span class="k">if</span> <span class="n">line_id</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span><span class="p">][</span><span class="s1">'ss_pred'</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="s1">'ss_pred'</span><span class="p">]:</span> + <span class="c1"># If next ss isn't the same, increment relative struct in</span> + <span class="c1"># ss_index_dict</span> + <span class="n">ss_index_dict</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="s1">'ss_pred'</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span><span class="p">][</span><span class="s1">'ss_pred'</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span><span class="p">][</span><span class="s1">'ss_pred'</span><span class="p">],</span> + <span class="nb">str</span><span class="p">(</span><span class="n">ss_index_dict</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span><span class="p">][</span><span class="s1">'ss_pred'</span><span class="p">]])))</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span><span class="p">][</span><span class="s1">'up_index'</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span><span class="p">][</span><span class="s1">'up_residue'</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span><span class="p">][</span><span class="s1">'ss_pred'</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ssdict</span><span class="p">[</span><span class="n">line_id</span><span class="p">][</span><span class="s1">'ss_conf'</span><span class="p">]])</span></div> + +<div class="viewcode-block" id="SsList.write_ssfasta"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.SsList.write_ssfasta">[docs]</a> <span class="k">def</span> <span class="nf">write_ssfasta</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="s2">"pdbid"</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> param desc:</span> +<span class="sd"> desc :</span> +<span class="sd"> (Default value = "pdbid")</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="s1">'w'</span><span class="p">))</span> <span class="k">as</span> <span class="n">psipred</span><span class="p">:</span> + <span class="n">psipred</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="s2">"> </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">desc</span><span class="p">))</span> + <span class="n">psipred</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">_</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">)[</span><span class="mi">2</span><span class="p">]])))</span></div> + +<div class="viewcode-block" id="SsList.read_indextableplus"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.SsList.read_indextableplus">[docs]</a> <span class="k">def</span> <span class="nf">read_indextableplus</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">c</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">error_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">ss_index_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'H'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'E'</span><span class="p">:</span> <span class="mi">1</span><span class="p">}</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span> + <span class="n">indxplus_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">indxplus_reg</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"up_"</span><span class="p">):</span> + <span class="k">continue</span> + <span class="k">elif</span> <span class="n">indxplus_match</span><span class="p">:</span> + + <span class="c1"># TODO: Other method to replace ss code ?</span> + <span class="c1"># => build indx_list with group_dict !</span> + <span class="n">ss</span> <span class="o">=</span> <span class="n">indxplus_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s1">'ss_pred'</span><span class="p">)</span> + <span class="n">ss_start</span> <span class="o">=</span> <span class="n">indxplus_match</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="s1">'ss_pred'</span><span class="p">)</span> + <span class="n">line</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">line</span><span class="p">[:</span><span class="n">ss_start</span><span class="p">],</span> <span class="n">ss</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">ss_index_dict</span><span class="p">[</span><span class="n">ss</span><span class="p">]),</span> + <span class="n">line</span><span class="p">[</span><span class="n">ss_start</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]])</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">ss</span><span class="p">:</span> + <span class="c1"># Si ss est une structure secondaire diff, on incremente</span> + <span class="c1"># la valeur de l'ancienne dans ss_index_dict</span> + <span class="n">ss_index_dict</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span> <span class="o">+=</span> <span class="mi">1</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">())</span> + <span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">error_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">assert</span> <span class="n">c</span> <span class="o">==</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> + <span class="k">except</span> <span class="ne">AssertionError</span><span class="p">:</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'Uneven number of matching lines (</span><span class="si">%d</span><span class="s1">) '</span> + <span class="s1">'vs up_index (</span><span class="si">%d</span><span class="s1">) : lines </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="p">,</span> + <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">[</span> + <span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]),</span> + <span class="nb">str</span><span class="p">(</span><span class="n">error_list</span><span class="p">)))</span></div> + + <span class="k">def</span> <span class="nf">_read_ssdist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">infile</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s1">''</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> infile :</span> +<span class="sd"> param filename:</span> +<span class="sd"> filename :</span> +<span class="sd"> (Default value = '')</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Reading distance file </span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">filename</span><span class="p">))</span> + <span class="n">c</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">atom_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">infile</span><span class="p">:</span> + <span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="n">line_list</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\t</span><span class="s1">'</span><span class="p">)</span> + <span class="n">dist_sdev_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_dist_reg</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'i'</span><span class="p">):</span> + <span class="n">atom_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">elt</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">elt</span> <span class="ow">in</span> <span class="n">line_list</span><span class="p">[</span><span class="mi">1</span><span class="p">:]]</span> + <span class="k">elif</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^([HE],[HE]\+\d)'</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span> + <span class="n">bond_type</span> <span class="o">=</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ssdist</span><span class="p">[</span><span class="n">bond_type</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">dist</span><span class="p">,</span> <span class="n">sdev</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">dist_sdev_list</span><span class="p">):</span> + <span class="n">dist</span><span class="p">,</span> <span class="n">sdev</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">dist</span><span class="p">),</span> <span class="nb">float</span><span class="p">(</span><span class="n">sdev</span><span class="p">)</span> + <span class="k">if</span> <span class="n">sdev</span> <span class="o"><</span> <span class="mf">0.1</span><span class="p">:</span> + <span class="c1"># TODO: explain more why we choose 0.1 as treshold !</span> + <span class="n">dist</span><span class="p">,</span> <span class="n">sdev</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ssdist</span><span class="p">[</span><span class="n">bond_type</span><span class="p">][</span><span class="n">atom_list</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">=</span> <span class="p">(</span><span class="n">dist</span><span class="p">,</span> <span class="n">sdev</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">dist_sdev_list</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">atom_list</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">AssertionError</span><span class="p">:</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span> + <span class="s1">'Error at </span><span class="si">%s</span><span class="s1">, line </span><span class="si">%d</span><span class="s1"> : uneven number of columns '</span> + <span class="s1">'between current line and header'</span> <span class="o">%</span> <span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">c</span><span class="p">))</span> + +<div class="viewcode-block" id="SsList.read_ssdist"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.SsList.read_ssdist">[docs]</a> <span class="k">def</span> <span class="nf">read_ssdist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ssdistpath</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Read average dist file generated using PDB</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> ssdistpath :</span> +<span class="sd"> return: (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">filename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">ssdistpath</span><span class="p">)</span> <span class="k">if</span> <span class="n">ssdistpath</span> <span class="k">else</span> <span class="kc">None</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Loading ss dist file"</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_read_ssdist</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="n">filename</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">message</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Can't load given ss dist file..."</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Loading default ss dist file"</span><span class="p">)</span> + <span class="k">with</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_stream</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">SS_DIST</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_read_ssdist</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">SS_DIST</span><span class="p">)</span></div> + +<div class="viewcode-block" id="SsList.seq_sublist"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.SsList.seq_sublist">[docs]</a> <span class="k">def</span> <span class="nf">seq_sublist</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Check and adjust sslist with given sequence</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> sequence :</span> +<span class="sd"> input amino acid sequence (one letter format)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Adjust sslist related to sequence </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">sequence</span><span class="p">))</span> + <span class="n">tableplus_inv</span> <span class="o">=</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">)</span> + <span class="c1"># Get amino acid sequence related to secondary structure prediction</span> + <span class="n">tableplus_seq</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tableplus_inv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + + <span class="k">if</span> <span class="n">sequence</span> <span class="ow">in</span> <span class="n">tableplus_seq</span><span class="p">:</span> + <span class="n">imin</span> <span class="o">=</span> <span class="n">tableplus_seq</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> + <span class="n">imax</span> <span class="o">=</span> <span class="n">imin</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">assert</span> <span class="n">tableplus_seq</span><span class="p">[</span><span class="n">imin</span><span class="p">:</span><span class="n">imax</span><span class="p">]</span> <span class="o">==</span> <span class="n">sequence</span> + <span class="k">except</span> <span class="ne">AssertionError</span><span class="p">:</span> + <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'Missing residues in indextableplus file'</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">[</span><span class="n">imin</span><span class="p">:</span><span class="n">imax</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Secondary structure matrix relative to given "</span> + <span class="s2">"sequence:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">)</span></div></div> + <span class="c1"># TODO: read_dssp</span> + + +<div class="viewcode-block" id="AminoAcidSequence"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.AminoAcidSequence">[docs]</a><span class="k">class</span> <span class="nc">AminoAcidSequence</span><span class="p">(</span><span class="n">SequenceList</span><span class="o">.</span><span class="n">SequenceList</span><span class="p">,</span> <span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Amino acid sequence"""</span> + <span class="n">startres_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^\s*residue\s+(?P<name>[A-Za-z]{1,4})"</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span> + <span class="n">end_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^\s*end"</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span> + <span class="n">restatement_reg</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"atom"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"atom\s+(?P<name>\w{1,4})\s*(?:.*?"</span> + <span class="sa">r</span><span class="s2">"(?:(?:type=(?P<type>\w{1,4}))|"</span> + <span class="sa">r</span><span class="s2">"(?:"</span> + <span class="sa">r</span><span class="s2">"(?:charge= ?)(?P<charge>-?\d\.\d{1,3}))|"</span> + <span class="sa">r</span><span class="s2">"(?:(?:mass=)(?P<mass>[- ]\d\.\d{1,3}))|"</span> + <span class="sa">r</span><span class="s2">"(?:(?:excl\s*=\s*)\((?P<exclude>[^(]+)\)))){1,4}"</span> + <span class="sa">r</span><span class="s2">"\s*end"</span><span class="p">,</span> + <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">),</span> + <span class="s2">"bond"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"bond\s+(?P<atm1>\w{1,4})\s+(?P<atm2>\w{1,4})"</span><span class="p">,</span> + <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">),</span> + <span class="s2">"improper"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"improper\s+(?P<atm1>\w{1,4})"</span> + <span class="sa">r</span><span class="s2">"\s+(?P<atm2>\w{1,4})\s+(?P<atm3>\w{1,4})"</span> + <span class="sa">r</span><span class="s2">"\s+(?P<atm4>\w{1,4})"</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">),</span> + <span class="s2">"dihedral"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"dihedral\s+(?P<atm1>\w{1,4})"</span> + <span class="sa">r</span><span class="s2">"\s+(?P<atm2>\w{1,4})\s+(?P<atm3>\w{1,4})"</span> + <span class="sa">r</span><span class="s2">"\s+(?P<atm4>\w{1,4})"</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">),</span> + <span class="s2">"dono"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"dono\s+(?P<hatm>\w{1,4})\s+(?:(?P<heavatm>\w{1,"</span> + <span class="sa">r</span><span class="s2">"4})|(?:</span><span class="se">\"</span><span class="s2">\s*</span><span class="se">\"</span><span class="s2">))?"</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">),</span> + <span class="s2">"acce"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^\s*acce\s+(?P<accatm>\w{1,4})\s+(?:(?P<antatm>\w{1,"</span> + <span class="sa">r</span><span class="s2">"4})|(?:</span><span class="se">\"</span><span class="s2">\s*</span><span class="se">\"</span><span class="s2">))"</span><span class="p">,</span> <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span> + <span class="p">}</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topologyfile</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :param topologyfile:</span> +<span class="sd"> :param args:</span> +<span class="sd"> :param kwargs:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="nb">super</span><span class="p">(</span><span class="n">AminoAcidSequence</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_topfile</span> <span class="o">=</span> <span class="n">topologyfile</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_topok</span> <span class="o">=</span> <span class="kc">False</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sequence</span> <span class="o">=</span> <span class="s1">''</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">humanidx</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="k">return</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">topology</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Topology dict with 3l code as dict key</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topok</span><span class="p">:</span> + <span class="n">topo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">readtopo</span><span class="p">()</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">aalist</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span> <span class="o">=</span> <span class="p">[(</span><span class="n">aa</span><span class="p">,</span> <span class="n">topo</span><span class="p">[</span><span class="n">aa</span><span class="p">])</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">aalist</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_topok</span> <span class="o">=</span> <span class="kc">True</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">iteritems</span><span class="p">(</span><span class="n">topo</span><span class="p">))</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topology</span> + + <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :param key:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">aalist</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> + + <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="s2">"Amino Acid sequence </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%d</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> + <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">))</span> + +<div class="viewcode-block" id="AminoAcidSequence.readtopo"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.AminoAcidSequence.readtopo">[docs]</a> <span class="k">def</span> <span class="nf">readtopo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Parse topology file for amino acids</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">topo</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">with</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_stream</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_topfile</span><span class="p">)</span> <span class="k">as</span> <span class="n">tpf</span><span class="p">:</span> + <span class="n">res_flag</span> <span class="o">=</span> <span class="kc">False</span> + <span class="n">resname</span> <span class="o">=</span> <span class="s2">""</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">tpf</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">res_flag</span><span class="p">:</span> + <span class="n">match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">startres_reg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">match</span><span class="p">:</span> + <span class="n">res_flag</span> <span class="o">=</span> <span class="kc">True</span> + <span class="n">resname</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">"name"</span><span class="p">)</span> + <span class="n">topo</span><span class="p">[</span><span class="n">resname</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Check if end of residue statement</span> + <span class="n">match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">end_reg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">match</span><span class="p">:</span> + <span class="n">res_flag</span> <span class="o">=</span> <span class="kc">False</span> + <span class="n">resname</span> <span class="o">=</span> <span class="s2">""</span> + <span class="k">continue</span> + <span class="c1"># Walk along reg dict</span> + <span class="k">for</span> <span class="n">regid</span><span class="p">,</span> <span class="n">reg</span> <span class="ow">in</span> <span class="n">iteritems</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">restatement_reg</span><span class="p">):</span> + <span class="k">if</span> <span class="n">regid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">topo</span><span class="p">[</span><span class="n">resname</span><span class="p">]:</span> + <span class="n">topo</span><span class="p">[</span><span class="n">resname</span><span class="p">][</span><span class="n">regid</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">if</span> <span class="n">regid</span> <span class="o">==</span> <span class="s2">"bond"</span><span class="p">:</span> + <span class="n">match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">reg</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">match</span><span class="p">:</span> + <span class="n">topo</span><span class="p">[</span><span class="n">resname</span><span class="p">][</span><span class="n">regid</span><span class="p">]</span> <span class="o">+=</span> <span class="n">match</span> + <span class="k">break</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">match</span> <span class="o">=</span> <span class="n">reg</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">match</span><span class="p">:</span> + <span class="k">if</span> <span class="n">regid</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"improper"</span><span class="p">,</span> <span class="s2">"dihedral"</span><span class="p">):</span> + <span class="c1"># Add tuple into list since we need atm order</span> + <span class="n">topo</span><span class="p">[</span><span class="n">resname</span><span class="p">][</span><span class="n">regid</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">groups</span><span class="p">())</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Add dict</span> + <span class="n">topo</span><span class="p">[</span><span class="n">resname</span><span class="p">][</span><span class="n">regid</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">())</span> + <span class="k">break</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Topology used:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">ppdict</span><span class="p">(</span><span class="n">topo</span><span class="p">))</span> + <span class="k">return</span> <span class="n">topo</span></div> + +<div class="viewcode-block" id="AminoAcidSequence.read"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.AminoAcidSequence.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: smarter reader checking type of file (fasta, etc ...)</span> + <span class="c1"># TODO: capturing has some troubles with unicode ...</span> + <span class="c1"># with Capturing() as output:</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">filename</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'.seq'</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ReadSeq</span><span class="p">(</span><span class="n">text_type</span><span class="p">(</span><span class="n">filename</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ReadFasta</span><span class="p">(</span><span class="n">text_type</span><span class="p">(</span><span class="n">filename</span><span class="p">))</span> + <span class="c1"># LOG.info(''.join(output))</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">sequence</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">AmnAcd</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">_</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> + <span class="bp">self</span><span class="o">.</span><span class="n">aalist</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Amino acid sequence:</span><span class="se">\t</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span></div></div> + + +<div class="viewcode-block" id="Protein"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.Protein">[docs]</a><span class="k">class</span> <span class="nc">Protein</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Protein class"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sett</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :param sett:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span> <span class="o">=</span> <span class="n">AminoAcidSequence</span><span class="p">(</span><span class="n">sett</span><span class="o">.</span><span class="n">TOPO</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sec_struct</span> <span class="o">=</span> <span class="n">SsList</span><span class="p">(</span><span class="n">sett</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># Index starting from 1</span> + <span class="bp">self</span><span class="o">.</span><span class="n">seqfile_path</span> <span class="o">=</span> <span class="sa">u</span><span class="s1">''</span> + +<div class="viewcode-block" id="Protein.sync_index"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.Protein.sync_index">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">sync_index</span><span class="p">(</span><span class="n">index1</span><span class="p">,</span> <span class="n">index2</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Return humanidx with upper min from existing humanidx</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> index1 :</span> +<span class="sd"> param index2:</span> +<span class="sd"> index2 :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="n">index1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">index2</span><span class="p">:</span> + <span class="k">return</span> <span class="n">index1</span> + <span class="k">elif</span> <span class="n">index2</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">index1</span><span class="p">:</span> + <span class="k">return</span> <span class="n">index2</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">index1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">index2</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[]</span> + <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">index1</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">index2</span><span class="p">):</span> + <span class="k">if</span> <span class="nb">min</span><span class="p">(</span><span class="n">index1</span><span class="p">)</span> <span class="o"><</span> <span class="nb">min</span><span class="p">(</span><span class="n">index2</span><span class="p">):</span> + <span class="k">return</span> <span class="n">index2</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="n">index1</span> + <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">index1</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">index2</span><span class="p">):</span> + <span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span> + <span class="s2">"Please check humanidx list from input files. They "</span> + <span class="s2">"are not the same length !"</span><span class="p">)</span></div> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">topology</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">topology</span> + +<div class="viewcode-block" id="Protein.set_aa_sequence"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.Protein.set_aa_sequence">[docs]</a> <span class="k">def</span> <span class="nf">set_aa_sequence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">ssidx</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> param ssidx:</span> +<span class="sd"> ssidx :</span> +<span class="sd"> (Default value = False)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">seq_sublist</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> + <span class="k">if</span> <span class="n">ssidx</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Using secondary structure index for amino acid "</span> + <span class="s2">"sequence"</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sync_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">humanidx</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">index</span><span class="p">)</span></div> + +<div class="viewcode-block" id="Protein.set_sec_struct"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.Protein.set_sec_struct">[docs]</a> <span class="k">def</span> <span class="nf">set_sec_struct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">ssdist_filename</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">ssidx</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> param ssdist_filename:</span> +<span class="sd"> ssidx :</span> +<span class="sd"> return: (Default value = False)</span> +<span class="sd"> ssdist_filename :</span> +<span class="sd"> (Default value = '')</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: Add test checking if both amino acid and sec_struct sequence</span> + <span class="c1"># have the same length after seq_sublist call</span> + <span class="c1"># Read secondary structure prediction file</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> + <span class="k">if</span> <span class="n">ssdist_filename</span><span class="p">:</span> + <span class="c1"># Read secondary distance matrix</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">read_ssdist</span><span class="p">(</span><span class="n">ssdist_filename</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"No secondary structure distance file found. Please "</span> + <span class="s2">"check configuration file"</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">:</span> + <span class="c1"># Synchronise sec structure sequence with aa sequence</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Align secondary structure sequence with protein "</span> + <span class="s2">"sequence"</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">seq_sublist</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> + <span class="k">if</span> <span class="n">ssidx</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Using secondary structure index for amino acid "</span> + <span class="s2">"sequence"</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sync_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">humanidx</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">index</span><span class="p">)</span></div> + +<div class="viewcode-block" id="Protein.write_seq"><a class="viewcode-back" href="../../ariaec.html#ariaec.protein.Protein.write_seq">[docs]</a> <span class="k">def</span> <span class="nf">write_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">outfile</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> outfile :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: same as above, trouble with unicode calls inside capturing</span> + <span class="c1"># with Capturing() as output:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">WriteSeq</span><span class="p">(</span><span class="n">text_type</span><span class="p">(</span><span class="n">outfile</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">seqfile_path</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">outfile</span></div></div> + + +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> + <span class="kn">from</span> <span class="nn">.settings</span> <span class="k">import</span> <span class="n">AriaEcSettings</span> + <span class="n">settings</span> <span class="o">=</span> <span class="n">AriaEcSettings</span><span class="p">(</span><span class="s2">"setup"</span><span class="p">)</span> + <span class="n">prot</span> <span class="o">=</span> <span class="n">Protein</span><span class="p">(</span><span class="n">settings</span><span class="p">)</span> + <span class="n">prot</span><span class="o">.</span><span class="n">set_aa_sequence</span><span class="p">(</span><span class="s2">"../examples/data/BPT1_BOVIN.fa"</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">prot</span><span class="o">.</span><span class="n">aa_sequence</span><span class="p">)</span> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/protmap.html b/examples-dev/olds/_build/html/_modules/ariaec/protmap.html new file mode 100644 index 0000000..bd9f8bd --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/protmap.html @@ -0,0 +1,2743 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.protmap — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.protmap</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.protmap</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> ARIA Evolutionary Constraints Tools</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> +<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">defaultdict</span> +<span class="kn">from</span> <span class="nn">copy</span> <span class="k">import</span> <span class="n">deepcopy</span> + +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">re</span> +<span class="kn">import</span> <span class="nn">csv</span> +<span class="kn">import</span> <span class="nn">six</span> +<span class="kn">import</span> <span class="nn">string</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">textwrap</span> +<span class="kn">import</span> <span class="nn">datetime</span> +<span class="kn">import</span> <span class="nn">operator</span> +<span class="kn">import</span> <span class="nn">itertools</span> +<span class="kn">import</span> <span class="nn">collections</span> + +<span class="kn">import</span> <span class="nn">matplotlib</span> +<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span> +<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="nn">sns</span> +<span class="kn">import</span> <span class="nn">sklearn.metrics</span> <span class="k">as</span> <span class="nn">skm</span> + +<span class="kn">import</span> <span class="nn">aria.ConversionTable</span> <span class="k">as</span> <span class="nn">ConversionTable</span> +<span class="kn">import</span> <span class="nn">aria.legacy.AminoAcid</span> <span class="k">as</span> <span class="nn">AminoAcid</span> + +<span class="kn">from</span> <span class="nn">matplotlib</span> <span class="k">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span> +<span class="kn">from</span> <span class="nn">matplotlib.lines</span> <span class="k">import</span> <span class="n">Line2D</span> + +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="p">(</span><span class="n">tickmin</span><span class="p">,</span> <span class="n">tickrot</span><span class="p">,</span> <span class="n">titleprint</span><span class="p">,</span> <span class="n">addtup</span><span class="p">)</span> +<span class="kn">from</span> <span class="nn">.ndconv</span> <span class="k">import</span> <span class="n">net_deconv</span> + + +<span class="n">matplotlib</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s2">"Agg"</span><span class="p">,</span> <span class="n">warn</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> +<span class="c1"># TODO: check dataframe symmetry or always use unstack</span> +<span class="c1"># TODO: objet MapContainer contenant les differentes maps en attributs ! (et</span> +<span class="c1"># non en clef de dict)</span> + + +<div class="viewcode-block" id="Map"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map">[docs]</a><span class="k">class</span> <span class="nc">Map</span><span class="p">(</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">):</span> + <span class="sd">"""Distance/contact matrix"""</span> + + <span class="n">mtype_choices</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'contact'</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="s1">'distance'</span><span class="p">:</span> <span class="nb">float</span><span class="p">,</span> <span class="s2">"score"</span><span class="p">:</span> <span class="nb">float</span><span class="p">}</span> + +<div class="viewcode-block" id="Map.update"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> args :</span> +<span class="sd"> param kwargs:</span> +<span class="sd"> *args :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> + + <span class="c1"># def _constructor_expanddim(self):</span> + <span class="c1"># super(Map, self)._constructor_expanddim()</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="s1">'distance'</span><span class="p">,</span> + <span class="n">duplicate_levels</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">desc</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> index</span> +<span class="sd"> columns</span> +<span class="sd"> mtype</span> +<span class="sd"> duplicate_levels</span> +<span class="sd"> Allow duplicate levels in dataframe</span> +<span class="sd"> data</span> +<span class="sd"> dtype</span> +<span class="sd"> sym</span> +<span class="sd"> desc</span> +<span class="sd"> path</span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">dtype</span><span class="p">:</span> + <span class="n">dtype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_type</span><span class="p">(</span><span class="n">mtype</span><span class="p">)</span> + <span class="c1"># TODO: should probably init to np.NaN</span> + <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">data</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">if</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">bool</span> <span class="k">else</span> <span class="n">np</span><span class="o">.</span><span class="n">NaN</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">dtype</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> + <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">duplicate_levels</span> <span class="o">=</span> <span class="n">duplicate_levels</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mtype</span> <span class="o">=</span> <span class="n">mtype</span> + <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">=</span> <span class="n">dtype</span> + <span class="k">if</span> <span class="n">mtype</span> <span class="o">==</span> <span class="s2">"score"</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sort_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sym</span> <span class="o">=</span> <span class="n">sym</span> + <span class="bp">self</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="n">desc</span> + <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span> + + <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__str__</span><span class="p">()</span> + +<div class="viewcode-block" id="Map.sortedset"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.sortedset">[docs]</a> <span class="k">def</span> <span class="nf">sortedset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">human_idx</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> human_idx :</span> +<span class="sd"> (Default value = False)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Remove duplicate in sort_list</span> + <span class="sd">"""</span> + +<span class="sd"> :param human_idx:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="n">n</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">human_idx</span> <span class="k">else</span> <span class="mi">0</span> + <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"sort_list"</span><span class="p">):</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">:</span> + <span class="c1"># Use OrderedDict to keep the order</span> + <span class="k">return</span> <span class="p">[(</span><span class="n">x</span> <span class="o">+</span> <span class="n">n</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">n</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> + <span class="n">collections</span><span class="o">.</span><span class="n">OrderedDict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sort_list</span><span class="p">)]</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Asym matrix, no need to remove duplicate</span> + <span class="k">return</span> <span class="p">[(</span><span class="n">x</span> <span class="o">+</span> <span class="n">n</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">n</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_list</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="kc">None</span></div> + +<div class="viewcode-block" id="Map.check_type"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.check_type">[docs]</a> <span class="k">def</span> <span class="nf">check_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mtype</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> mtype :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mtype_choices</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">mtype</span><span class="p">)</span> + <span class="k">if</span> <span class="n">value</span><span class="p">:</span> + <span class="k">return</span> <span class="n">value</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Map type should be in list </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mtype_choices</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> + <span class="k">return</span> <span class="kc">None</span></div> + +<div class="viewcode-block" id="Map.reduce"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.reduce">[docs]</a> <span class="k">def</span> <span class="nf">reduce</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Low complexcity dataframe"""</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + +<div class="viewcode-block" id="Map.copy"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Copy the current map</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + +<div class="viewcode-block" id="Map.remove"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rm_list</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> rm_list :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Reset values at positions in rm_list</span> + <span class="sd">"""</span> + +<span class="sd"> :param rm_list:</span> +<span class="sd"> """</span> + <span class="n">value</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">==</span> <span class="nb">bool</span> <span class="k">else</span> <span class="n">np</span><span class="o">.</span><span class="n">NaN</span> + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">rm_list</span><span class="p">:</span> + <span class="n">idx1</span><span class="p">,</span> <span class="n">idx2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">[</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">[</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="n">idx1</span><span class="p">,</span> <span class="n">idx2</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> + <span class="c1"># self.iat[(contact[0], contact[1])] = value</span> + <span class="c1"># self.iat[(contact[1], contact[0])] = value</span> + <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'sort_list'</span><span class="p">):</span> + <span class="c1"># ! sort_list start at 1</span> + <span class="k">if</span> <span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_list</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sort_list</span><span class="o">.</span><span class="n">remove</span><span class="p">((</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> + <span class="k">if</span> <span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort_list</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sort_list</span><span class="o">.</span><span class="n">remove</span><span class="p">((</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span></div> + +<div class="viewcode-block" id="Map.to_series"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.to_series">[docs]</a> <span class="k">def</span> <span class="nf">to_series</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Return panda series related to lower triangle values"""</span> + <span class="n">df</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> + <span class="c1"># remove values from upper triangle</span> + <span class="n">df</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">triu_indices_from</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="mi">1</span><span class="p">)]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span> + <span class="c1"># pd.series with only lower triangle values</span> + <span class="k">return</span> <span class="n">df</span><span class="o">.</span><span class="n">unstack</span><span class="p">()</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span></div> + +<div class="viewcode-block" id="Map.topmap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.topmap">[docs]</a> <span class="k">def</span> <span class="nf">topmap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scoremap</span><span class="p">,</span> <span class="n">nb_topcontact</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> scoremap :</span> +<span class="sd"> param nb_topcontact:</span> +<span class="sd"> nb_topcontact :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">!=</span> <span class="nb">bool</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Error when retrieving top contact map. The type of "</span> + <span class="s2">"the given map is not a contact type!"</span><span class="p">)</span> + <span class="k">return</span> <span class="bp">self</span> + <span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="kc">False</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">shape</span> <span class="o">==</span> <span class="n">scoremap</span><span class="o">.</span><span class="n">shape</span><span class="p">:</span> + <span class="n">pair_list</span> <span class="o">=</span> <span class="n">scoremap</span><span class="o">.</span><span class="n">sortedset</span><span class="p">()[:</span><span class="n">nb_topcontact</span><span class="p">]</span> + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">pair_list</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">iat</span><span class="p">[(</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="kc">True</span> + <span class="bp">self</span><span class="o">.</span><span class="n">iat</span><span class="p">[(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">])]</span> <span class="o">=</span> <span class="kc">True</span> + <span class="k">return</span> <span class="bp">self</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Given scoremap has not the same dimension !"</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span></div> + +<div class="viewcode-block" id="Map.subfill"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.subfill">[docs]</a> <span class="k">def</span> <span class="nf">subfill</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pairdict</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Fill map with dict giving</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pairdict :</span> +<span class="sd"> param level:</span> +<span class="sd"> level :</span> +<span class="sd"> (Default value = 0)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">pairdict</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="o">.</span><span class="n">upper</span><span class="p">():</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">pairdict</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span> + <span class="k">if</span> <span class="s2">"def"</span> <span class="ow">in</span> <span class="n">pairdict</span><span class="p">:</span> + <span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">pairdict</span><span class="p">[</span><span class="s2">"def"</span><span class="p">]</span> + <span class="k">for</span> <span class="n">idxval</span> <span class="ow">in</span> <span class="n">pairdict</span><span class="p">:</span> + <span class="n">idx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="n">level</span><span class="p">)</span> <span class="o">==</span> <span class="n">idxval</span> + <span class="bp">self</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">idx</span><span class="p">,</span> <span class="n">idx</span><span class="p">]</span> <span class="o">=</span> <span class="n">pairdict</span><span class="p">[</span><span class="n">idxval</span><span class="p">]</span></div> + +<div class="viewcode-block" id="Map.set_value"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.Map.set_value">[docs]</a> <span class="k">def</span> <span class="nf">set_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> index :</span> +<span class="sd"> param col:</span> +<span class="sd"> value :</span> +<span class="sd"> param kwargs:</span> +<span class="sd"> col :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">:</span> + <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div> + + +<span class="c1"># TODO: Matrices PosAaAtmMap, AaAtmMap, AtmMap</span> +<div class="viewcode-block" id="ProteinMap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap">[docs]</a><span class="k">class</span> <span class="nc">ProteinMap</span><span class="p">(</span><span class="n">Map</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Abstract class for protein contact map objects</span> +<span class="sd"> """</span> + <span class="c1"># TODO: matrix should be not only for heavy atoms</span> + <span class="c1"># Matrix only for heavy atoms.</span> + <span class="n">heavy_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"[CNOS][ABGDEZH][0-9]?"</span><span class="p">)</span> + <span class="n">all_reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^((?!cns|dyana).*)$"</span><span class="p">)</span> + <span class="c1"># TODO: Autre methodes de dist</span> + <span class="n">distance_method</span> <span class="o">=</span> <span class="s1">'euclidean'</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"index"</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"columns"</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">kwargs</span><span class="p">[</span><span class="s2">"index"</span><span class="p">],</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"columns"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_index</span><span class="p">(</span> + <span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + <span class="nb">super</span><span class="p">(</span><span class="n">ProteinMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">contact_flags</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"flaglist"</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_maplot</span> <span class="o">=</span> <span class="kc">None</span> + + <span class="c1"># def _constructor_expanddim(self):</span> + <span class="c1"># return self._constructor_expanddim()</span> + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">sequence</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Specific sequence related to the map in a string</span> +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> str</span> + +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span> + +<div class="viewcode-block" id="ProteinMap.create_heatmap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.create_heatmap">[docs]</a> <span class="k">def</span> <span class="nf">create_heatmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Generate heatmap</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + +<div class="viewcode-block" id="ProteinMap.contact_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.contact_map">[docs]</a> <span class="k">def</span> <span class="nf">contact_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="n">scsc_min</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Generate contact map</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> contactdef :</span> +<span class="sd"> param scsc_min:</span> +<span class="sd"> scsc_min :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + +<div class="viewcode-block" id="ProteinMap.create_index"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.create_index">[docs]</a> <span class="k">def</span> <span class="nf">create_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> sequence</span> +<span class="sd"> kwargs</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="c1"># Indexation matrice (tous les atomes ou tous les residus)</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + +<div class="viewcode-block" id="ProteinMap.reduce"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.reduce">[docs]</a> <span class="k">def</span> <span class="nf">reduce</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Lower index level if multi index"""</span> + <span class="c1"># TODO: check if multiindex</span> + <span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'-'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">]</span> + <span class="n">index</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'-'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">]</span> + <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'__init__'</span><span class="p">)(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> + <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> + <span class="n">data</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">as_matrix</span><span class="p">(),</span> + <span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> + <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span></div> + +<div class="viewcode-block" id="ProteinMap.copy"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Copy dataframe and related attributes of the map</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">df</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">return</span> <span class="n">ProteinMap</span><span class="p">(</span> + <span class="n">sequence</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">df</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span></div> + +<div class="viewcode-block" id="ProteinMap.plotflush"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.plotflush">[docs]</a> <span class="k">def</span> <span class="nf">plotflush</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Flush contact map plot"""</span> + <span class="n">plt</span><span class="o">.</span><span class="n">clf</span><span class="p">()</span> + <span class="n">plt</span><span class="o">.</span><span class="n">cla</span><span class="p">()</span> + <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_maplot</span> <span class="o">=</span> <span class="kc">None</span></div> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">maplot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">linewidths</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Contact map plot</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> linewidths :</span> +<span class="sd"> (Default value = 0.0)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Contact map Plot</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maplot</span><span class="p">:</span> + <span class="c1"># Flush matplot</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Build maplot"</span><span class="p">)</span> + <span class="n">minticks</span> <span class="o">=</span> <span class="n">tickmin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shift</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># Nb graduations</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">_maplot</span> <span class="o">=</span> <span class="n">sns</span><span class="o">.</span><span class="n">heatmap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">square</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">cbar</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> + <span class="n">linewidths</span><span class="o">=</span><span class="n">linewidths</span><span class="p">,</span> <span class="n">vmax</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">vmin</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> + <span class="n">cmap</span><span class="o">=</span><span class="n">sns</span><span class="o">.</span><span class="n">diverging_palette</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">220</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">7</span><span class="p">,</span> + <span class="n">as_cmap</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> + <span class="n">xticklabels</span><span class="o">=</span><span class="n">minticks</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> + <span class="n">yticklabels</span><span class="o">=</span><span class="n">minticks</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> + <span class="n">linecolor</span><span class="o">=</span><span class="s2">"grey"</span><span class="p">)</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_maplot</span> + +<div class="viewcode-block" id="ProteinMap.saveplot"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.saveplot">[docs]</a> <span class="k">def</span> <span class="nf">saveplot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">outprefix</span><span class="o">=</span><span class="s2">"protein"</span><span class="p">,</span> <span class="n">size_fig</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> + <span class="n">plot_ext</span><span class="o">=</span><span class="s2">"pdf"</span><span class="p">,</span> <span class="n">plot_dpi</span><span class="o">=</span><span class="mi">200</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Save plot</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> outdir :</span> +<span class="sd"> param outprefix: (Default value = '')</span> +<span class="sd"> size_fig :</span> +<span class="sd"> param plot_ext: (Default value = 10)</span> +<span class="sd"> plot_dpi :</span> +<span class="sd"> (Default value = 200)</span> +<span class="sd"> outprefix :</span> +<span class="sd"> (Default value = "protein")</span> +<span class="sd"> plot_ext :</span> +<span class="sd"> (Default value = "pdf")</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">plotpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">outdir</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">.maplot.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span> + <span class="n">outprefix</span><span class="p">,</span> <span class="n">plot_ext</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate contact map plot (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">plotpath</span><span class="p">)</span> + <span class="n">f</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">()</span> + <span class="n">tickrot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">axes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">figure</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">figure</span><span class="o">.</span><span class="n">set_size_inches</span><span class="p">(</span><span class="n">size_fig</span><span class="p">,</span> <span class="n">size_fig</span><span class="p">)</span> + <span class="n">map_title</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> contacts map"</span> <span class="o">%</span> <span class="n">outprefix</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">map_title</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">figure</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> + + <span class="n">f</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">figure</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">plotpath</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="n">plot_dpi</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">(</span><span class="s1">'all'</span><span class="p">)</span></div> + +<div class="viewcode-block" id="ProteinMap.contactset"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.contactset">[docs]</a> <span class="k">def</span> <span class="nf">contactset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">human_idx</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Remove duplicate in contact_list</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> human_idx :</span> +<span class="sd"> return: (Default value = False)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> list</span> +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">contact_list</span><span class="p">(</span><span class="n">human_idx</span><span class="p">)</span> + <span class="k">if</span> <span class="n">contacts</span><span class="p">:</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">((</span><span class="nb">tuple</span><span class="p">(</span><span class="nb">sorted</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)))</span> + <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">contacts</span><span class="p">)))</span> + <span class="k">return</span> <span class="n">contacts</span></div> + +<div class="viewcode-block" id="ProteinMap.contact_list"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.contact_list">[docs]</a> <span class="k">def</span> <span class="nf">contact_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">human_idx</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Return contact list</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> human_idx :</span> +<span class="sd"> return: (Default value = False)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> list</span> +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">contact_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">n</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">human_idx</span> <span class="k">else</span> <span class="mi">0</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="ow">is</span> <span class="nb">bool</span><span class="p">:</span> + <span class="c1"># for irow, row in enumerate(self):</span> + <span class="k">for</span> <span class="n">irow</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">):</span> + <span class="k">for</span> <span class="n">icol</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="n">row</span><span class="p">]):</span> + <span class="k">if</span> <span class="n">value</span><span class="p">:</span> + <span class="n">contact_list</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">irow</span> <span class="o">+</span> <span class="n">n</span><span class="p">,</span> <span class="n">icol</span> <span class="o">+</span> <span class="n">n</span><span class="p">))</span> + <span class="k">return</span> <span class="n">contact_list</span></div> + +<div class="viewcode-block" id="ProteinMap.compareplot"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.compareplot">[docs]</a> <span class="k">def</span> <span class="nf">compareplot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protmap</span><span class="p">,</span> <span class="n">save_fig</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Compare 2 contact map and plot differences</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> protmap :</span> +<span class="sd"> param save_fig:</span> +<span class="sd"> alpha :</span> +<span class="sd"> param kwargs: (Default value = None)</span> +<span class="sd"> save_fig :</span> +<span class="sd"> (Default value = True)</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">plotflush</span><span class="p">()</span> + <span class="c1"># Contact map plot</span> + <span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">protmap</span><span class="p">,</span> <span class="s2">"shape"</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">shape</span> <span class="o">!=</span> <span class="n">protmap</span><span class="o">.</span><span class="n">shape</span><span class="p">:</span> + <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Cant't compare </span><span class="si">%s</span><span class="s2"> map with </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span> + <span class="n">protmap</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">cmplist</span> <span class="o">=</span> <span class="n">protmap</span><span class="o">.</span><span class="n">contact_list</span><span class="p">(</span><span class="n">human_idx</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + + <span class="n">ymax</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> + <span class="k">if</span> <span class="n">protmap</span><span class="o">.</span><span class="n">contact_flags</span><span class="p">:</span> + <span class="n">flags</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">protmap</span><span class="o">.</span><span class="n">contact_flags</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> + <span class="c1"># Color palette</span> + <span class="n">pal</span> <span class="o">=</span> <span class="n">sns</span><span class="o">.</span><span class="n">color_palette</span><span class="p">(</span><span class="s2">"hls"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">flags</span><span class="p">))</span> + <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">flag</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">flags</span><span class="p">):</span> + <span class="n">conlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">contact</span> <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">protmap</span><span class="o">.</span><span class="n">contact_flags</span> <span class="k">if</span> + <span class="n">protmap</span><span class="o">.</span><span class="n">contact_flags</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span> <span class="o">==</span> <span class="n">flag</span><span class="p">]</span> + <span class="n">xind</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">-</span> <span class="o">.</span><span class="mi">5</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> + <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">conlist</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">conlist</span><span class="p">)[</span><span class="mi">1</span><span class="p">]]</span> + <span class="n">yind</span> <span class="o">=</span> <span class="p">[</span><span class="n">ymax</span> <span class="o">-</span> <span class="n">y</span> <span class="o">+</span> <span class="mf">1.5</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> + <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">conlist</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">conlist</span><span class="p">)[</span><span class="mi">0</span><span class="p">]]</span> + <span class="n">color</span> <span class="o">=</span> <span class="n">pal</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> + <span class="n">mark</span> <span class="o">=</span> <span class="n">Line2D</span><span class="o">.</span><span class="n">filled_markers</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> + <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">xind</span><span class="p">,</span> <span class="n">yind</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="mi">8</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="n">color</span><span class="p">,</span> + <span class="n">linewidths</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="n">alpha</span><span class="p">,</span> + <span class="n">marker</span><span class="o">=</span><span class="n">mark</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Contact list: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">cmplist</span><span class="p">)</span> + <span class="n">xind</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">-</span> <span class="o">.</span><span class="mi">5</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> + <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">cmplist</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">cmplist</span><span class="p">)[</span><span class="mi">1</span><span class="p">]]</span> + <span class="n">yind</span> <span class="o">=</span> <span class="p">[</span><span class="n">ymax</span> <span class="o">-</span> <span class="n">y</span> <span class="o">+</span> <span class="mf">1.5</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> + <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">cmplist</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">cmplist</span><span class="p">)[</span><span class="mi">0</span><span class="p">]]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Xind: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">xind</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Yind: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">yind</span><span class="p">)</span> + <span class="n">color</span> <span class="o">=</span> <span class="s2">"red"</span> + <span class="c1"># width = [0.3 for _ in xind]</span> + <span class="c1"># for x, y, h in zip(xind, yind, width):</span> + <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">xind</span><span class="p">,</span> <span class="n">yind</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="n">color</span><span class="p">,</span> + <span class="n">linewidths</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> + <span class="n">alpha</span><span class="o">=</span><span class="n">alpha</span><span class="p">)</span> + <span class="k">if</span> <span class="n">save_fig</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">saveplot</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_write_report</span><span class="p">(</span><span class="n">reportpath</span><span class="p">,</span> <span class="o">**</span><span class="n">scores</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Write report file from score dict</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> reportpath :</span> +<span class="sd"> </span> +<span class="sd"> scores :</span> +<span class="sd"> </span> +<span class="sd"> **scores :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">reportpath</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">reportf</span><span class="p">:</span> + <span class="n">msg</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">Formatter</span><span class="p">()</span><span class="o">.</span><span class="n">vformat</span><span class="p">(</span><span class="s2">"""</span><span class="se">\</span> +<span class="s2">## Report </span><span class="si">{map1name}</span><span class="s2"> vs. </span><span class="si">{map2name}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## Date: </span><span class="si">{date}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## Plots: </span><span class="si">{outdir}</span><span class="s2"></span> +<span class="s2">## Reference map: </span><span class="si">{map1path}</span><span class="s2"></span> +<span class="s2">## Contact map: </span><span class="si">{map2path}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## -----------------------------------------------------------------------------</span> +<span class="s2">##</span> +<span class="s2">## Sequence:</span> +<span class="s2">## </span><span class="si">{seq}</span><span class="s2"></span> +<span class="s2">## Protein length: </span><span class="si">{protlen}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## -----------------------------------------------------------------------------</span> +<span class="s2">##</span> +<span class="s2">## Matthews correlation coefficient (MCC): </span><span class="si">{mcc}</span><span class="s2"></span> +<span class="s2">## F1 score: </span><span class="si">{f1s}</span><span class="s2"></span> +<span class="s2">## F2 score: </span><span class="si">{f2s}</span><span class="s2"></span> +<span class="s2">## F0.5 score: </span><span class="si">{f05s}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## Precision: </span><span class="si">{precision}</span><span class="s2"></span> +<span class="s2">## Recall (Sensibility): </span><span class="si">{recall}</span><span class="s2"></span> +<span class="s2">## Accuracy: </span><span class="si">{accuracy}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## Hamming loss: </span><span class="si">{hamm}</span><span class="s2"></span> +<span class="s2">## Hinge loss: </span><span class="si">{hin}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## -----------------------------------------------------------------------------</span> +<span class="s2">##</span> +<span class="s2">## Plot scores</span> +<span class="s2">##</span> +<span class="s2">## ROC Area Under Curve: </span><span class="si">{roc_auc}</span><span class="s2"></span> +<span class="s2">## Average precision score: </span><span class="si">{aver_prec}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## -----------------------------------------------------------------------------</span> +<span class="s2">##</span> +<span class="s2">## Precision recall curve</span> +<span class="s2">##</span> +<span class="s2">## Precision values:</span> +<span class="s2">## </span><span class="si">{allprec}</span><span class="s2"></span> +<span class="s2">## Recall values:</span> +<span class="s2">## </span><span class="si">{allrec}</span><span class="s2"></span> +<span class="s2">## Score tresholds (</span><span class="si">{map2name}</span><span class="s2">):</span> +<span class="s2">## </span><span class="si">{prthres}</span><span class="s2"></span> +<span class="s2">##</span> +<span class="s2">## -----------------------------------------------------------------------------</span> +<span class="s2">##</span> +<span class="s2">## ROC curve</span> +<span class="s2">##</span> +<span class="s2">## True Positive Rate (Sensibility) values:</span> +<span class="s2">## </span><span class="si">{alltpr}</span><span class="s2"></span> +<span class="s2">## False Positive Rate (1 - Specificity) values:</span> +<span class="s2">## </span><span class="si">{allfpr}</span><span class="s2"></span> +<span class="s2">## Score tresholds (</span><span class="si">{map2name}</span><span class="s2">):</span> +<span class="s2">## </span><span class="si">{rocthres}</span><span class="s2">"""</span><span class="p">,</span> <span class="p">(),</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">scores</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">msg</span><span class="p">)</span> + <span class="n">reportf</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> + +<div class="viewcode-block" id="ProteinMap.classification_metrics"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.classification_metrics">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">classification_metrics</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">,</span> <span class="n">y_scores</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Compute classification metrics</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> y_true : numpy array of true values</span> +<span class="sd"> </span> +<span class="sd"> y_pred : numpy array of predicted values</span> +<span class="sd"> </span> +<span class="sd"> y_scores : numpy array of prediction scores</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">metrics</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">if</span> <span class="mi">1</span> <span class="ow">in</span> <span class="n">y_pred</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">in</span> <span class="n">y_true</span><span class="p">:</span> + <span class="n">metrics</span><span class="o">.</span><span class="n">update</span><span class="p">({</span> + <span class="s1">'accuracy'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">accuracy_score</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">),</span> + <span class="s1">'precision'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">precision_score</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">),</span> + <span class="s1">'recall'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">recall_score</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">),</span> + <span class="s1">'mcc'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">matthews_corrcoef</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">),</span> + <span class="s1">'f1s'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">f1_score</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">),</span> + <span class="s1">'f2s'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">fbeta_score</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> + <span class="s1">'f05s'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">fbeta_score</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> + <span class="s1">'hamm'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">hamming_loss</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">),</span> + <span class="s1">'hin'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">hinge_loss</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">)</span> + <span class="p">})</span> + + <span class="k">if</span> <span class="n">y_scores</span><span class="p">:</span> + <span class="c1"># ROC plot</span> + <span class="c1"># Replace nan values in y_scores</span> + <span class="n">y_scores</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">y_scores</span><span class="p">)]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">nanmin</span><span class="p">(</span><span class="n">y_scores</span><span class="p">))</span> + <span class="n">metrics</span><span class="o">.</span><span class="n">update</span><span class="p">({</span> + <span class="s1">'roc_auc'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">roc_auc_score</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_scores</span><span class="p">),</span> + <span class="s1">'aver_prec'</span><span class="p">:</span> <span class="n">skm</span><span class="o">.</span><span class="n">average_precision_score</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_scores</span><span class="p">)</span> + <span class="p">})</span> + <span class="n">metrics</span><span class="p">[</span><span class="s1">'allfpr'</span><span class="p">],</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'alltpr'</span><span class="p">],</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'rocthres'</span><span class="p">]</span> <span class="o">=</span> \ + <span class="n">skm</span><span class="o">.</span><span class="n">roc_curve</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_scores</span><span class="p">,</span> <span class="n">pos_label</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + <span class="n">metrics</span><span class="p">[</span><span class="s1">'allprec'</span><span class="p">],</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'allrec'</span><span class="p">],</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'prthres'</span><span class="p">]</span> <span class="o">=</span> \ + <span class="n">skm</span><span class="o">.</span><span class="n">precision_recall_curve</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_scores</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">metrics</span></div> + + <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">_metrics_plot</span><span class="p">(</span><span class="n">metrics</span><span class="p">,</span> <span class="n">mapnames</span><span class="o">=</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">),</span> <span class="n">plotdir</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">outprefix</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> + <span class="n">plot_ext</span><span class="o">=</span><span class="s2">"pdf"</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> metrics :</span> +<span class="sd"> </span> +<span class="sd"> mapnames :</span> +<span class="sd"> (Default value = ('')</span> +<span class="sd"> '' :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">outprefix</span> <span class="o">=</span> <span class="n">outprefix</span> <span class="k">if</span> <span class="n">outprefix</span> <span class="k">else</span> <span class="s2">"maplot"</span> + <span class="n">csv_roc</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plotdir</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">.roc.csv"</span> <span class="o">%</span> <span class="n">outprefix</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate roc file (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">csv_roc</span><span class="p">)</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">csv_roc</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"TPR,FPR,Treshold</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> + <span class="n">writer</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">writer</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> + <span class="n">writer</span><span class="o">.</span><span class="n">writerows</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">metrics</span><span class="p">[</span><span class="s1">'alltpr'</span><span class="p">],</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'allfpr'</span><span class="p">],</span> + <span class="n">metrics</span><span class="p">[</span><span class="s1">'rocthres'</span><span class="p">]))</span> + + <span class="n">plotpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plotdir</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">.roc.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">outprefix</span><span class="p">,</span> + <span class="n">plot_ext</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate roc plot (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">plotpath</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span> + <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">metrics</span><span class="p">[</span><span class="s1">'allfpr'</span><span class="p">],</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'alltpr'</span><span class="p">],</span> + <span class="n">label</span><span class="o">=</span><span class="s1">'ROC curve (area = </span><span class="si">%0.2f</span><span class="s1">)'</span> <span class="o">%</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'roc_auc'</span><span class="p">])</span> + <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="s1">'k--'</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">([</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">])</span> + <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">([</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">])</span> + <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'False Positive Rate'</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'True Positive Rate'</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">'Receiver operating characteristic </span><span class="si">%s</span><span class="s1"> vs. </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span> + <span class="n">mapnames</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">mapnames</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> + <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s2">"lower right"</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">plotpath</span><span class="p">)</span> + + <span class="n">csv_precall</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plotdir</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">.roc.csv"</span> <span class="o">%</span> <span class="n">outprefix</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate precall file (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">csv_precall</span><span class="p">)</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">csv_precall</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> + <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"Precision,Recall,Treshold</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> + <span class="n">writer</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">writer</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> + <span class="n">writer</span><span class="o">.</span><span class="n">writerows</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">metrics</span><span class="p">[</span><span class="s1">'allprec'</span><span class="p">],</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'allrec'</span><span class="p">],</span> + <span class="n">metrics</span><span class="p">[</span><span class="s1">'prthres'</span><span class="p">]))</span> + + <span class="n">plotpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plotdir</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">.precall.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">outprefix</span><span class="p">,</span> + <span class="n">plot_ext</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate precall plot (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">plotpath</span><span class="p">)</span> + <span class="c1"># Precision recall curve</span> + <span class="n">plt</span><span class="o">.</span><span class="n">clf</span><span class="p">()</span> + <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">metrics</span><span class="p">[</span><span class="s1">'allrec'</span><span class="p">],</span> <span class="n">metrics</span><span class="p">[</span><span class="s1">'allprec'</span><span class="p">],</span> + <span class="n">label</span><span class="o">=</span><span class="s1">'Precision-Recall curve'</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'Recall'</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Precision'</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">([</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">])</span> + <span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">([</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">])</span> + <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">'Precision-Recall </span><span class="si">{1}</span><span class="s1"> vs. </span><span class="si">{2}</span><span class="s1">: AUC=</span><span class="si">{0:0.2f}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> + <span class="n">metrics</span><span class="p">[</span><span class="s1">'aver_prec'</span><span class="p">],</span> <span class="n">mapnames</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">mapnames</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> + <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s2">"lower left"</span><span class="p">)</span> + <span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">plotpath</span><span class="p">)</span> + +<div class="viewcode-block" id="ProteinMap.report"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.report">[docs]</a> <span class="k">def</span> <span class="nf">report</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmpmap</span><span class="p">,</span> <span class="n">scoremap</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">outprefix</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">plotdir</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> + <span class="c1"># plot_ext="pdf", plotag=True, n_factors=(0.5, 1.0, 1.5)):</span> + <span class="n">plot_ext</span><span class="o">=</span><span class="s2">"pdf"</span><span class="p">,</span> <span class="n">plotag</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Generate contact map report file</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> cmpmap :</span> +<span class="sd"> </span> +<span class="sd"> scoremap :</span> +<span class="sd"> (Default value = None)</span> +<span class="sd"> outprefix :</span> +<span class="sd"> (Default value = "")</span> +<span class="sd"> outdir :</span> +<span class="sd"> (Default value = "")</span> +<span class="sd"> plotdir :</span> +<span class="sd"> (Default value = "")</span> +<span class="sd"> plot_ext :</span> +<span class="sd"> (Default value = "pdf")</span> +<span class="sd"> plotag :</span> +<span class="sd"> (Default value = True)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="n">filename</span> <span class="o">=</span> <span class="s2">"."</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">outprefix</span><span class="p">,</span> <span class="s2">"mapreport"</span><span class="p">))</span> <span class="k">if</span> <span class="n">outprefix</span> <span class="k">else</span> \ + <span class="s2">"mapreport"</span> + <span class="n">reportpath</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">outdir</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate map report file (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">reportpath</span><span class="p">)</span> + + <span class="c1"># TODO: evaluate map statistics for several treshold (use submap var)</span> + <span class="c1"># nb_c = int(len(self.sequence) * float(n_factors[0]))</span> + <span class="c1"># submap = cmpmap.copy()</span> + <span class="c1"># print(np.array_equal(cmpmap.values.astype(int).flat,</span> + <span class="c1"># submap.topmap(scoremap, nb_c).values.astype(int).flat))</span> + + <span class="n">y_true</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span><span class="o">.</span><span class="n">flat</span><span class="p">)</span> + <span class="n">y_pred</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">cmpmap</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span><span class="o">.</span><span class="n">flat</span><span class="p">)</span> + <span class="n">y_scores</span> <span class="o">=</span> <span class="n">scoremap</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span><span class="o">.</span><span class="n">flat</span> <span class="k">if</span> <span class="n">scoremap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span> + + <span class="c1"># Compute classification metrics for the entire map</span> + <span class="n">metrics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">classification_metrics</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">,</span> <span class="n">y_scores</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">_write_report</span><span class="p">(</span> + <span class="n">reportpath</span><span class="p">,</span> <span class="n">map1name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> <span class="n">map2name</span><span class="o">=</span><span class="n">cmpmap</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">map1path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">map2path</span><span class="o">=</span><span class="n">cmpmap</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> + <span class="n">seq</span><span class="o">=</span><span class="s2">"</span><span class="se">\n</span><span class="s2">## "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">textwrap</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">77</span><span class="p">)),</span> + <span class="n">protlen</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">),</span> + <span class="n">date</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"%A </span><span class="si">%d</span><span class="s2">. %B %Y"</span><span class="p">),</span> + <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">,</span> <span class="o">**</span><span class="n">metrics</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">plotag</span> <span class="ow">and</span> <span class="n">scoremap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_metrics_plot</span><span class="p">(</span><span class="n">metrics</span><span class="p">,</span> <span class="n">mapnames</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> <span class="n">cmpmap</span><span class="o">.</span><span class="n">desc</span><span class="p">),</span> + <span class="n">outprefix</span><span class="o">=</span><span class="n">outprefix</span><span class="p">,</span> <span class="n">plot_ext</span><span class="o">=</span><span class="n">plot_ext</span><span class="p">,</span> + <span class="n">plotdir</span><span class="o">=</span><span class="n">plotdir</span><span class="p">)</span></div> + +<div class="viewcode-block" id="ProteinMap.compare_contactmap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.compare_contactmap">[docs]</a> <span class="k">def</span> <span class="nf">compare_contactmap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmpmap</span><span class="p">,</span> <span class="n">contactlist</span><span class="p">,</span> <span class="n">outprefix</span><span class="p">,</span> + <span class="n">outdir</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">distmap</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">human_idx</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Compare 2 contact map and plot differences</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> cmpmap :</span> +<span class="sd"> param contactlist:</span> +<span class="sd"> outprefix :</span> +<span class="sd"> param outdir:</span> +<span class="sd"> distmap :</span> +<span class="sd"> param human_idx: (Default value = None)</span> +<span class="sd"> contactlist :</span> +<span class="sd"> </span> +<span class="sd"> outdir :</span> +<span class="sd"> (Default value = "")</span> +<span class="sd"> human_idx :</span> +<span class="sd"> (Default value = True)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># CSV file giving TP/FP contacts</span> + <span class="n">outpath</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">.contactcmp.csv"</span> <span class="o">%</span> <span class="p">(</span><span class="n">outdir</span><span class="p">,</span> + <span class="n">outprefix</span> <span class="k">if</span> <span class="n">outprefix</span> <span class="k">else</span> <span class="s2">"maplot"</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate stat file (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">outpath</span><span class="p">)</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">outpath</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">outfile</span><span class="p">:</span> + <span class="n">offset</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">human_idx</span> <span class="k">else</span> <span class="mi">0</span> + <span class="n">extra_header</span> <span class="o">=</span> <span class="s2">""</span> <span class="k">if</span> <span class="n">distmap</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">",dmin"</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"#resid1,resid2,res1,res2,TP/FP</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">extra_header</span><span class="p">)</span> + <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">contactlist</span><span class="p">:</span> + <span class="k">if</span> <span class="n">extra_header</span><span class="p">:</span> + <span class="n">dmin</span> <span class="o">=</span> <span class="s2">","</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">distmap</span><span class="o">.</span><span class="n">iat</span><span class="p">[(</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> + <span class="n">offset</span><span class="p">)])</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">dmin</span> <span class="o">=</span> <span class="s2">""</span> + <span class="n">contact</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">iat</span><span class="p">[(</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">)]</span> + <span class="n">cmpcontact</span> <span class="o">=</span> <span class="n">cmpmap</span><span class="o">.</span><span class="n">iat</span><span class="p">[(</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">)]</span> + <span class="k">if</span> <span class="n">contact</span> <span class="ow">and</span> <span class="n">cmpcontact</span><span class="p">:</span> + <span class="n">eq</span> <span class="o">=</span> <span class="s2">"TP"</span> + <span class="k">elif</span> <span class="n">contact</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cmpcontact</span><span class="p">:</span> + <span class="n">eq</span> <span class="o">=</span> <span class="s2">"FP"</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">contact</span> <span class="ow">and</span> <span class="n">cmpcontact</span><span class="p">:</span> + <span class="n">eq</span> <span class="o">=</span> <span class="s2">"FN"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">eq</span> <span class="o">=</span> <span class="s2">"TN"</span> + <span class="n">msg</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">,</span><span class="si">%s</span><span class="s2">,</span><span class="si">%s</span><span class="s2">,</span><span class="si">%s</span><span class="s2">,</span><span class="si">%s%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">],</span> + <span class="n">eq</span><span class="p">,</span> + <span class="n">dmin</span><span class="p">)</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span></div> + +<div class="viewcode-block" id="ProteinMap.write_contacts"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProteinMap.write_contacts">[docs]</a> <span class="k">def</span> <span class="nf">write_contacts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">human_idx</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">scoremap</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> prefix</span> +<span class="sd"> filename :</span> +<span class="sd"> param outdir:</span> +<span class="sd"> human_idx :</span> +<span class="sd"> param scoremap: (Default value = True)</span> +<span class="sd"> outdir :</span> +<span class="sd"> (Default value = "")</span> +<span class="sd"> scoremap :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">prefix</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="s2">"_"</span> <span class="k">if</span> <span class="n">prefix</span> <span class="k">else</span> <span class="n">prefix</span> + <span class="n">filepath</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s%s</span><span class="s2">.contact.txt"</span> <span class="o">%</span> <span class="p">(</span><span class="n">outdir</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">filename</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"."</span><span class="p">,</span> <span class="s2">"_"</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate contact file (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">filepath</span><span class="p">)</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">outfile</span><span class="p">:</span> + <span class="n">offset</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">human_idx</span> <span class="k">else</span> <span class="mi">0</span> + <span class="c1"># contacts = [sorted(contact) for contact in self.contactset()]</span> + <span class="c1"># for contact in sorted(contacts):</span> + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">contactset</span><span class="p">():</span> + <span class="n">contact</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">offset</span><span class="p">,</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">offset</span><span class="p">])</span> + <span class="k">if</span> <span class="n">scoremap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">score</span> <span class="o">=</span> <span class="n">scoremap</span><span class="o">.</span><span class="n">iat</span><span class="p">[(</span><span class="nb">int</span><span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">,</span> + <span class="nb">int</span><span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">-</span> <span class="n">offset</span><span class="p">)]</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%d</span><span class="s2"> </span><span class="si">%d</span><span class="s2"> </span><span class="si">%.4f</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> + <span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">score</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%d</span><span class="s2"> </span><span class="si">%d</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span></div></div> + + +<div class="viewcode-block" id="ResAtmMap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResAtmMap">[docs]</a><span class="k">class</span> <span class="nc">ResAtmMap</span><span class="p">(</span><span class="n">ProteinMap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Protein distance/contact matrix for all atom pairs. If no sequence given,</span> +<span class="sd"> protein distance/contact matrix for all amino acids</span> +<span class="sd"> Ex:</span> +<span class="sd"> residue PHE1 \</span> +<span class="sd"> atom CD1 CD2 CB CA CG CZ</span> +<span class="sd"> residue atom</span> +<span class="sd"> PHE1 CD1 0.000000 2.394145 2.455440 3.269219 1.391024 2.421148</span> +<span class="sd"> CD2 2.394145 0.000000 2.509243 3.407996 1.379875 2.401098</span> +<span class="sd"> CB 2.455440 2.509243 0.000000 1.507025 1.478053 4.267602</span> +<span class="sd"> CA 3.269219 3.407996 1.507025 0.000000 2.505414 5.085997</span> +<span class="sd"> CG 1.391024 1.379875 1.478053 2.505414 0.000000 2.790403</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + + <span class="c1"># def _constructor_expanddim(self):</span> + <span class="c1"># super(ResAtmMap, self)._constructor_expanddim()</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="c1"># Sequence: 1L string or MultiIndex object</span> + <span class="c1"># Dataframe is in 3L code</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">sequence</span><span class="p">:</span> + <span class="n">sequence</span> <span class="o">=</span> <span class="n">ConversionTable</span><span class="o">.</span><span class="n">ConversionTable</span><span class="p">()</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="s1">'AMINO_ACID'</span><span class="p">][</span> + <span class="s1">'iupac'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> + <span class="c1"># Super call will initialize index and columns with self.create_index()</span> + <span class="nb">super</span><span class="p">(</span><span class="n">ResAtmMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">sequence</span><span class="o">=</span><span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_sequence</span> <span class="o">=</span> <span class="n">sequence</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">sequence</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Amino Acid sequence string in humanidx</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sequence</span><span class="p">:</span> + <span class="c1"># If non empty string</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sequence</span> + <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_sequence</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">_</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"-"</span><span class="p">)[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">levels</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># No information given</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_sequence</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">ConversionTable</span><span class="o">.</span><span class="n">ConversionTable</span><span class="p">()</span><span class="o">.</span><span class="n">table</span><span class="p">[</span> + <span class="s1">'AMINO_ACID'</span><span class="p">][</span><span class="s1">'iupac'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sequence</span> + +<div class="viewcode-block" id="ResAtmMap.create_index"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResAtmMap.create_index">[docs]</a> <span class="k">def</span> <span class="nf">create_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="n">seq_pos</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">seqidx</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">idxnames</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">colnames</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> sequence</span> +<span class="sd"> seq_pos</span> +<span class="sd"> seqidx: pandas.MultiIndex, optional</span> +<span class="sd"> idxnames</span> +<span class="sd"> colnames</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> tuple of pandas.MultiIndex objects</span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Indexing ResAtm - ResAtm dataframe"</span><span class="p">)</span> + <span class="c1"># Atom table for residues (keys are in 3L code)</span> + <span class="n">seqidx</span> <span class="o">=</span> <span class="n">seqidx</span> <span class="k">if</span> <span class="n">seqidx</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">seqidx</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span> + <span class="n">iupac_aa</span> <span class="o">=</span> <span class="n">ConversionTable</span><span class="o">.</span><span class="n">ConversionTable</span><span class="p">()</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="s1">'AMINO_ACID'</span><span class="p">][</span> + <span class="s1">'iupac'</span><span class="p">]</span> + <span class="c1"># Amino acid conversion table 1L -> 3L</span> + <span class="c1"># Making humanidx list for pandas dataframe</span> + <span class="n">seq</span> <span class="o">=</span> <span class="p">[</span><span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">aa</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">]</span> + <span class="c1"># Repeat each res for each heavy atm (humanidx value + 1 in order to</span> + <span class="c1"># start at 1 as in pdb file)</span> + <span class="k">if</span> <span class="nb">set</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> <span class="o">==</span> <span class="n">sequence</span><span class="p">:</span> + <span class="c1"># General ResAtmMap for 20 aminoacid</span> + <span class="n">res_list</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">aa</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">seq</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> + <span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="n">iupac_aa</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()))]</span> + <span class="k">elif</span> <span class="n">seqidx</span><span class="p">:</span> + <span class="c1"># If we already have an index related to the sequence</span> + <span class="n">res_list</span> <span class="o">=</span> <span class="p">[</span> + <span class="s2">"</span><span class="si">%03d</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">seqidx</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">aa</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">aa</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">seq</span><span class="p">)</span> + <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="n">iupac_aa</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())]</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># If no index related to the sequence</span> + <span class="n">res_list</span> <span class="o">=</span> <span class="p">[</span> + <span class="s2">"</span><span class="si">%03d</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">aa</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">aa</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">seq</span><span class="p">)</span> + <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="n">iupac_aa</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())]</span> + <span class="c1"># TODO: Inutile de repeter a chaque fois le calcul des listes</span> + <span class="c1"># d'atomes lourd pour chaque residu -> Deplacer au niveau de l'init</span> + <span class="n">atm_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">atm</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">seq</span> <span class="k">for</span> <span class="n">atm</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> + <span class="n">iupac_aa</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())]</span> + <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">atm_list</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">res_list</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Index lists aren't the same size</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="n">res_list</span><span class="p">,</span> <span class="n">atm_list</span><span class="p">)</span> + + <span class="n">idxnames</span> <span class="o">=</span> <span class="n">idxnames</span> <span class="k">if</span> <span class="n">idxnames</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">idxnames</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="k">else</span> <span class="p">[</span> + <span class="s2">"residuex"</span><span class="p">,</span> <span class="s2">"atomx"</span><span class="p">]</span> + <span class="n">colnames</span> <span class="o">=</span> <span class="n">colnames</span> <span class="k">if</span> <span class="n">colnames</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">colnames</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="k">else</span> <span class="p">[</span> + <span class="s2">"residuey"</span><span class="p">,</span> <span class="s2">"atomy"</span><span class="p">]</span> + <span class="n">index</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">MultiIndex</span><span class="o">.</span><span class="n">from_tuples</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">res_list</span><span class="p">,</span> <span class="n">atm_list</span><span class="p">])),</span> + <span class="n">names</span><span class="o">=</span><span class="n">idxnames</span><span class="p">)</span> + <span class="n">columns</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">MultiIndex</span><span class="o">.</span><span class="n">from_tuples</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">res_list</span><span class="p">,</span> + <span class="n">atm_list</span><span class="p">])),</span> + <span class="n">names</span><span class="o">=</span><span class="n">colnames</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Index:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> + <span class="k">return</span> <span class="n">index</span><span class="p">,</span> <span class="n">columns</span></div> + +<div class="viewcode-block" id="ResAtmMap.create_heatmap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResAtmMap.create_heatmap">[docs]</a> <span class="k">def</span> <span class="nf">create_heatmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="n">unidf</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reduce</span><span class="p">()</span> + <span class="k">if</span> <span class="n">unidf</span><span class="o">.</span><span class="n">isnull</span><span class="p">()</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="c1"># If there's no nan values</span> + <span class="k">return</span> <span class="n">sns</span><span class="o">.</span><span class="n">heatmap</span><span class="p">(</span><span class="n">unidf</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span></div> + +<div class="viewcode-block" id="ResAtmMap.reduce"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResAtmMap.reduce">[docs]</a> <span class="k">def</span> <span class="nf">reduce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">groupby</span><span class="o">=</span><span class="s2">"min"</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> groupby :</span> +<span class="sd"> return: (Default value = "min")</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">nlevels</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">groupby</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span> + <span class="n">newmap</span> <span class="o">=</span> <span class="n">ResMap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">==</span> <span class="nb">bool</span><span class="p">:</span> + <span class="n">newmap</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="n">dropna</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">any</span><span class="p">()</span> + <span class="k">elif</span> <span class="n">groupby</span> <span class="o">==</span> <span class="s2">"mean"</span><span class="p">:</span> + <span class="n">newmap</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="n">dropna</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span> + <span class="k">elif</span> <span class="n">groupby</span> <span class="o">==</span> <span class="s2">"min"</span><span class="p">:</span> + <span class="n">newmap</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="n">dropna</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> + <span class="k">return</span> <span class="n">newmap</span></div> + +<div class="viewcode-block" id="ResAtmMap.contact_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResAtmMap.contact_map">[docs]</a> <span class="k">def</span> <span class="nf">contact_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="n">scsc_min</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">def_cut</span><span class="o">=</span><span class="mf">5.0</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Contact map generator from all atoms distance map. There's a contact</span> +<span class="sd"> with 2 residues iff dist between 2 atoms are below the given treshold</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> def_cut :</span> +<span class="sd"> (Default value = 5.0)</span> +<span class="sd"> contactdef :</span> +<span class="sd"> for all atom pair </span> +<span class="sd"> scsc_min :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">==</span> <span class="nb">bool</span><span class="p">:</span> + <span class="c1"># If self is already a contact map</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="c1"># TODO: issue with sc_sc treshold !!!!!</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Generate contact map using contact definition </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="n">contactdef</span><span class="p">)</span> + <span class="c1"># Initialize contact map to a boolean matrix filled with False as values</span> + <span class="n">contact_map</span> <span class="o">=</span> <span class="n">ResAtmMap</span><span class="p">(</span><span class="n">sequence</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="s2">"contact"</span><span class="p">,</span> + <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> + <span class="n">def_cutoff</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">contactdef</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"default_cutoff"</span><span class="p">))</span> <span class="k">if</span> <span class="nb">float</span><span class="p">(</span> + <span class="n">contactdef</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"default_cutoff"</span><span class="p">))</span> <span class="k">else</span> <span class="n">def_cut</span> + <span class="n">treshold</span> <span class="o">=</span> <span class="kc">None</span> + + <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">contactdef</span><span class="p">)</span> <span class="o">==</span> <span class="nb">float</span><span class="p">:</span> + <span class="c1"># ???</span> + <span class="n">contact_map</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">applymap</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o"><</span> <span class="n">contactdef</span><span class="p">)</span> + + <span class="k">elif</span> <span class="nb">sum</span><span class="p">(</span><span class="n">x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">contactdef</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="o">==</span> <span class="mi">1</span> \ + <span class="ow">and</span> <span class="n">def_cutoff</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Using default cutoff"</span><span class="p">)</span> + <span class="n">contact_map</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">applymap</span><span class="p">(</span> + <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o"><</span> <span class="n">contactdef</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"default_cutoff"</span><span class="p">))</span> + + <span class="k">elif</span> <span class="nb">sum</span><span class="p">(</span><span class="n">x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">contactdef</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> + <span class="c1"># treshconv = lambda x: x < contactdef.get("default_cutoff")</span> + <span class="c1"># contact_map[:] = self.applymap(treshconv)</span> + <span class="n">atm_list</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> + <span class="n">atms_list</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">atm_list</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">atm_list</span><span class="p">])</span> + <span class="k">for</span> <span class="n">pair</span> <span class="ow">in</span> <span class="n">contactdef</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> + <span class="n">treshold</span> <span class="o">=</span> <span class="n">contactdef</span><span class="p">[</span><span class="n">pair</span><span class="p">]</span> + <span class="k">if</span> <span class="n">pair</span> <span class="o">==</span> <span class="s2">"default_cutoff"</span><span class="p">:</span> + <span class="c1"># Since there is more than one treshold, we do not take</span> + <span class="c1"># default cutoff into account</span> + <span class="k">continue</span> + <span class="k">if</span> <span class="n">pair</span> <span class="o">==</span> <span class="s2">"all"</span><span class="p">:</span> + <span class="n">tmp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">applymap</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o"><</span> <span class="n">treshold</span><span class="p">)</span> + <span class="n">contact_map</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">tmp</span><span class="p">)</span> + <span class="k">continue</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">pair</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">pair</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"_"</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span> + <span class="s2">"Filtering values in matrix related to </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="nb">str</span><span class="p">(</span><span class="n">pair</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">treshold</span><span class="p">))</span> + <span class="k">if</span> <span class="n">pair</span> <span class="ow">in</span> <span class="p">((</span><span class="s2">"SC"</span><span class="p">,</span> <span class="s2">"SC"</span><span class="p">),</span> <span class="p">(</span><span class="s2">"sc"</span><span class="p">,</span> <span class="s2">"sc"</span><span class="p">)):</span> + <span class="c1"># Use scsc_min to apply treshold updateonly for selected atom</span> + <span class="c1"># sidechain</span> + <span class="n">idx_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">col_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">for</span> <span class="n">res1</span> <span class="ow">in</span> <span class="n">scsc_min</span><span class="p">:</span> + <span class="k">for</span> <span class="n">res2</span> <span class="ow">in</span> <span class="n">scsc_min</span><span class="p">[</span><span class="n">res1</span><span class="p">]:</span> + <span class="n">pair</span> <span class="o">=</span> <span class="p">(</span><span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">res1</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> + <span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">res2</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span> + <span class="n">atm1</span><span class="p">,</span> <span class="n">atm2</span> <span class="o">=</span> <span class="n">scsc_min</span><span class="p">[</span><span class="n">res1</span><span class="p">][</span><span class="n">res2</span><span class="p">]</span> + <span class="n">idx_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span> + <span class="n">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">and</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="n">atm1</span><span class="p">))</span> + <span class="n">col_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span> + <span class="n">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="ow">and</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="n">atm2</span><span class="p">))</span> + <span class="n">mask</span> <span class="o">=</span> <span class="p">([</span><span class="nb">any</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">idx_list</span><span class="p">)],</span> + <span class="p">[</span><span class="nb">any</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">col_list</span><span class="p">)])</span> + <span class="k">elif</span> <span class="n">pair</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">atms_list</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Pair </span><span class="si">%s</span><span class="s2"> doesn't exist ..."</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">pair</span><span class="p">))</span> + <span class="c1"># Already applied a treshold for this pair</span> + <span class="k">continue</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Apply treshold for </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">pair</span><span class="p">))</span> + <span class="n">atms_list</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">pair</span><span class="p">)</span> + <span class="c1"># Selecting rows for each atom</span> + <span class="n">mask</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="n">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="n">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="n">tmp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o"><</span> <span class="nb">float</span><span class="p">(</span><span class="n">treshold</span><span class="p">))</span> + <span class="n">contact_map</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">tmp</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing values in contact definition section. Add "</span> + <span class="s2">"at least a default_cutoff value."</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Contact map</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">contact_map</span><span class="o">.</span><span class="n">head</span><span class="p">())</span> + <span class="k">return</span> <span class="n">contact_map</span></div> + +<div class="viewcode-block" id="ResAtmMap.copy"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResAtmMap.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Copy dataframe and related attributes of the map</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">df</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">return</span> <span class="n">ResAtmMap</span><span class="p">(</span> + <span class="n">sequence</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">df</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span></div></div> + + +<div class="viewcode-block" id="ResMap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResMap">[docs]</a><span class="k">class</span> <span class="nc">ResMap</span><span class="p">(</span><span class="n">ResAtmMap</span><span class="p">):</span> + <span class="sd">"""Res - res distance/contact matrix"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">sequence</span><span class="p">:</span> + <span class="n">sequence</span> <span class="o">=</span> <span class="n">ConversionTable</span><span class="o">.</span><span class="n">ConversionTable</span><span class="p">()</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="s1">'AMINO_ACID'</span><span class="p">][</span> + <span class="s1">'iupac'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> + <span class="nb">super</span><span class="p">(</span><span class="n">ResMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + + <span class="c1"># def _constructor_expanddim(self):</span> + <span class="c1"># super(ResMap, self)._constructor_expanddim()</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">sequence</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Amino Acid sequence string in humanidx</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># return "".join(AminoAcid.AminoAcid(aa.split("-")[1])[0] for aa in</span> + <span class="c1"># self.index)</span> + <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">ResMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">sequence</span> + +<div class="viewcode-block" id="ResMap.create_index"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResMap.create_index">[docs]</a> <span class="k">def</span> <span class="nf">create_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="n">seqidx</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">idxnames</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">colnames</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> sequence</span> +<span class="sd"> seqidx: pandas.Index</span> +<span class="sd"> idxnames</span> +<span class="sd"> colnames</span> +<span class="sd"> kwargs</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Indexing Res - Res dataframe"</span><span class="p">)</span> + <span class="n">seq</span> <span class="o">=</span> <span class="p">[</span><span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">aa</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">]</span> + <span class="n">seqidx</span> <span class="o">=</span> <span class="n">seqidx</span> <span class="k">if</span> <span class="n">seqidx</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">seqidx</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">seqidx</span><span class="p">:</span> + <span class="n">res_list</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"</span><span class="si">%03d</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">seqidx</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">aa</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">aa</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">seq</span><span class="p">)]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">res_list</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"</span><span class="si">%03d</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">aa</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">aa</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">seq</span><span class="p">)]</span> + <span class="n">idxnames</span> <span class="o">=</span> <span class="n">idxnames</span> <span class="k">if</span> <span class="n">idxnames</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">idxnames</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">"residuex"</span> + <span class="n">colnames</span> <span class="o">=</span> <span class="n">colnames</span> <span class="k">if</span> <span class="n">colnames</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">colnames</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">"residuey"</span> + <span class="n">index</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">(</span><span class="n">res_list</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">idxnames</span><span class="p">)</span> + <span class="n">col</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">(</span><span class="n">res_list</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">colnames</span><span class="p">)</span> + <span class="k">return</span> <span class="n">index</span><span class="p">,</span> <span class="n">col</span></div> + +<div class="viewcode-block" id="ResMap.create_heatmap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResMap.create_heatmap">[docs]</a> <span class="k">def</span> <span class="nf">create_heatmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">as_matrix</span><span class="p">()</span><span class="o">.</span><span class="n">isnull</span><span class="p">()</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="c1"># If there's no nan values</span> + <span class="k">return</span> <span class="n">sns</span><span class="o">.</span><span class="n">heatmap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">as_matrix</span><span class="p">())</span> + <span class="k">return</span> <span class="kc">None</span></div> + +<div class="viewcode-block" id="ResMap.contact_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResMap.contact_map">[docs]</a> <span class="k">def</span> <span class="nf">contact_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> contactdef :</span> +<span class="sd"> param kwargs:</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">contact_map</span> <span class="o">=</span> <span class="n">ResMap</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="s2">"contact"</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">treshconv</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> x :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">x</span> <span class="o"><=</span> <span class="n">treshold</span> + + <span class="c1"># Applique treshold sur la matrice ssi c'est une matrice de distance</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">==</span> <span class="nb">bool</span><span class="p">:</span> + <span class="c1"># If self is already a contact map</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="n">treshold</span> <span class="o">=</span> <span class="n">contactdef</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"default_cutoff"</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> + <span class="n">contact_map</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">applymap</span><span class="p">(</span><span class="n">treshconv</span><span class="p">)</span> + <span class="k">return</span> <span class="n">contact_map</span></div> + + <span class="k">def</span> <span class="nf">__deepcopy__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="n">deepcopy_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__deepcopy__</span> + <span class="bp">self</span><span class="o">.</span><span class="n">__deepcopy__</span> <span class="o">=</span> <span class="kc">None</span> + <span class="n">cp</span> <span class="o">=</span> <span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">__deepcopy__</span> <span class="o">=</span> <span class="n">deepcopy_method</span> + + <span class="n">cp</span><span class="o">.</span><span class="n">dtype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> + <span class="c1"># custom treatments</span> + <span class="c1"># for instance: cp.id = None</span> + + <span class="k">return</span> <span class="n">cp</span> + +<div class="viewcode-block" id="ResMap.copy"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ResMap.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Copy dataframe and related attributes of the map</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">df</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">return</span> <span class="n">ResMap</span><span class="p">(</span> + <span class="n">sequence</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">df</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span></div></div> + + +<div class="viewcode-block" id="AaMap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaMap">[docs]</a><span class="k">class</span> <span class="nc">AaMap</span><span class="p">(</span><span class="n">ProteinMap</span><span class="p">):</span> + <span class="sd">"""Amino Acid Distance Matrix"""</span> + +<div class="viewcode-block" id="AaMap.contact_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaMap.contact_map">[docs]</a> <span class="k">def</span> <span class="nf">contact_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="n">scsc_min</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> contactdef</span> +<span class="sd"> scsc_min</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + +<div class="viewcode-block" id="AaMap.create_heatmap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaMap.create_heatmap">[docs]</a> <span class="k">def</span> <span class="nf">create_heatmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + + <span class="c1"># def _constructor_expanddim(self):</span> + <span class="c1"># super(AaMap, self)._constructor_expanddim()</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="c1"># if ("index", "columns") not in kwargs:</span> + <span class="c1"># idx, col = self.create_index()</span> + <span class="c1"># kwargs["index"] = idx</span> + <span class="c1"># kwargs["columns"] = col</span> + <span class="nb">super</span><span class="p">(</span><span class="n">AaMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">sequence</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + + <span class="c1"># TODO: Actually useless since it raised an notimplemented error</span> +<div class="viewcode-block" id="AaMap.reduce"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaMap.reduce">[docs]</a> <span class="k">def</span> <span class="nf">reduce</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Reduce level of the contactmap"""</span> + <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">AaMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">reduce</span><span class="p">()</span></div> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">sequence</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Returns</span> +<span class="sd"> -------</span> +<span class="sd"> str</span> +<span class="sd"> String containing all amino acid 1L code</span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">([</span> + <span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">aa</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">ConversionTable</span><span class="o">.</span><span class="n">ConversionTable</span><span class="p">()</span><span class="o">.</span><span class="n">table</span><span class="p">[</span> + <span class="s1">'AMINO_ACID'</span><span class="p">][</span><span class="s1">'iupac'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()]))</span> + +<div class="viewcode-block" id="AaMap.copy"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaMap.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> kwargs :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">df</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">return</span> <span class="n">AaMap</span><span class="p">(</span> + <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">df</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span></div> + +<div class="viewcode-block" id="AaMap.create_index"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaMap.create_index">[docs]</a> <span class="k">def</span> <span class="nf">create_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="n">res_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">aa</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">]</span> + <span class="n">index</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">(</span><span class="n">res_list</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"aax"</span><span class="p">)</span> + <span class="n">col</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">(</span><span class="n">res_list</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"aay"</span><span class="p">)</span> + <span class="k">return</span> <span class="n">index</span><span class="p">,</span> <span class="n">col</span></div></div> + + +<div class="viewcode-block" id="AaAtmMap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaAtmMap">[docs]</a><span class="k">class</span> <span class="nc">AaAtmMap</span><span class="p">(</span><span class="n">AaMap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Amino acid map with atom levels</span> +<span class="sd"> """</span> + +<div class="viewcode-block" id="AaAtmMap.create_heatmap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaAtmMap.create_heatmap">[docs]</a> <span class="k">def</span> <span class="nf">create_heatmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + +<div class="viewcode-block" id="AaAtmMap.contact_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaAtmMap.contact_map">[docs]</a> <span class="k">def</span> <span class="nf">contact_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="n">scsc_min</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> contactdef</span> +<span class="sd"> scsc_min</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">AaAtmMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">atom_types</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"atom_types"</span><span class="p">,</span> <span class="s2">"min"</span><span class="p">)</span> + +<div class="viewcode-block" id="AaAtmMap.create_index"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaAtmMap.create_index">[docs]</a> <span class="k">def</span> <span class="nf">create_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="n">atom_types</span><span class="o">=</span><span class="s2">"min"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Update Aa index with atoms</span> +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="c1"># TODO: better way to define indexs</span> + <span class="c1"># idx, col = super(AaAtmMap, self).create_index()</span> + <span class="n">atomtable</span> <span class="o">=</span> <span class="n">ConversionTable</span><span class="o">.</span><span class="n">ConversionTable</span><span class="p">()</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="s1">'AMINO_ACID'</span><span class="p">][</span> + <span class="s1">'iupac'</span><span class="p">]</span> + <span class="n">seq</span> <span class="o">=</span> <span class="p">[</span><span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">aa</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">]</span> + <span class="n">res_list</span> <span class="o">=</span> <span class="p">[</span> + <span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">aa</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">aa</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">seq</span><span class="p">)</span> + <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="n">atomtable</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())]</span> + <span class="n">atm_list</span> <span class="o">=</span> <span class="p">[</span> + <span class="n">atm</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">seq</span> <span class="k">for</span> <span class="n">atm</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">,</span> <span class="s1">'SC'</span><span class="p">)]</span> \ + <span class="k">if</span> <span class="n">atom_types</span> <span class="o">==</span> <span class="s2">"min"</span> <span class="k">else</span> <span class="p">[</span> + <span class="n">atm</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">seq</span> <span class="k">for</span> <span class="n">atm</span> <span class="ow">in</span> <span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> + <span class="n">atomtable</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())]</span> \ + <span class="k">if</span> <span class="n">atom_types</span> <span class="o">==</span> <span class="s2">"heavy"</span> <span class="k">else</span> <span class="p">[</span> + <span class="n">atm</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">seq</span> <span class="k">for</span> <span class="n">atm</span> <span class="ow">in</span> <span class="n">atomtable</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()]</span> + <span class="n">idx</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">MultiIndex</span><span class="o">.</span><span class="n">from_tuples</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">res_list</span><span class="p">,</span> <span class="n">atm_list</span><span class="p">])),</span> + <span class="n">names</span><span class="o">=</span><span class="p">(</span><span class="s1">'AminoAcid'</span><span class="p">,</span> <span class="s1">'Atom'</span><span class="p">))</span> + <span class="n">col</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">MultiIndex</span><span class="o">.</span><span class="n">from_tuples</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">res_list</span><span class="p">,</span> <span class="n">atm_list</span><span class="p">])),</span> + <span class="n">names</span><span class="o">=</span><span class="p">(</span><span class="s1">'AminoAcid'</span><span class="p">,</span> <span class="s1">'Atom'</span><span class="p">))</span> + <span class="k">return</span> <span class="n">idx</span><span class="p">,</span> <span class="n">col</span></div> + +<div class="viewcode-block" id="AaAtmMap.copy"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AaAtmMap.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> kwargs :</span> + +<span class="sd"> **kwargs :</span> + + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="n">df</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">return</span> <span class="n">AaAtmMap</span><span class="p">(</span> + <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">df</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">,</span> + <span class="n">atom_types</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">atom_types</span><span class="p">)</span></div></div> + + +<div class="viewcode-block" id="SsAaAtmMap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.SsAaAtmMap">[docs]</a><span class="k">class</span> <span class="nc">SsAaAtmMap</span><span class="p">(</span><span class="n">AaAtmMap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Amino acid map with atom and secondary structure levels</span> +<span class="sd"> """</span> + <span class="n">ss_types</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">,</span> <span class="s2">"X"</span><span class="p">)</span> + +<div class="viewcode-block" id="SsAaAtmMap.contact_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.SsAaAtmMap.contact_map">[docs]</a> <span class="k">def</span> <span class="nf">contact_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="n">scsc_min</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> contactdef</span> +<span class="sd"> scsc_min</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="k">pass</span></div> + +<div class="viewcode-block" id="SsAaAtmMap.create_heatmap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.SsAaAtmMap.create_heatmap">[docs]</a> <span class="k">def</span> <span class="nf">create_heatmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="k">pass</span></div> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">SsAaAtmMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">atom_types</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"atom_types"</span><span class="p">,</span> <span class="s2">"min"</span><span class="p">)</span> + +<div class="viewcode-block" id="SsAaAtmMap.create_index"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.SsAaAtmMap.create_index">[docs]</a> <span class="k">def</span> <span class="nf">create_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sequence</span><span class="p">,</span> <span class="n">atom_types</span><span class="o">=</span><span class="s2">"min"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> atom_types</span> +<span class="sd"> sequence</span> +<span class="sd"> kwargs</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> """</span> + <span class="c1"># TODO: better way to define indexs, duplicated code here !!!</span> + <span class="c1"># idx, col = super(AaAtmMap, self).create_index()</span> + <span class="n">atomtable</span> <span class="o">=</span> <span class="n">ConversionTable</span><span class="o">.</span><span class="n">ConversionTable</span><span class="p">()</span><span class="o">.</span><span class="n">table</span><span class="p">[</span><span class="s1">'AMINO_ACID'</span><span class="p">][</span> + <span class="s1">'iupac'</span><span class="p">]</span> + <span class="n">seq</span> <span class="o">=</span> <span class="p">[</span><span class="n">AminoAcid</span><span class="o">.</span><span class="n">AminoAcid</span><span class="p">(</span><span class="n">aa</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">]</span> + <span class="n">ss_list</span><span class="p">,</span> <span class="n">res_list</span><span class="p">,</span> <span class="n">atm_list</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]</span> + + <span class="k">for</span> <span class="n">ss</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss_types</span><span class="p">:</span> + <span class="k">for</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">seq</span><span class="p">:</span> + <span class="n">atms</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'CA'</span><span class="p">,</span> <span class="s1">'CB'</span><span class="p">,</span> <span class="s1">'SC'</span><span class="p">)</span> <span class="k">if</span> <span class="n">atom_types</span> <span class="o">==</span> <span class="s2">"min"</span> <span class="k">else</span> <span class="nb">filter</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">,</span> <span class="n">atomtable</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="k">if</span> <span class="n">atom_types</span> <span class="o">==</span> <span class="s2">"heavy"</span> <span class="k">else</span> <span class="n">atomtable</span><span class="p">[</span><span class="n">aa</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> + <span class="k">for</span> <span class="n">atm</span> <span class="ow">in</span> <span class="n">atms</span><span class="p">:</span> + <span class="n">ss_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> + <span class="n">res_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span> + <span class="n">atm_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">atm</span><span class="p">)</span> + <span class="n">idx</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">MultiIndex</span><span class="o">.</span><span class="n">from_tuples</span><span class="p">(</span> + <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">ss_list</span><span class="p">,</span> <span class="n">res_list</span><span class="p">,</span> <span class="n">atm_list</span><span class="p">])),</span> + <span class="n">names</span><span class="o">=</span><span class="p">(</span><span class="s1">'SecStruct'</span><span class="p">,</span> <span class="s1">'AminoAcid'</span><span class="p">,</span> <span class="s1">'Atom'</span><span class="p">))</span> + <span class="n">col</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">MultiIndex</span><span class="o">.</span><span class="n">from_tuples</span><span class="p">(</span> + <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">ss_list</span><span class="p">,</span> <span class="n">res_list</span><span class="p">,</span> <span class="n">atm_list</span><span class="p">])),</span> + <span class="n">names</span><span class="o">=</span><span class="p">(</span><span class="s1">'SecStruct'</span><span class="p">,</span> <span class="s1">'AminoAcid'</span><span class="p">,</span> <span class="s1">'Atom'</span><span class="p">))</span> + <span class="k">return</span> <span class="n">idx</span><span class="p">,</span> <span class="n">col</span></div> + +<div class="viewcode-block" id="SsAaAtmMap.reduce"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.SsAaAtmMap.reduce">[docs]</a> <span class="k">def</span> <span class="nf">reduce</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">groupby</span><span class="o">=</span><span class="s2">"min"</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> groupby :</span> +<span class="sd"> return: (Default value = "min")</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">nlevels</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">groupby</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span> + <span class="n">newmap</span> <span class="o">=</span> <span class="n">AaAtmMap</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">,</span> + <span class="n">atom_types</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">atom_types</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dtype</span> <span class="o">==</span> <span class="nb">bool</span><span class="p">:</span> + <span class="n">newmap</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="s1">'SecStruct'</span><span class="p">,</span> <span class="n">dropna</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span> + <span class="n">level</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span><span class="o">.</span><span class="n">any</span><span class="p">()</span> + <span class="k">elif</span> <span class="n">groupby</span> <span class="o">==</span> <span class="s2">"mean"</span><span class="p">:</span> + <span class="n">newmap</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="s1">'SecStruct'</span><span class="p">,</span> <span class="n">dropna</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span> + <span class="n">level</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span> + <span class="k">elif</span> <span class="n">groupby</span> <span class="o">==</span> <span class="s2">"min"</span><span class="p">:</span> + <span class="n">newmap</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">stack</span><span class="p">(</span><span class="s1">'SecStruct'</span><span class="p">,</span> <span class="n">dropna</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span> + <span class="n">level</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> + <span class="k">return</span> <span class="n">newmap</span></div> + +<div class="viewcode-block" id="SsAaAtmMap.copy"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.SsAaAtmMap.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> + + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> kwargs :</span> + +<span class="sd"> **kwargs :</span> + + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + + +<span class="sd"> """</span> + <span class="n">df</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">return</span> <span class="n">SsAaAtmMap</span><span class="p">(</span> + <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">df</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span></div></div> + + +<div class="viewcode-block" id="AtmMap"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AtmMap">[docs]</a><span class="k">class</span> <span class="nc">AtmMap</span><span class="p">(</span><span class="n">Map</span><span class="p">):</span> + <span class="sd">"""Atom Distance Matrix"""</span> + + <span class="c1"># def _constructor_expanddim(self):</span> + <span class="c1"># super(AtmMap, self)._constructor_expanddim()</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">AtmMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + +<div class="viewcode-block" id="AtmMap.reduce"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AtmMap.reduce">[docs]</a> <span class="k">def</span> <span class="nf">reduce</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Reduce level of the contactmap"""</span> + <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">AtmMap</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">reduce</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AtmMap.copy"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AtmMap.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> kwargs :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">df</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Map</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="k">return</span> <span class="n">AtmMap</span><span class="p">(</span> + <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">df</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span> + <span class="n">sym</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sym</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mtype</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dtype</span><span class="p">)</span></div> + +<div class="viewcode-block" id="AtmMap.create_index"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.AtmMap.create_index">[docs]</a> <span class="k">def</span> <span class="nf">create_index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div></div> + + +<div class="viewcode-block" id="ProtMapCollection"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.ProtMapCollection">[docs]</a><span class="k">class</span> <span class="nc">ProtMapCollection</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Group all protein maps"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_alldistmap</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_allscoremap</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_allcontactmap</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_distmap</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_scoremap</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_contactmap</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">alldistmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Atom level distance map.</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alldistmap</span> + + <span class="nd">@alldistmap</span><span class="o">.</span><span class="n">setter</span> + <span class="k">def</span> <span class="nf">alldistmap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resatmap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Atom level distance map setter. The only way is to give resatmmap object</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> resatmap :</span> +<span class="sd"> type resatmap: ResAtmMap</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_alldistmap</span> <span class="o">=</span> <span class="n">resatmap</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">allcontactmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Atom level contact map. If alldistmap exists, return the maplot</span> +<span class="sd"> form</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alldistmap</span><span class="p">:</span> + <span class="c1"># settings.contactdef.config</span> + <span class="c1"># settings.main.scsc_min_file</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alldistmap</span><span class="o">.</span><span class="n">contact_map</span><span class="p">(</span><span class="n">contactdef</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span> + <span class="s2">"contactdef"</span><span class="p">],</span> <span class="n">scsc_min</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s2">"scsc_min_file"</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_allcontactmap</span> + + <span class="nd">@allcontactmap</span><span class="o">.</span><span class="n">setter</span> + <span class="k">def</span> <span class="nf">allcontactmap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resatmap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Atom level contact map setter</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> resatmap :</span> +<span class="sd"> binary res atm map</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_allcontactmap</span> <span class="o">=</span> <span class="n">resatmap</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">allscoremap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Atom level score map</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_allscoremap</span> + + <span class="nd">@allscoremap</span><span class="o">.</span><span class="n">setter</span> + <span class="k">def</span> <span class="nf">allscoremap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resatmap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Atom level score map setter</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> resatmap :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_allscoremap</span> <span class="o">=</span> <span class="n">resatmap</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">distmap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alldistmap</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alldistmap</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="n">groupby</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span> + <span class="s2">"groupby_method"</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_distmap</span> + + <span class="nd">@distmap</span><span class="o">.</span><span class="n">setter</span> + <span class="k">def</span> <span class="nf">distmap</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resmap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> resmap :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_distmap</span> <span class="o">=</span> <span class="n">resmap</span></div> + + +<div class="viewcode-block" id="MapFilter"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.MapFilter">[docs]</a><span class="k">class</span> <span class="nc">MapFilter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Filter maplot/distancemap</span> +<span class="sd"> nd : Network deconvolution</span> +<span class="sd"> pos : remove close contacts</span> +<span class="sd"> cons : remove contacts with highly conservated residues</span> +<span class="sd"> cys-cys : unicity of ss contacts</span> +<span class="sd"> ssclash : secondary structure conflict</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">filter_types</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"pos"</span><span class="p">,</span> <span class="s2">"cons"</span><span class="p">,</span> <span class="s2">"ssclash"</span><span class="p">,</span> <span class="s2">"cys"</span><span class="p">)</span> + <span class="n">clash_dict</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"pos"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"clash"</span><span class="p">:</span> <span class="s2">"physical proximity"</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"sequence position"</span><span class="p">},</span> + <span class="s2">"cons"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"clash"</span><span class="p">:</span> <span class="s2">"888"</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"high conservation"</span><span class="p">},</span> + <span class="s2">"ssclash"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"clash"</span><span class="p">:</span> <span class="s2">"999"</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"secondary structure prediction conflict"</span><span class="p">},</span> + <span class="s2">"cys"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"clash"</span><span class="p">:</span> <span class="s2">"222"</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"disulfide bond unicity"</span><span class="p">}}</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">,</span> <span class="n">nofilter</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + <span class="bp">self</span><span class="o">.</span><span class="n">nofilter</span> <span class="o">=</span> <span class="n">nofilter</span> + +<div class="viewcode-block" id="MapFilter.nd_filter"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.MapFilter.nd_filter">[docs]</a> <span class="k">def</span> <span class="nf">nd_filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapdict</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> mapdict :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: build ROC curve with number of top contacts as the parameter</span> + <span class="sd">"""</span> + +<span class="sd"> :param mapdict:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"...Network deconvolution filter (alpha=</span><span class="si">%.2f</span><span class="s2">, beta=</span><span class="si">%.2f</span><span class="s2">)"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s2">"nd_beta"</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s2">"nd_alpha"</span><span class="p">])</span> + <span class="n">scoremap</span> <span class="o">=</span> <span class="n">mapdict</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">net_deconv</span><span class="p">(</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">]</span><span class="o">.</span><span class="n">as_matrix</span><span class="p">(),</span> + <span class="n">beta</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s2">"nd_beta"</span><span class="p">],</span> + <span class="n">alpha</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s2">"nd_alpha"</span><span class="p">]))</span> + <span class="c1"># TODO: MAJ score map avec matrice obtenue !!!</span> + <span class="c1"># !!!! Verifier que scoremap est bien maj et UTILISEE !!</span> + <span class="k">return</span> <span class="n">scoremap</span></div> + +<div class="viewcode-block" id="MapFilter.pos_filter"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.MapFilter.pos_filter">[docs]</a> <span class="k">def</span> <span class="nf">pos_filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapdict</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Position filter on maplot</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> kwargs :</span> +<span class="sd"> param mapdict: dict with maplot key</span> +<span class="sd"> mapdict :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Liste les contacts proches</span> + <span class="n">clash_list</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash_list"</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"...Position filter"</span><span class="p">)</span> + <span class="n">close_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">contact_list</span> <span class="o">=</span> <span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">contact_list</span><span class="p">()</span> + + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">contact_list</span><span class="p">:</span> + <span class="n">gap</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="nb">int</span><span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> + <span class="k">if</span> <span class="n">gap</span> <span class="o"><=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s1">'position_treshold'</span><span class="p">]:</span> + <span class="k">if</span> <span class="n">clash_list</span> <span class="ow">and</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">clash_list</span><span class="p">:</span> + <span class="k">continue</span> + <span class="n">close_list</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="n">close_list</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span></div> + +<div class="viewcode-block" id="MapFilter.cons_filter"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.MapFilter.cons_filter">[docs]</a> <span class="k">def</span> <span class="nf">cons_filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapdict</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> mapdict :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Liste les contacts aves des residus fortement conserves</span> + <span class="sd">"""</span> + +<span class="sd"> :param mapdict:</span> +<span class="sd"> :param kwargs:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"...Conservation filter"</span><span class="p">)</span> + <span class="n">sec_struct</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sec_struct"</span><span class="p">)</span> + <span class="n">clash_list</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash_list"</span><span class="p">)</span> + <span class="n">cons_pair</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">cons_res</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">contact_list</span> <span class="o">=</span> <span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">contact_list</span><span class="p">()</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">sec_struct</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span> + <span class="s2">"No conservation information. Can't use related filter"</span><span class="p">)</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span> + + <span class="k">if</span> <span class="n">sec_struct</span><span class="o">.</span><span class="n">filetype</span> <span class="o">!=</span> <span class="s2">"indextableplus"</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Conservation filter only works with indextableplus "</span> + <span class="s2">"files !"</span><span class="p">)</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span> + + <span class="c1"># parcours la liste de paires dans la matrice struct secondaire</span> + <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">reslist</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sec_struct</span><span class="o">.</span><span class="n">ss_matrix</span><span class="p">):</span> + <span class="c1"># TODO: Initialize conservation score if other value than int</span> + <span class="n">cons_score</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">reslist</span><span class="p">[</span><span class="mi">5</span><span class="p">])</span> <span class="k">if</span> <span class="n">reslist</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">"-"</span> <span class="k">else</span> <span class="mi">0</span> + <span class="k">if</span> <span class="n">cons_score</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s2">"conservation_treshold"</span><span class="p">]</span> \ + <span class="ow">and</span> <span class="n">reslist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'C'</span><span class="p">:</span> + <span class="n">cons_res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">contact_list</span><span class="p">:</span> + <span class="k">if</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">cons_res</span> <span class="ow">or</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="n">cons_res</span><span class="p">:</span> + <span class="k">if</span> <span class="n">clash_list</span> <span class="ow">and</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">clash_list</span><span class="p">:</span> + <span class="c1"># If this clash already exist</span> + <span class="k">continue</span> + <span class="n">cons_pair</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">contact</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Highly conserved residue list: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">cons_res</span><span class="p">)</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="n">cons_pair</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span></div> + +<div class="viewcode-block" id="MapFilter.cys_filter"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.MapFilter.cys_filter">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">cys_filter</span><span class="p">(</span><span class="n">mapdict</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> mapdict :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Si scoremap existe, selectionner les contacts cys-cys qui ont les</span> + <span class="c1"># meilleurs scores, fournit une liste des contacts disulfures qui</span> + <span class="c1"># possedent des scores plus faibles</span> + <span class="sd">"""</span> + +<span class="sd"> :param mapdict:</span> +<span class="sd"> :param kwargs:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"...Disulfure bridge unicity filter"</span><span class="p">)</span> + <span class="n">clash_list</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash_list"</span><span class="p">)</span> + <span class="n">unidisbridge_list</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># Liste les ponts disulfures uniques</span> + <span class="n">clashdisbridge_list</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># Liste les ponts disulfures incompatibles</span> + <span class="n">desc</span> <span class="o">=</span> <span class="p">[]</span> + + <span class="k">if</span> <span class="n">mapdict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"scoremap"</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">scoremap</span> <span class="o">=</span> <span class="n">mapdict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"scoremap"</span><span class="p">)</span> + <span class="c1"># List of all cysteine</span> + <span class="n">cys_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">idx</span> <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">scoremap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">values</span><span class="p">)</span> + <span class="k">if</span> <span class="n">val</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'CYS'</span><span class="p">)]</span> + <span class="n">dis_bridge_list</span> <span class="o">=</span> <span class="p">{</span><span class="n">ss</span><span class="p">:</span> <span class="n">scoremap</span><span class="o">.</span><span class="n">iat</span><span class="p">[</span><span class="n">ss</span><span class="p">]</span> <span class="k">for</span> <span class="n">ss</span> + <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">combinations</span><span class="p">(</span><span class="n">cys_list</span><span class="p">,</span> <span class="mi">2</span><span class="p">))}</span> + <span class="k">if</span> <span class="n">dis_bridge_list</span><span class="p">:</span> + <span class="c1"># Get list of all disulfure bridges sorted</span> + <span class="n">sorted_ss</span> <span class="o">=</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="nb">sorted</span><span class="p">(</span><span class="n">dis_bridge_list</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> + <span class="n">key</span><span class="o">=</span><span class="n">operator</span><span class="o">.</span><span class="n">itemgetter</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> + <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span> + <span class="k">for</span> <span class="n">dis_bridge</span> <span class="ow">in</span> <span class="n">sorted_ss</span><span class="p">:</span> + <span class="c1"># foreach disulfure bridge</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">'Checking </span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span> <span class="n">addtup</span><span class="p">(</span><span class="n">dis_bridge</span><span class="p">),</span> + <span class="n">scoremap</span><span class="o">.</span><span class="n">iat</span><span class="p">[</span><span class="n">dis_bridge</span><span class="p">])</span> + <span class="k">if</span> <span class="n">dis_bridge</span> <span class="ow">in</span> <span class="n">clash_list</span><span class="p">:</span> + <span class="c1"># given contact already removed with previous filters</span> + <span class="k">continue</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Check for each cys in dis_bridge if they aready exists</span> + <span class="c1"># in unidisbridge_list</span> + <span class="n">exdis</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">unidisbridge_list</span><span class="p">:</span> + <span class="k">for</span> <span class="n">cys</span> <span class="ow">in</span> <span class="n">dis_bridge</span><span class="p">:</span> + <span class="k">for</span> <span class="n">unidis</span> <span class="ow">in</span> <span class="n">unidisbridge_list</span><span class="p">:</span> + <span class="k">if</span> <span class="n">cys</span> <span class="ow">in</span> <span class="n">unidis</span><span class="p">:</span> + <span class="n">exdis</span> <span class="o">=</span> <span class="n">unidis</span> + <span class="k">break</span> + <span class="k">if</span> <span class="n">exdis</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Ss bridge </span><span class="si">%s</span><span class="s2"> have at least one cys in "</span> + <span class="s2">"common with previous ss filtered (</span><span class="si">%s</span><span class="s2">). "</span><span class="p">,</span> + <span class="n">addtup</span><span class="p">(</span><span class="n">dis_bridge</span><span class="p">),</span> + <span class="nb">map</span><span class="p">(</span><span class="n">addtup</span><span class="p">,</span> <span class="n">unidisbridge_list</span><span class="p">))</span> + <span class="k">if</span> <span class="n">scoremap</span><span class="o">.</span><span class="n">iat</span><span class="p">[</span><span class="n">dis_bridge</span><span class="p">]</span> <span class="o">></span> <span class="n">scoremap</span><span class="o">.</span><span class="n">iat</span><span class="p">[</span><span class="n">exdis</span><span class="p">]:</span> + <span class="c1"># Better cys--cys contact</span> + <span class="c1"># List cys-cys contacts that will be removed in</span> + <span class="c1"># unidisbridge_list</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> has better score than </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="n">addtup</span><span class="p">(</span><span class="n">dis_bridge</span><span class="p">),</span> + <span class="n">addtup</span><span class="p">(</span><span class="n">exdis</span><span class="p">))</span> + <span class="n">remcys</span> <span class="o">=</span> <span class="p">(</span><span class="n">unidis</span> <span class="k">for</span> <span class="n">cys</span> <span class="ow">in</span> <span class="n">dis_bridge</span> <span class="k">for</span> <span class="n">unidis</span> + <span class="ow">in</span> <span class="n">unidisbridge_list</span> <span class="k">if</span> <span class="n">cys</span> <span class="ow">in</span> <span class="n">unidis</span><span class="p">)</span> + <span class="k">for</span> <span class="n">dis</span> <span class="ow">in</span> <span class="n">remcys</span><span class="p">:</span> + <span class="c1"># PB si un des dis supprime est</span> + <span class="n">clashdisbridge_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dis</span><span class="p">)</span> + <span class="n">clashdisbridge_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dis</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> + <span class="n">unidisbridge_list</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">dis</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Added </span><span class="si">%s</span><span class="s2"> to clashlist </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="n">addtup</span><span class="p">(</span><span class="n">dis</span><span class="p">),</span> + <span class="nb">map</span><span class="p">(</span><span class="n">addtup</span><span class="p">,</span> <span class="n">clashdisbridge_list</span><span class="p">))</span> + <span class="n">unidisbridge_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dis_bridge</span><span class="p">)</span> + <span class="k">continue</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">clashdisbridge_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dis_bridge</span><span class="p">)</span> + <span class="n">clashdisbridge_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dis_bridge</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Added </span><span class="si">%s</span><span class="s2"> to ss clashlist </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="n">addtup</span><span class="p">(</span><span class="n">dis_bridge</span><span class="p">),</span> + <span class="nb">map</span><span class="p">(</span><span class="n">addtup</span><span class="p">,</span> <span class="n">clashdisbridge_list</span><span class="p">))</span> + <span class="k">continue</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">'Adding bridge </span><span class="si">%s</span><span class="s1"> to ss filtered list'</span><span class="p">,</span> <span class="n">dis_bridge</span><span class="p">)</span> + <span class="n">unidisbridge_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dis_bridge</span><span class="p">)</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="n">clashdisbridge_list</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="n">desc</span><span class="p">}</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># If no score given, return empty list</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span></div> + +<div class="viewcode-block" id="MapFilter.ssclash_filter"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.MapFilter.ssclash_filter">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">ssclash_filter</span><span class="p">(</span><span class="n">mapdict</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> mapdict :</span> +<span class="sd"> param kwargs:</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + + <span class="k">def</span> <span class="nf">hum_contact</span><span class="p">(</span><span class="n">xy</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> xy :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">xy</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">xy</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span> + + <span class="c1"># TODO: better add clash list and sec_struct as object attribute</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"...Secondary structure clash filter"</span><span class="p">)</span> + <span class="n">sec_struct</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sec_struct"</span><span class="p">)</span> + <span class="n">clash_list</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash_list"</span><span class="p">)</span> + <span class="n">ssclash_pair</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">desc_dict</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="n">sec_struct</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"No secondary structure information. Can't use secondary"</span> + <span class="s2">" structure filter"</span><span class="p">)</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span> + + <span class="n">ss_matrix</span> <span class="o">=</span> <span class="n">sec_struct</span><span class="o">.</span><span class="n">ss_matrix</span> + <span class="n">ss_list</span> <span class="o">=</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">ss_matrix</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span> + <span class="c1"># contact_list from contact map start at 0 !!</span> + <span class="n">contact_list</span> <span class="o">=</span> <span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">contact_list</span><span class="p">()</span> + + <span class="n">ss_start_end</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">])</span> + + <span class="c1"># TODO: deplacer construction du dic ss_start_end dans SsList</span> + <span class="k">for</span> <span class="n">res_ind</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ss_matrix</span><span class="p">)):</span> + <span class="c1"># Construction du dict ss_start_end</span> + <span class="k">if</span> <span class="n">res_ind</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="c1"># If first residue</span> + <span class="c1"># Save ss start humanidx related to res_ind</span> + <span class="n">ss_start_end</span><span class="p">[</span><span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span><span class="p">][</span><span class="mi">2</span><span class="p">]][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">res_ind</span> + <span class="k">if</span> <span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span><span class="p">][</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span> <span class="o">+</span> <span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> + <span class="c1"># If next res is not in the same ss</span> + <span class="n">ss_start_end</span><span class="p">[</span><span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span><span class="p">][</span><span class="mi">2</span><span class="p">]][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">res_ind</span> + <span class="n">ss_start_end</span><span class="p">[</span><span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span> <span class="o">+</span> <span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">]][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">res_ind</span> <span class="o">+</span> <span class="mi">1</span> + <span class="k">elif</span> <span class="n">res_ind</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">ss_matrix</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span> + <span class="c1"># Si dernier res</span> + <span class="n">ss_start_end</span><span class="p">[</span><span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span><span class="p">][</span><span class="mi">2</span><span class="p">]][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">res_ind</span> + <span class="k">elif</span> <span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span><span class="p">][</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span> <span class="o">+</span> <span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> + <span class="c1"># If next res not in the same ss</span> + <span class="n">ss_start_end</span><span class="p">[</span><span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span><span class="p">][</span><span class="mi">2</span><span class="p">]][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">res_ind</span> + <span class="n">ss_start_end</span><span class="p">[</span><span class="n">ss_matrix</span><span class="p">[</span><span class="n">res_ind</span> <span class="o">+</span> <span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">]][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">res_ind</span> <span class="o">+</span> <span class="mi">1</span> + + <span class="n">start_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">ss_start_end</span><span class="p">[</span><span class="n">elm</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">elm</span> <span class="ow">in</span> <span class="n">ss_start_end</span><span class="p">]</span> + <span class="n">end_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">ss_start_end</span><span class="p">[</span><span class="n">elm</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">elm</span> <span class="ow">in</span> <span class="n">ss_start_end</span><span class="p">]</span> + + <span class="k">for</span> <span class="n">icontact</span><span class="p">,</span> <span class="n">contact</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">contact_list</span><span class="p">):</span> + <span class="c1"># For each res-res contact</span> + <span class="n">outcontact</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">hum_contact</span><span class="p">(</span><span class="n">contact</span><span class="p">))</span> + <span class="k">if</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">clash_list</span><span class="p">:</span> + <span class="k">continue</span> + <span class="n">resi</span> <span class="o">=</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># Pos number (0...n-1)</span> + <span class="n">resj</span> <span class="o">=</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">ssi</span> <span class="o">=</span> <span class="n">ss_list</span><span class="p">[</span><span class="n">resi</span><span class="p">]</span> + <span class="n">ssj</span> <span class="o">=</span> <span class="n">ss_list</span><span class="p">[</span><span class="n">resj</span><span class="p">]</span> + + <span class="k">if</span> <span class="n">ssi</span> <span class="o">==</span> <span class="n">ssj</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ssi</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ssj</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">in</span> <span class="p">((</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"H"</span><span class="p">),</span> <span class="p">(</span><span class="s2">"E"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">)):</span> + <span class="c1"># If both residues are in same helix or strand</span> + <span class="n">desc</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">,</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ssi</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ssj</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="n">desc_dict</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Ss conflict for contact </span><span class="si">%d</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">icontact</span><span class="p">,</span> <span class="n">outcontact</span><span class="p">,</span> <span class="n">desc</span><span class="p">)</span> + <span class="n">ssclash_pair</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">contact</span><span class="p">)</span> + <span class="c1"># ELIF encadre H ou E</span> + <span class="k">elif</span> <span class="n">ssi</span> <span class="o">!=</span> <span class="n">ssj</span><span class="p">:</span> + <span class="c1"># If both residues are not in the same ss</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">):</span> + + <span class="c1"># Search type of the bond (H-1 H, E-2 E, ...)</span> + <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span> + <span class="c1"># Test both sides</span> + + <span class="n">resi</span> <span class="o">=</span> <span class="n">contact</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> + <span class="n">resj</span> <span class="o">=</span> <span class="n">contact</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> + <span class="n">ssi</span> <span class="o">=</span> <span class="n">ss_list</span><span class="p">[</span><span class="n">resi</span><span class="p">]</span> + <span class="n">ssj</span> <span class="o">=</span> <span class="n">ss_list</span><span class="p">[</span><span class="n">resj</span><span class="p">]</span> + + <span class="k">try</span><span class="p">:</span> + <span class="n">ssi_pn</span> <span class="o">=</span> <span class="n">ss_list</span><span class="p">[</span><span class="n">resi</span> <span class="o">+</span> <span class="n">n</span><span class="p">]</span> + <span class="n">ssi_mn</span> <span class="o">=</span> <span class="n">ss_list</span><span class="p">[</span><span class="n">resi</span> <span class="o">-</span> <span class="n">n</span><span class="p">]</span> + <span class="n">ssj_pn</span> <span class="o">=</span> <span class="n">ss_list</span><span class="p">[</span><span class="n">resj</span> <span class="o">+</span> <span class="n">n</span><span class="p">]</span> + <span class="n">ssj_mn</span> <span class="o">=</span> <span class="n">ss_list</span><span class="p">[</span><span class="n">resj</span> <span class="o">-</span> <span class="n">n</span><span class="p">]</span> + <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> + <span class="k">continue</span> + + <span class="c1"># (E-n, E) OR (H-n, H)</span> + <span class="k">if</span> <span class="n">ssj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="n">resi</span> <span class="o">+</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">start_list</span> \ + <span class="ow">and</span> <span class="n">ssi_pn</span> <span class="o">==</span> <span class="n">ssj</span><span class="p">:</span> + <span class="c1"># --i**[-----j-----]--- (n: **)</span> + <span class="c1"># E/H</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%d</span><span class="s2">,</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ssi_pn</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">,</span> <span class="n">ssj</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">break</span> + <span class="k">if</span> <span class="n">ssj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="n">resi</span> <span class="o">-</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">end_list</span> \ + <span class="ow">and</span> <span class="n">ssi_mn</span> <span class="o">==</span> <span class="n">ssj</span><span class="p">:</span> + <span class="c1"># -----[-----j-----]**i--- (n: **)</span> + <span class="c1"># E/H</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">+</span><span class="si">%d</span><span class="s2">,</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ssi_mn</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">,</span> <span class="n">ssj</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">break</span> + <span class="k">if</span> <span class="n">ssi</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="n">resj</span> <span class="o">+</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">start_list</span> \ + <span class="ow">and</span> <span class="n">ssj_pn</span> <span class="o">==</span> <span class="n">ssi</span><span class="p">:</span> + <span class="c1"># --j**[-----i-----]--- (n: **)</span> + <span class="c1"># E/H</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%d</span><span class="s2">,</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ssj_pn</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">,</span> <span class="n">ssi</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">break</span> + <span class="k">if</span> <span class="n">ssi</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="n">resj</span> <span class="o">-</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">end_list</span> \ + <span class="ow">and</span> <span class="n">ssj_mn</span> <span class="o">==</span> <span class="n">ssi</span><span class="p">:</span> + <span class="c1"># -----[-----i-----]**j--- (n: **)</span> + <span class="c1"># E/H</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">+</span><span class="si">%d</span><span class="s2">,</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ssj_mn</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">,</span> <span class="n">ssi</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">break</span> + + <span class="c1"># (E+n, E-n), (H+n, H-n)</span> + <span class="k">if</span> <span class="n">ssi_mn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="n">resi</span> <span class="o">-</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">end_list</span> \ + <span class="ow">and</span> <span class="n">resj</span> <span class="o">+</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">start_list</span> \ + <span class="ow">and</span> <span class="n">ssi_mn</span> <span class="o">==</span> <span class="n">ssj_pn</span><span class="p">:</span> + <span class="c1"># --j**[-----H/E-----]**i-- (n: **)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">+</span><span class="si">%d</span><span class="s2">,</span><span class="si">%s</span><span class="s2">-</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ssi_mn</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">,</span> + <span class="n">ssj_pn</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">)</span> + <span class="k">break</span> + <span class="k">if</span> <span class="n">ssi_pn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H"</span><span class="p">,</span> <span class="s2">"E"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="n">resi</span> <span class="o">+</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">start_list</span> \ + <span class="ow">and</span> <span class="n">resj</span> <span class="o">-</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">end_list</span> \ + <span class="ow">and</span> <span class="n">ssi_pn</span> <span class="o">==</span> <span class="n">ssj_mn</span><span class="p">:</span> + <span class="c1"># --i**[-----H/E-----]**j-- (n: **)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%d</span><span class="s2">,</span><span class="si">%s</span><span class="s2">+</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ssi_pn</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">,</span> + <span class="n">ssj_mn</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">)</span> + <span class="k">break</span> + + <span class="k">if</span> <span class="n">ssclash</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Ss clash for contact </span><span class="si">%d</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">icontact</span><span class="p">,</span> <span class="n">outcontact</span><span class="p">,</span> <span class="n">ssclash</span><span class="p">)</span> + <span class="k">if</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H-2,H"</span><span class="p">,</span> <span class="s2">"H+2,H"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="nb">abs</span><span class="p">(</span><span class="n">resi</span> <span class="o">-</span> <span class="n">resj</span><span class="p">)</span> <span class="o">==</span> <span class="mi">6</span><span class="p">:</span> + <span class="c1"># Allow contact to the fifth residue in the</span> + <span class="c1"># helix</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Found (H-2, H) for contact </span><span class="si">%s</span><span class="s2"> clash "</span> + <span class="s2">"but contact with fifth residue is "</span> + <span class="s2">"actually allowed"</span><span class="p">,</span> + <span class="n">outcontact</span><span class="p">)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H-3,H"</span><span class="p">,</span> <span class="s2">"H+3,H"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="nb">abs</span><span class="p">(</span><span class="n">resi</span> <span class="o">-</span> <span class="n">resj</span><span class="p">)</span> <span class="o"><</span> <span class="mi">12</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Found (H-3, H) for contact </span><span class="si">%s</span><span class="s2"> clash "</span> + <span class="s2">"but contact between 3rd and 10th "</span> + <span class="s2">"residues are actually allowed"</span><span class="p">,</span> + <span class="n">outcontact</span><span class="p">)</span> + <span class="c1"># Allow contact between 3rd residue and 10th</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H-4,H"</span><span class="p">,</span> <span class="s2">"H+4,H"</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"H-4,H are actually allowed"</span><span class="p">)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H-2,H+2"</span><span class="p">,</span> <span class="s2">"H+2,H-2"</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"H-2,H+2 are actually allowed"</span><span class="p">)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H-3,H+3"</span><span class="p">,</span> <span class="s2">"H+3,H-3"</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"H-3,H+3 are actually allowed"</span><span class="p">)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"H-4,H+4"</span><span class="p">,</span> <span class="s2">"H+4,H-4"</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"H-4,H+4 are actually allowed"</span><span class="p">)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="o">==</span> <span class="s2">"E-2,E+2"</span><span class="p">:</span> + <span class="n">strand</span> <span class="o">=</span> <span class="n">ssj</span> <span class="k">if</span> <span class="n">ssj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"E"</span> <span class="k">else</span> <span class="n">ssi</span> + <span class="n">start</span> <span class="o">=</span> <span class="n">ss_start_end</span><span class="p">[</span><span class="n">strand</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> + <span class="n">end</span> <span class="o">=</span> <span class="n">ss_start_end</span><span class="p">[</span><span class="n">strand</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> + <span class="k">if</span> <span class="nb">abs</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="n">end</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">5</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Found (E-2, E+2) for contact "</span> + <span class="s2">"</span><span class="si">%s</span><span class="s2"> clash but strand "</span> + <span class="s2">"is < 5 residues"</span><span class="p">,</span> <span class="n">outcontact</span><span class="p">)</span> + <span class="c1"># Allow contact if strand < 5 residues (gap <8)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"E-3,E+3"</span><span class="p">,</span> <span class="s2">"E+3,E-3"</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"E-3,E+3 are actually allowed"</span><span class="p">)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"E-4,E+4"</span><span class="p">,</span> <span class="s2">"E+4,E-4"</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"E-4,E+4 are actually allowed"</span><span class="p">)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">elif</span> <span class="n">ssclash</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"E-4,E"</span><span class="p">,</span> <span class="s2">"E+4,E"</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="nb">abs</span><span class="p">(</span><span class="n">resi</span> <span class="o">-</span> <span class="n">resj</span><span class="p">)</span> <span class="o"><</span> <span class="mi">8</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Found (E-4, E) for contact </span><span class="si">%s</span><span class="s2"> clash "</span> + <span class="s2">"but contacts below 4th residue are "</span> + <span class="s2">"actually allowed"</span><span class="p">,</span> <span class="n">outcontact</span><span class="p">)</span> + <span class="n">ssclash</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">ssclash</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span> + <span class="s2">"Ss conflict for contact </span><span class="si">%d</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">icontact</span><span class="p">,</span> <span class="n">outcontact</span><span class="p">,</span> <span class="n">ssclash</span><span class="p">)</span> + <span class="n">desc_dict</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span> <span class="o">=</span> <span class="n">ssclash</span> + <span class="n">ssclash_pair</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">contact</span><span class="p">)</span> + <span class="k">break</span> + <span class="k">return</span> <span class="p">{</span><span class="s1">'clash'</span><span class="p">:</span> <span class="n">ssclash_pair</span><span class="p">,</span> <span class="s1">'desc'</span><span class="p">:</span> <span class="n">desc_dict</span><span class="p">}</span></div> + + <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapdict</span><span class="p">,</span> <span class="n">mtype</span><span class="p">,</span> <span class="n">contactlist</span><span class="p">,</span> <span class="n">inprot</span><span class="p">,</span> + <span class="n">mapfilters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">outprefix</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">clashlist</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Filter contact map</span> +<span class="sd"> :param mapdict: dict containing ResMap and ResAtmMap for contacts,</span> +<span class="sd"> distances and scores</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="n">clash_list</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">desc_dict</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">clash_dict</span> <span class="o">=</span> <span class="p">{}</span> + <span class="n">mapfilters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"contactfilter"</span><span class="p">)</span> <span class="k">if</span> <span class="n">mapfilters</span> <span class="ow">is</span> <span class="kc">None</span> \ + <span class="k">else</span> <span class="n">mapfilters</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s2">"net_deconv"</span><span class="p">]:</span> + <span class="c1"># TODO: maj scoremap ou maj mapcollection</span> + <span class="n">mapdict</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nd_filter</span><span class="p">(</span><span class="n">mapdict</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">mapfilters</span> <span class="o">==</span> <span class="s2">"all"</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">nofilter</span><span class="p">:</span> + <span class="n">mapfilters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter_types</span> + <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">nofilter</span> <span class="ow">or</span> <span class="n">mapfilters</span> <span class="o">==</span> <span class="s2">"none"</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Filtering steps removed"</span><span class="p">)</span> + <span class="n">mapfilters</span> <span class="o">=</span> <span class="p">[]</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">mapfilters</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">nofilter</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"No filtering steps. Will only use default filter (closed "</span> + <span class="s2">"contact filter)"</span><span class="p">)</span> + <span class="n">mapfilters</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"pos"</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">mapfilters</span><span class="p">)</span> <span class="o">==</span> <span class="nb">list</span><span class="p">:</span> + <span class="n">mapfilters</span> <span class="o">=</span> <span class="p">[</span><span class="n">elm</span> <span class="k">for</span> <span class="n">elm</span> <span class="ow">in</span> <span class="n">mapfilters</span> <span class="k">if</span> <span class="n">elm</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter_types</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">mapfilters</span> <span class="o">=</span> <span class="p">[</span><span class="n">mapfilters</span><span class="p">]</span> + <span class="k">if</span> <span class="s2">"pos"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mapfilters</span><span class="p">:</span> + <span class="n">mapfilters</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s2">"pos"</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Filtering </span><span class="si">%s</span><span class="s2"> contact map"</span><span class="p">,</span> <span class="n">mtype</span><span class="p">)</span> + <span class="k">for</span> <span class="n">flt</span> <span class="ow">in</span> <span class="n">mapfilters</span><span class="p">:</span> + <span class="c1"># /!\ cys unicity filter must be the last filter !</span> + <span class="c1"># TODO: contacts_flt.out checking if given clash in coupling</span> + <span class="c1"># matrix are the same</span> + <span class="c1"># Filter on maplot for nd or contact_list</span> + <span class="n">kw</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"clash_list"</span><span class="p">:</span> <span class="n">clash_list</span><span class="p">,</span> + <span class="s2">"sec_struct"</span><span class="p">:</span> <span class="n">inprot</span><span class="o">.</span><span class="n">sec_struct</span><span class="p">}</span> + <span class="n">flt_res</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">_filter"</span> <span class="o">%</span> <span class="n">flt</span><span class="p">)(</span><span class="n">mapdict</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span> + <span class="k">if</span> <span class="n">flt_res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash"</span><span class="p">):</span> + <span class="n">clash_list</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">flt_res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash"</span><span class="p">))</span> + <span class="n">hum_list</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">flt_res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash"</span><span class="p">)]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Removed </span><span class="si">%d</span><span class="s2"> contacts."</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">flt_res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash"</span><span class="p">))</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">":</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="n">textwrap</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="p">[</span><span class="s2">"(</span><span class="si">%2d</span><span class="s2">, </span><span class="si">%2d</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">pair</span> <span class="k">for</span> <span class="n">pair</span> <span class="ow">in</span> <span class="n">hum_list</span><span class="p">]),</span> + <span class="n">width</span><span class="o">=</span><span class="mi">80</span><span class="p">)))</span> + <span class="n">clash_dict</span><span class="p">[</span><span class="n">flt</span><span class="p">]</span> <span class="o">=</span> <span class="n">flt_res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"clash"</span><span class="p">)</span> + <span class="k">if</span> <span class="n">flt_res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">):</span> + <span class="n">desc_dict</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">flt_res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">))</span> + + <span class="c1"># write filter.out</span> + <span class="bp">self</span><span class="o">.</span><span class="n">write_filtout</span><span class="p">(</span><span class="n">clash_dict</span><span class="p">,</span> <span class="n">desc_dict</span><span class="p">,</span> <span class="n">contactlist</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="n">outdir</span><span class="p">,</span> + <span class="n">outprefix</span><span class="o">=</span><span class="n">outprefix</span> <span class="o">+</span> <span class="s1">'.'</span> <span class="o">+</span> <span class="n">mtype</span><span class="p">,</span> <span class="n">clashlist</span><span class="o">=</span><span class="n">clashlist</span><span class="p">)</span> + + <span class="c1"># Contactmap always filtered</span> + <span class="c1"># TODO: could set a treshold instead of n_factor</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Setting contact number with treshold </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"n_factor"</span><span class="p">))</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"n_factor"</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"all"</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Factor set to all. All the contacts will be used !"</span><span class="p">)</span> + <span class="n">nb_c</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">contactset</span><span class="p">())</span> + <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"n_factor"</span><span class="p">),</span> <span class="n">six</span><span class="o">.</span><span class="n">string_types</span><span class="p">)</span> \ + <span class="ow">and</span> <span class="s2">"%"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"n_factor"</span><span class="p">):</span> + <span class="n">reg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"([0-9]+\.?[0-9]*)%"</span><span class="p">)</span> + <span class="n">perc</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">reg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"n_factor"</span><span class="p">))</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> + + <span class="n">nb_c</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">perc</span><span class="o">/</span><span class="mi">100</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">contactset</span><span class="p">()))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Factor set as </span><span class="si">%.2f</span><span class="s2"> percentage of all the contacts "</span> + <span class="s2">"(random selection)."</span><span class="p">,</span> <span class="n">perc</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">nb_c</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> <span class="o">*</span> <span class="nb">float</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"n_factor"</span><span class="p">)))</span> + <span class="c1"># Number of selected contact</span> + <span class="c1"># If there isn't enough contacts in input contact map after filtering</span> + <span class="c1"># step, change nb_c</span> + <span class="n">nb_c</span> <span class="o">=</span> <span class="n">nb_c</span> <span class="k">if</span> <span class="n">nb_c</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">contactset</span><span class="p">())</span> <span class="k">else</span> <span class="nb">len</span><span class="p">(</span> + <span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">contactset</span><span class="p">())</span> + <span class="n">mapdict</span><span class="p">[</span><span class="s2">"nb_c"</span><span class="p">]</span> <span class="o">=</span> <span class="n">nb_c</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Update </span><span class="si">%s</span><span class="s2"> maplot"</span><span class="p">,</span> <span class="n">mtype</span><span class="p">)</span> + <span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">clash_list</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">mapdict</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Update </span><span class="si">%s</span><span class="s2"> scoremap"</span><span class="p">,</span> <span class="n">mtype</span><span class="p">)</span> + <span class="n">mapdict</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">clash_list</span><span class="p">)</span> + <span class="c1"># Get nb_c top maps</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Select top </span><span class="si">%d</span><span class="s2"> contacts according to scoremap"</span><span class="p">,</span> <span class="n">nb_c</span><span class="p">)</span> + <span class="c1"># TODO: deplacer cette partie dans l'appel de maplot une fois</span> + <span class="c1"># la classe mapcollections utilisee</span> + <span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span> <span class="o">=</span> <span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span><span class="o">.</span><span class="n">topmap</span><span class="p">(</span> + <span class="n">mapdict</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">],</span> <span class="n">nb_c</span><span class="p">)</span> + <span class="k">if</span> <span class="n">mapdict</span><span class="p">[</span><span class="s2">"distmap"</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Update </span><span class="si">%s</span><span class="s2"> distmap"</span><span class="p">,</span> <span class="n">mtype</span><span class="p">)</span> + <span class="n">mapdict</span><span class="p">[</span><span class="s2">"distmap"</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">clash_list</span><span class="p">)</span> + + <span class="k">return</span> <span class="n">mapdict</span> + +<div class="viewcode-block" id="MapFilter.write_filtout"><a class="viewcode-back" href="../../ariaec.html#ariaec.protmap.MapFilter.write_filtout">[docs]</a> <span class="nd">@staticmethod</span> + <span class="k">def</span> <span class="nf">write_filtout</span><span class="p">(</span><span class="n">clash_dict</span><span class="p">,</span> <span class="n">desc_dict</span><span class="p">,</span> <span class="n">contactlist</span><span class="p">,</span> <span class="n">outdir</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> + <span class="n">outprefix</span><span class="o">=</span><span class="s2">"protein"</span><span class="p">,</span> <span class="n">clashlist</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">human_idx</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> clash_dict :</span> +<span class="sd"> </span> +<span class="sd"> desc_dict :</span> +<span class="sd"> </span> +<span class="sd"> contactlist :</span> +<span class="sd"> </span> +<span class="sd"> outdir :</span> +<span class="sd"> (Default value = "")</span> +<span class="sd"> outprefix :</span> +<span class="sd"> (Default value = "protein")</span> +<span class="sd"> clashlist :</span> +<span class="sd"> (Default value = None)</span> +<span class="sd"> human_idx :</span> +<span class="sd"> (Default value = True)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: utiliser self.clash_dict au lieu de meta_clash</span> + <span class="sd">"""</span> + +<span class="sd"> :param clash_dict:</span> +<span class="sd"> :param desc_dict:</span> +<span class="sd"> :param contactlist:</span> +<span class="sd"> :param outdir:</span> +<span class="sd"> :param outprefix:</span> +<span class="sd"> :param clashlist:</span> +<span class="sd"> :param human_idx:</span> +<span class="sd"> """</span> + <span class="n">meta_clash</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"cons"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"flag"</span><span class="p">:</span> <span class="mi">888</span><span class="p">,</span> <span class="s2">"msg"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"warn"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"high conservation"</span><span class="p">},</span> + <span class="s2">"cys"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"flag"</span><span class="p">:</span> <span class="mi">222</span><span class="p">,</span> <span class="s2">"msg"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"warn"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"disulfide bonds unicity"</span><span class="p">},</span> + <span class="s2">"ssclash"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"flag"</span><span class="p">:</span> <span class="mi">999</span><span class="p">,</span> <span class="s2">"msg"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"warn"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"secondary structure prediction conflict"</span><span class="p">},</span> + <span class="s2">"pos"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"flag"</span><span class="p">:</span> <span class="s2">"physical proximity"</span><span class="p">,</span> <span class="s2">"msg"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"warn"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"sequence position"</span><span class="p">},</span> + <span class="s2">"nd"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"flag"</span><span class="p">:</span> <span class="s2">"deconvol"</span><span class="p">,</span> <span class="s2">"msg"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"warn"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> + <span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"network deconvolution"</span><span class="p">}</span> + <span class="p">}</span> + <span class="n">offset</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">human_idx</span> <span class="k">else</span> <span class="mi">0</span> + + <span class="k">for</span> <span class="n">icontact</span><span class="p">,</span> <span class="n">contact</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">contactlist</span><span class="p">):</span> + <span class="n">clash</span> <span class="o">=</span> <span class="s2">"0"</span> + <span class="n">clash_t</span> <span class="o">=</span> <span class="s2">""</span> + <span class="n">raw_contact</span> <span class="o">=</span> <span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">offset</span><span class="p">,</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">offset</span><span class="p">)</span> + <span class="k">for</span> <span class="n">clash_t</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">clash_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span> + <span class="k">if</span> <span class="n">clash_dict</span><span class="p">[</span><span class="n">clash_t</span><span class="p">]</span> <span class="ow">and</span> <span class="n">raw_contact</span> <span class="ow">in</span> <span class="n">clash_dict</span><span class="p">[</span><span class="n">clash_t</span><span class="p">]:</span> + <span class="n">clash</span> <span class="o">=</span> <span class="n">meta_clash</span><span class="p">[</span><span class="n">clash_t</span><span class="p">][</span><span class="s2">"flag"</span><span class="p">]</span> + <span class="n">meta_clash</span><span class="p">[</span><span class="n">clash_t</span><span class="p">][</span><span class="s2">"msg"</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">"""</span> +<span class="si">{clash_type}</span><span class="s2"> flag at pair </span><span class="si">{pair_nb}</span><span class="s2"> : res </span><span class="si">{res1}</span><span class="s2"> and res </span><span class="si">{res2}</span><span class="s2"> </span><span class="si">{clash_desc}</span><span class="se">\</span> +<span class="s2">"""</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">clash_type</span><span class="o">=</span><span class="n">clash</span><span class="p">,</span> <span class="n">pair_nb</span><span class="o">=</span><span class="n">icontact</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> + <span class="n">clash_desc</span><span class="o">=</span><span class="n">desc_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">raw_contact</span><span class="p">,</span> <span class="s1">''</span><span class="p">),</span> + <span class="n">res1</span><span class="o">=</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">res2</span><span class="o">=</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="k">break</span> + <span class="k">if</span> <span class="n">clashlist</span> <span class="ow">and</span> <span class="nb">str</span><span class="p">(</span><span class="n">clash</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">str</span><span class="p">(</span><span class="n">clashlist</span><span class="p">[</span><span class="n">icontact</span><span class="p">]):</span> + <span class="k">if</span> <span class="n">clash</span> <span class="o">==</span> <span class="s2">"0"</span><span class="p">:</span> + <span class="n">op</span> <span class="o">=</span> <span class="s2">"removed"</span> + <span class="n">ctype</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">clashlist</span><span class="p">[</span><span class="n">icontact</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">op</span> <span class="o">=</span> <span class="s2">"added"</span> + <span class="n">ctype</span> <span class="o">=</span> <span class="n">clash</span> + <span class="n">meta_clash</span><span class="p">[</span><span class="n">clash_t</span><span class="p">][</span><span class="s2">"warn"</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">/!\ Clash: </span><span class="si">{clash_desc}</span><span class="s2"> </span><span class="si">{clash}</span><span class="s2"> flag for contact "</span> \ + <span class="s2">"</span><span class="si">{res_pos}</span><span class="s2"> (</span><span class="si">{res1}</span><span class="s2">, </span><span class="si">{res2}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> + <span class="n">clash_desc</span><span class="o">=</span><span class="n">op</span><span class="p">,</span> <span class="n">clash</span><span class="o">=</span><span class="n">ctype</span><span class="p">,</span> <span class="n">res_pos</span><span class="o">=</span><span class="n">icontact</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> + <span class="n">res1</span><span class="o">=</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">res2</span><span class="o">=</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">.filter.out"</span> <span class="o">%</span> <span class="p">(</span><span class="n">outdir</span><span class="p">,</span> <span class="n">outprefix</span><span class="p">),</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">out</span><span class="p">:</span> + <span class="n">titleprint</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">progname</span><span class="o">=</span><span class="vm">__doc__</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="s1">'Contacts filter'</span><span class="p">)</span> + <span class="k">for</span> <span class="n">flt</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"nd"</span><span class="p">,</span> <span class="s2">"pos"</span><span class="p">,</span> <span class="s2">"cons"</span><span class="p">,</span> <span class="s2">"ssclash"</span><span class="p">,</span> <span class="s2">"cys"</span><span class="p">):</span> + <span class="n">out</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span> + +<span class="si">{filter_desc}</span><span class="s1"></span> +<span class="si">{hd}</span><span class="s1"></span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">filter_desc</span><span class="o">=</span><span class="n">meta_clash</span><span class="p">[</span><span class="n">flt</span><span class="p">][</span><span class="s2">"desc"</span><span class="p">]</span><span class="o">.</span><span class="n">capitalize</span><span class="p">(),</span> + <span class="n">hd</span><span class="o">=</span><span class="s2">"="</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">meta_clash</span><span class="p">[</span><span class="n">flt</span><span class="p">][</span><span class="s2">"desc"</span><span class="p">])))</span> + + <span class="k">if</span> <span class="n">meta_clash</span><span class="p">[</span><span class="n">flt</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"warn"</span><span class="p">):</span> + <span class="n">out</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">meta_clash</span><span class="p">[</span><span class="n">flt</span><span class="p">][</span><span class="s2">"warn"</span><span class="p">])</span> + <span class="n">out</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">meta_clash</span><span class="p">[</span><span class="n">flt</span><span class="p">][</span><span class="s2">"msg"</span><span class="p">])</span></div></div> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/reader.html b/examples-dev/olds/_build/html/_modules/ariaec/reader.html new file mode 100644 index 0000000..9e4a218 --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/reader.html @@ -0,0 +1,1141 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.reader — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.reader</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.reader</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Reader objects</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> + +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">re</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">os.path</span> +<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">collections</span> +<span class="kn">import</span> <span class="nn">pkg_resources</span> <span class="k">as</span> <span class="nn">pkgr</span> +<span class="kn">import</span> <span class="nn">scipy.spatial.distance</span> <span class="k">as</span> <span class="nn">distance</span> +<span class="kn">from</span> <span class="nn">Bio</span> <span class="k">import</span> <span class="n">pairwise2</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">sort_2dict</span> +<span class="kn">from</span> <span class="nn">.protmap</span> <span class="k">import</span> <span class="p">(</span><span class="n">ResMap</span><span class="p">,</span> <span class="n">ResAtmMap</span><span class="p">)</span> + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> +<span class="c1"># TODO: check if Atom is still used ...</span> +<span class="c1"># TODO: Should use conkit in the future</span> +<span class="n">Atom</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">namedtuple</span><span class="p">(</span><span class="s2">"Atom"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"coords"</span><span class="p">])</span> + + +<div class="viewcode-block" id="RegexFile"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.RegexFile">[docs]</a><span class="k">class</span> <span class="nc">RegexFile</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""File which can be parsed with a regex"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> <span class="n">filetype</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">regex</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">''</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">regex</span> <span class="o">=</span> <span class="n">regex</span> + <span class="bp">self</span><span class="o">.</span><span class="n">sort</span> <span class="o">=</span> <span class="n">sort</span> + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">=</span> <span class="n">filetype</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_filename</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span> <span class="o">=</span> <span class="n">filepath</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_defaultpath</span> <span class="o">=</span> <span class="n">default</span> <span class="k">if</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_exists</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span> \ + <span class="k">else</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_pkgfile</span> <span class="o">=</span> <span class="kc">False</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_checkpath</span><span class="p">()</span> + + <span class="k">def</span> <span class="nf">_checkpath</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Check if filepath exists or is in package ressources"""</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Checking if </span><span class="si">%s</span><span class="s2"> file exists"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span><span class="p">):</span> + <span class="c1"># File actually exists outside of the package</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"File exists."</span><span class="p">)</span> + <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span> <span class="ow">and</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_exists</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span><span class="p">):</span> + <span class="c1"># File is in pkgr</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Use </span><span class="si">%s</span><span class="s2"> file from package ressources"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_pkgfile</span> <span class="o">=</span> <span class="kc">True</span> + <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_defaultpath</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Use default </span><span class="si">%s</span><span class="s2"> file"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_defaultpath</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_pkgfile</span> <span class="o">=</span> <span class="kc">True</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"File </span><span class="si">%s</span><span class="s2"> does not exists"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">filename</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Get basename of filepath"""</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filename</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_filename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filename</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">filepath</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""File path"""</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filepath</span> + +<div class="viewcode-block" id="RegexFile.load"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.RegexFile.load">[docs]</a> <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Fill lines with dictionary. Each key is a line number in the given file</span> +<span class="sd"> :return: None</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">lines_dict</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">regex</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Can't parse file </span><span class="si">%s</span><span class="s2"> without defined regex"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span> + + <span class="k">with</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_stream</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pkgfile</span> \ + <span class="k">else</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">infile</span><span class="p">:</span> + + <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">infile</span><span class="p">):</span> + <span class="n">match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">match</span><span class="p">:</span> + <span class="n">lines_dict</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort</span><span class="p">:</span> + <span class="n">lines_dict</span> <span class="o">=</span> <span class="n">sort_2dict</span><span class="p">(</span><span class="n">lines_dict</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort</span><span class="p">)</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span> <span class="o">=</span> <span class="n">lines_dict</span></div></div> + + +<div class="viewcode-block" id="CulledPdbFile"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.CulledPdbFile">[docs]</a><span class="k">class</span> <span class="nc">CulledPdbFile</span><span class="p">(</span><span class="n">RegexFile</span><span class="p">):</span> + <span class="sd">"""Reader class for culled pdb list"""</span> + <span class="n">regex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s2">"^(?P<pdb_id>\w</span><span class="si">{4}</span><span class="s2">)"</span> + <span class="sa">r</span><span class="s2">"(?P<chain_id>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<length>\d+)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<exp>\w+)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<resolution>-?\d+\.\d+)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<r_factor>-?\d+\.\d+)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<free_rvalue>-?\d+\.\d+)\s*$"</span><span class="p">)</span> + <span class="n">filetype</span> <span class="o">=</span> <span class="s1">'cullpdb'</span> + <span class="n">default</span> <span class="o">=</span> <span class="s1">'data/cullpdb/160427/cullpdb_pc25_res1.6_R0.25_d160427_chains3743'</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="n">kwargs</span><span class="p">[</span><span class="s1">'regex'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">regex</span> + <span class="n">kwargs</span><span class="p">[</span><span class="s1">'filetype'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> + <span class="n">kwargs</span><span class="p">[</span><span class="s1">'default'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default</span> + <span class="nb">super</span><span class="p">(</span><span class="n">CulledPdbFile</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="TblDistFile"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.TblDistFile">[docs]</a><span class="k">class</span> <span class="nc">TblDistFile</span><span class="p">(</span><span class="n">RegexFile</span><span class="p">):</span> + <span class="sd">"""Reader class for TBL Distance restraint file"""</span> + <span class="n">regex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s2">"^\s*(?P<restflag>or|assign)\s+\(segid\s+</span><span class="se">\"</span><span class="s2">(?P<segid1>[\s\w]+)"</span> + <span class="sa">r</span><span class="s2">"</span><span class="se">\"</span><span class="s2">\s+and\s+resid\s+(?P<resid1>\d+)\s+and\s+name\s+(?P<atm1>\w+)"</span> + <span class="sa">r</span><span class="s2">"\)\s+\(segid\s+</span><span class="se">\"</span><span class="s2">(?P<segid2>[\s\w]+)</span><span class="se">\"</span><span class="s2">\s+and\s+resid\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<resid2>\d+)\s+and\s+name\s+(?P<atm2>\w+)\)\s*"</span> + <span class="sa">r</span><span class="s2">"(?P<dtarget>\d+\.\d+)?\s*(?P<dminus>\d+\.\d+)?\s*(?P<dplus>\d+\.\d+)"</span> + <span class="sa">r</span><span class="s2">"?\s*(weight)?\s*(?P<weight>\d+\.\d+)?\s*!?\s*(spec=)?"</span> + <span class="sa">r</span><span class="s2">"(?P<listname>\w+)?(,\s*no=)?(?P<restno>\d+)?(,\s*id=)?"</span> + <span class="sa">r</span><span class="s2">"(?P<restid>\d+)?(,\s*vol=)?(?P<vol>[\w.\-+]+)?$"</span><span class="p">)</span> + <span class="n">filetype</span> <span class="o">=</span> <span class="s1">'tbldist'</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="n">kwargs</span><span class="p">[</span><span class="s1">'regex'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">regex</span> + <span class="n">kwargs</span><span class="p">[</span><span class="s1">'filetype'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> + <span class="nb">super</span><span class="p">(</span><span class="n">TblDistFile</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="MapFile"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.MapFile">[docs]</a><span class="k">class</span> <span class="nc">MapFile</span><span class="p">(</span><span class="n">RegexFile</span><span class="p">):</span> + <span class="sd">"""Abstract class related to all kind of protein maps"""</span> + <span class="c1"># List of 3tuples ("regex_file", "filetype", "sort_field")</span> + <span class="c1"># sort_field allow sorting lines with values into this field</span> + <span class="c1"># TODO: wrong regex for native_full ?</span> + <span class="c1"># TODO: smarter dict ...</span> + <span class="n">types</span> <span class="o">=</span> <span class="p">{</span> + <span class="s2">"plmdca"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^(?P<res1_nb>\d+)\s+(?P<res1_name>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<res2_nb>\d+)\s+(?P<res2_name>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<mi_score>\d)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<plm_score>-?\d+\.\d+)\s*$"</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"plm_score"</span> + <span class="p">},</span> + <span class="s2">"plm"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^(?P<res1_nb>\d+)\s+(?P<res1_name>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<res2_nb>\d+)\s+(?P<res2_name>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<mi_score>\d)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<plm_score>-?\d+\.\d+)\s*$"</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"plm_score"</span> + <span class="p">},</span> + <span class="s2">"plmev"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^(?P<res1_nb>\d+)\s+(?P<res1_name>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<res2_nb>\d+)\s+(?P<res2_name>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<mi_score>\d)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<plm_score>-?\d+\.\d+)\s*$"</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"plm_score"</span> + <span class="p">},</span> + <span class="s2">"plmc"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"^(?P<res1_nb>\d+)\s+(?P<res1_name>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<res2_nb>\d+)\s+(?P<res2_name>\w)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<mi_score>\d)\s+"</span> + <span class="sa">r</span><span class="s2">"(?P<plm_score>-?\d+\.\d+)\s*$"</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"plm_score"</span> + <span class="p">},</span> + <span class="s2">"evfold"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<res1_nb>\d+),(?P<res2_nb>\d+),'</span> + <span class="sa">r</span><span class="s1">'(?P<ec_score>-?\d+\.\d+e?-?\d*),'</span> + <span class="sa">r</span><span class="s1">'(?P<placeholder>\d),(?P<res1_cons>\d+),'</span> + <span class="sa">r</span><span class="s1">'(?P<res2_cons>\d+),(?P<ss_filter>\d|\d</span><span class="si">{3}</span><span class="s1">),'</span> + <span class="sa">r</span><span class="s1">'(?P<high_cons_filter>\d|\d</span><span class="si">{3}</span><span class="s1">),'</span> + <span class="sa">r</span><span class="s1">'(?P<cc_filter>\d|\d</span><span class="si">{3}</span><span class="s1">),(?P<res1_name>\w),'</span> + <span class="sa">r</span><span class="s1">'(?P<res2_name>\w)$'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"ec_score"</span> + <span class="p">},</span> + <span class="s2">"pconsc"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<res1_nb>\d+) (?P<res2_nb>\d+) '</span> + <span class="sa">r</span><span class="s1">'(?P<ec_score>-?\d+\.\d+e?-?\d*)$'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"ec_score"</span> + <span class="p">},</span> + <span class="s2">"pconsc1"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<res1_nb>\d+) (?P<res2_nb>\d+) '</span> + <span class="sa">r</span><span class="s1">'(?P<ec_score>-?\d+\.\d+e?-?\d*)$'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"ec_score"</span> + <span class="p">},</span> + <span class="s2">"pconsc2"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<res1_nb>\d+) (?P<res2_nb>\d+) '</span> + <span class="sa">r</span><span class="s1">'(?P<ec_score>-?\d+\.\d+e?-?\d*)$'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"ec_score"</span> + <span class="p">},</span> + <span class="s2">"metapsicov_stg1"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<res1_nb>\d+) (?P<res2_nb>\d+) \d (?P<res_dist>-?\d+.?\d*) '</span> + <span class="sa">r</span><span class="s1">'(?P<ec_score>-?\d+.\d+e?-?\d*)$'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"ec_score"</span> + <span class="p">},</span> + <span class="s2">"metapsicov_stg2"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<res1_nb>\d+) (?P<res2_nb>\d+) \d (?P<res_dist>-?\d+.?\d*) '</span> + <span class="sa">r</span><span class="s1">'(?P<ec_score>-?\d+.\d+e?-?\d*)$'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"ec_score"</span> + <span class="p">},</span> + <span class="s2">"psicov"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<res1_nb>\d+) (?P<res2_nb>\d+) \d (?P<res_dist>-?\d+.?\d*) '</span> + <span class="sa">r</span><span class="s1">'(?P<ec_score>-?\d+.\d+e?-?\d*)$'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"ec_score"</span> + <span class="p">},</span> + <span class="s2">"gremlin"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^(?P<res1_nb>\d+)\t(?P<res2_nb>\d+)\t'</span> + <span class="sa">r</span><span class="s1">'(?P<res1_id>\d+_[AC-IK-NP-TVWYZ])\t'</span> + <span class="sa">r</span><span class="s1">'(?P<res2_id>\d+_[AC-IK-NP-TVWYZ])\t'</span> + <span class="sa">r</span><span class="s1">'(?P<raw_score>-?\d+\.\d+e?-?\d*)\t'</span> + <span class="sa">r</span><span class="s1">'(?P<scale_score>-?\d+\.\d+e?-?\d*)\t'</span> + <span class="sa">r</span><span class="s1">'(?P<prob>-?\d+\.\d+e?-?\d*)'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"scale_score"</span> + <span class="p">},</span> + <span class="s2">"native"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^\s*(?P<res1_nb>\d+)\s+(?P<res2_nb>\d+)\s+('</span> + <span class="sa">r</span><span class="s1">'?P<ca_ca>\d+\.\d+)\s+(?P<cb_cb>\d+\.\d+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<sc_sc>\d+\.\d+)\s+(?P<valid>\w+)'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="kc">None</span> + <span class="p">},</span> + <span class="s2">"native_full"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^\s*(?P<res1_nb>\d+)\s+(?P<res2_nb>\d+)\s+('</span> + <span class="sa">r</span><span class="s1">'?P<ca_ca>\d+\.\d+)\s+(?P<cb_cb>\d+\.\d+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<sc_sc>\d+\.\d+)\s+(?P<valid>\w+)'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="kc">None</span> + <span class="p">},</span> + <span class="s2">"bbcontacts"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'\s*(?P<identifier>\w+)\s+(?P<diversity>-?\d+\.?\d*)'</span> + <span class="sa">r</span><span class="s1">'\s+(?P<direction>Parallel|Antiparallel)'</span> + <span class="sa">r</span><span class="s1">'\s+(?P<viterbiscore>-?\d+\.?\d*)'</span> + <span class="sa">r</span><span class="s1">'\s+(?P<indexpred>\d+)'</span> + <span class="sa">r</span><span class="s1">'\s+(?P<state>first|internal|last)'</span> + <span class="sa">r</span><span class="s1">'\s+(?P<res1_nb>\d+)\s+(?P<res2_nb>\d+)'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="kc">None</span> + <span class="p">},</span> + <span class="s2">"contactlist"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^\s*(?P<res1_nb>\d+)[\s,;]+(?P<res2_nb>\d+)[\s,'</span> + <span class="sa">r</span><span class="s1">';]*(?P<con_flag>\w*)'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="kc">None</span> + <span class="p">},</span> + <span class="s2">"metapsicovhb"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^\s*(?P<res_donor>\d+)[\s,;]+'</span> + <span class="sa">r</span><span class="s1">'(?P<res_acceptor>\d+)[\s,;]+\d[\s,;]+'</span> + <span class="sa">r</span><span class="s1">'(?P<res_dist>-?\d+.?\d*)[\s,;]+'</span> + <span class="sa">r</span><span class="s1">'(?P<hbscore>-?\d+\.?\d*)'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"hbscore"</span> + <span class="p">},</span> + <span class="s2">"default_1"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^\s*(?P<res1_nb>\d+)\s+(?P<res2_nb>\d+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<resn1>\w+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<resn2>\w+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<score>[\w\d.+\-]+)'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"score"</span> + <span class="p">},</span> + <span class="s2">"default_2"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^\s*(?P<res1_nb>\d+)\s+(?P<res2_nb>\d+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<score>[\w\d.+\-]+)'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="s2">"score"</span> + <span class="p">},</span> + <span class="s2">"default_3"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^\s*(?P<res1_nb>\d+)\s+(?P<res2_nb>\d+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<resn1>\w+)\s+'</span> + <span class="sa">r</span><span class="s1">'(?P<resn2>\w+)\s+'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="kc">None</span> + <span class="p">},</span> + <span class="s2">"default_4"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span> + <span class="sa">r</span><span class="s1">'^\s*(?P<res1_nb>\d+)\s+(?P<res2_nb>\d+)\s+'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="kc">None</span> + <span class="p">},</span> + <span class="s2">"empty"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"regex"</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^\s*$'</span><span class="p">),</span> + <span class="s2">"score_field"</span><span class="p">:</span> <span class="kc">None</span> + <span class="p">}</span> + <span class="p">}</span> + <span class="n">check_type</span> <span class="o">=</span> <span class="kc">True</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :param args:</span> +<span class="sd"> :param kwargs:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="nb">super</span><span class="p">(</span><span class="n">MapFile</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_type</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">regex</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_maptype</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"alldistmap"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s2">"allcontactmap"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s2">"distmap"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s2">"maplot"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> + <span class="s2">"scoremap"</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">clashlist</span> <span class="o">=</span> <span class="p">[]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">distlist</span> <span class="o">=</span> <span class="p">[]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span> <span class="o">=</span> <span class="p">[]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">flaglist</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">scorelist</span> <span class="o">=</span> <span class="p">[]</span> + <span class="c1"># self.maplot = None</span> + <span class="c1"># self.distmap = None</span> + +<div class="viewcode-block" id="MapFile.create_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.MapFile.create_map">[docs]</a> <span class="k">def</span> <span class="nf">create_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protein</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="n">flaglist</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> + <span class="n">path</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> path :</span> +<span class="sd"> param protein: (Default value = "")</span> +<span class="sd"> contactdef :</span> +<span class="sd"> param flaglist:</span> +<span class="sd"> offset :</span> +<span class="sd"> param sym: (Default value = 0)</span> +<span class="sd"> kwargs :</span> +<span class="sd"> return:</span> +<span class="sd"> protein :</span> +<span class="sd"> </span> +<span class="sd"> flaglist :</span> +<span class="sd"> (Default value = None)</span> +<span class="sd"> sym :</span> +<span class="sd"> (Default value = True)</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Class </span><span class="si">%s</span><span class="s2"> doesn't implement create_map"</span> <span class="o">%</span> + <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span></div> + +<div class="viewcode-block" id="MapFile.update_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.MapFile.update_map">[docs]</a> <span class="k">def</span> <span class="nf">update_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resmap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> resmap :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">"Class </span><span class="si">%s</span><span class="s2"> doesn't implement update_map"</span> <span class="o">%</span> + <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span></div> + +<div class="viewcode-block" id="MapFile.check_maptype"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.MapFile.check_maptype">[docs]</a> <span class="k">def</span> <span class="nf">check_maptype</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""":return:"""</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Checking if file </span><span class="si">%s</span><span class="s2"> correspond to </span><span class="si">%s</span><span class="s2"> format"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="c1"># Check if given type is supported</span> + <span class="c1"># TODO: report this check into commands section</span> + <span class="n">defaults</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"default_1"</span><span class="p">,</span> <span class="s2">"default_2"</span><span class="p">,</span> <span class="s2">"default_3"</span><span class="p">,</span> <span class="s2">"default_4"</span><span class="p">,</span> <span class="s2">"empty"</span><span class="p">)</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span><span class="o">.</span><span class="n">st_size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"File </span><span class="si">%s</span><span class="s2"> is empty !"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span> + <span class="k">return</span> <span class="p">[</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="s2">"empty"</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"regex"</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="s2">"empty"</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"score_field"</span><span class="p">)</span> + <span class="p">]</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">infile</span><span class="p">:</span> + <span class="c1"># Check first and second line of file</span> + <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">infile</span><span class="p">):</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">:</span> + <span class="n">match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"regex"</span><span class="p">)</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Format </span><span class="si">%s</span><span class="s2"> not supported !"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="n">match</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">match</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Format type correct"</span><span class="p">)</span> + <span class="k">return</span> <span class="p">[</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"regex"</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"score_field"</span><span class="p">)</span> + <span class="p">]</span> + <span class="k">if</span> <span class="n">index</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Given type do not correspond, checking default"</span> + <span class="s2">" format for contactlist or empty file..."</span><span class="p">)</span> + <span class="k">for</span> <span class="n">subformat</span> <span class="ow">in</span> <span class="n">defaults</span><span class="p">:</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">subformat</span><span class="p">)[</span><span class="s2">"regex"</span><span class="p">]</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Format type correct </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">subformat</span><span class="p">)</span> + <span class="k">return</span> <span class="p">[</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">subformat</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"regex"</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">types</span><span class="p">[</span><span class="n">subformat</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"score_field"</span><span class="p">)</span> + <span class="p">]</span> + <span class="c1"># Stop checking after second line</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Can't read </span><span class="si">%s</span><span class="s2"> file."</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="k">break</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Wrong format type given ..."</span><span class="p">)</span> + <span class="k">return</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">*</span> <span class="mi">3</span></div> + +<div class="viewcode-block" id="MapFile.read"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.MapFile.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protein</span><span class="p">,</span> <span class="n">contactdef</span><span class="o">=</span><span class="mf">5.0</span><span class="p">,</span> <span class="n">groupby_method</span><span class="o">=</span><span class="s2">"min"</span><span class="p">,</span> + <span class="n">scsc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> protein :</span> +<span class="sd"> param contactdef: (Default value = None)</span> +<span class="sd"> groupby_method :</span> +<span class="sd"> param scsc: (Default value = "min")</span> +<span class="sd"> contactdef :</span> +<span class="sd"> (Default value = 5.0)</span> +<span class="sd"> scsc :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># res1_1l_code</span> + <span class="n">aaseq</span> <span class="o">=</span> <span class="p">{}</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Reading </span><span class="si">%s</span><span class="s2"> file"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span> + <span class="c1"># Read file with regex related to filetype</span> + <span class="bp">self</span><span class="o">.</span><span class="n">load</span><span class="p">()</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unrecognized file type"</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Loading contact file"</span><span class="p">)</span> + <span class="n">sym</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">==</span> <span class="s2">"metapsicovhb"</span> <span class="k">else</span> <span class="kc">True</span> + <span class="n">confields</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"res_donor"</span><span class="p">,</span> <span class="s2">"res_acceptor"</span><span class="p">)</span> <span class="k">if</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">==</span> <span class="s2">"metapsicovhb"</span> <span class="k">else</span> <span class="p">(</span><span class="s1">'res1_nb'</span><span class="p">,</span> <span class="s1">'res2_nb'</span><span class="p">)</span> + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">:</span> + + <span class="c1"># If contact defined</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">confields</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">and</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">confields</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span> + <span class="n">conkeys</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">sorted</span><span class="p">([</span> + <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">confields</span><span class="p">[</span><span class="mi">0</span><span class="p">])),</span> + <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">confields</span><span class="p">[</span><span class="mi">1</span><span class="p">]))]))</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">conkeys</span><span class="p">)</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">scorelist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sort</span><span class="p">)))</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">==</span> <span class="s2">"contactlist"</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">flaglist</span><span class="p">[</span><span class="n">conkeys</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"con_flag"</span><span class="p">)</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">==</span> <span class="s2">"metapsicovhb"</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">distlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"res_dist"</span><span class="p">))</span> + + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"evfold"</span><span class="p">,</span> <span class="s2">"plmdca"</span><span class="p">,</span> <span class="s2">"plm"</span><span class="p">,</span> <span class="s2">"plmev"</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">clashlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span> + <span class="p">(</span><span class="n">el</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ss_filter"</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"high_cons_filter"</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"cc_filter"</span><span class="p">))</span> <span class="k">if</span> <span class="n">el</span> <span class="o">!=</span> <span class="s2">"0"</span><span class="p">),</span> + <span class="s2">"0"</span><span class="p">))</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"res1_name"</span><span class="p">)</span> <span class="ow">and</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"res2_name"</span><span class="p">):</span> + <span class="n">aaseq</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"res1_nb"</span><span class="p">))]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span> + <span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"res1_name"</span><span class="p">)</span> + <span class="n">aaseq</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"res2_nb"</span><span class="p">))]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span> + <span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"res2_name"</span><span class="p">)</span> + + <span class="k">if</span> <span class="n">aaseq</span><span class="p">:</span> + <span class="c1"># Align evfold amino acid sequence with sequence obtained from seq</span> + <span class="c1"># file</span> + <span class="nb">print</span><span class="p">(</span><span class="n">aaseq</span><span class="p">)</span> + <span class="n">seq</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">([</span> + <span class="n">aaseq</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">aaseq</span> <span class="k">else</span> <span class="s1">'*'</span> + <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="n">aaseq</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)])</span> + <span class="c1"># With gap penalty set to -1, we should only have an alignment without</span> + <span class="c1"># gap since mismatch is the preferred way (with score set to 0)</span> + <span class="n">alignment</span> <span class="o">=</span> <span class="n">pairwise2</span><span class="o">.</span><span class="n">align</span><span class="o">.</span><span class="n">localxs</span><span class="p">(</span> + <span class="n">seq</span><span class="p">,</span> <span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> + <span class="n">one_alignment_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'Alignment of amino acid sequence with contact file</span><span class="se">\n</span><span class="s1">'</span> + <span class="s1">'</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">pairwise2</span><span class="o">.</span><span class="n">format_alignment</span><span class="p">(</span><span class="o">*</span><span class="n">alignment</span><span class="p">))</span> + <span class="n">shift</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^-*'</span><span class="p">,</span> <span class="n">alignment</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + <span class="n">shift</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">shift</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="k">if</span> <span class="n">shift</span> <span class="k">else</span> <span class="mi">0</span> + <span class="k">if</span> <span class="n">shift</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Found a shift of </span><span class="si">%d</span><span class="s2"> residues in positions given"</span> + <span class="s2">" within contact list"</span><span class="p">,</span> <span class="n">shift</span><span class="p">)</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Update index in contact list and remove unassigned "</span> + <span class="s2">"contacts"</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Old contact list</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span> <span class="o">=</span> <span class="p">[</span> + <span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">shift</span><span class="p">,</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">shift</span><span class="p">)</span> + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span> + <span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"New contact list</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Remove contacts outside sequence bonds"</span><span class="p">)</span> + + <span class="c1"># Checking for unassigned contacts</span> + <span class="n">validx</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> + <span class="n">unascon</span> <span class="o">=</span> <span class="p">[</span><span class="n">contactidx</span> + <span class="k">for</span> <span class="n">contactidx</span><span class="p">,</span> <span class="n">contact</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">)</span> + <span class="k">if</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">validx</span> <span class="ow">or</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">validx</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Old contact list (</span><span class="si">%d</span><span class="s2"> contacts)</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">contact</span> + <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">contact</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">)</span> + <span class="k">if</span> <span class="n">idx</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">unascon</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"New contact list (</span><span class="si">%d</span><span class="s2"> contacts)</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> + <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">clashlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">clash</span> <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">clash</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">clashlist</span><span class="p">)</span> + <span class="k">if</span> <span class="n">idx</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">unascon</span><span class="p">]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">clashlist</span> <span class="k">else</span> <span class="p">[]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">distlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">dist</span> <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">dist</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">distlist</span><span class="p">)</span> + <span class="k">if</span> <span class="n">idx</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">unascon</span><span class="p">]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">distlist</span> <span class="k">else</span> <span class="p">[]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">scorelist</span> <span class="o">=</span> <span class="p">[</span><span class="n">score</span> <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">score</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scorelist</span><span class="p">)</span> + <span class="k">if</span> <span class="n">idx</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">unascon</span><span class="p">]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">scorelist</span> <span class="k">else</span> <span class="p">[]</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">create_map</span><span class="p">(</span><span class="n">protein</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> + <span class="n">groupby_method</span><span class="o">=</span><span class="n">groupby_method</span><span class="p">,</span> <span class="n">scsc</span><span class="o">=</span><span class="n">scsc</span><span class="p">,</span> + <span class="n">flaglist</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">flaglist</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="n">sym</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">)</span></div></div> + + +<div class="viewcode-block" id="ContactMapFile"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.ContactMapFile">[docs]</a><span class="k">class</span> <span class="nc">ContactMapFile</span><span class="p">(</span><span class="n">MapFile</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Contact map file</span> +<span class="sd"> """</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> <span class="n">filetype</span><span class="p">):</span> + <span class="sd">"""</span> + +<span class="sd"> :param filepath:</span> +<span class="sd"> :param filetype:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="n">filetype</span><span class="p">)</span> + +<div class="viewcode-block" id="ContactMapFile.update_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.ContactMapFile.update_map">[docs]</a> <span class="k">def</span> <span class="nf">update_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resmap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> resmap :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># TODO: swap dataframe factory here</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span></div> + +<div class="viewcode-block" id="ContactMapFile.create_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.ContactMapFile.create_map">[docs]</a> <span class="k">def</span> <span class="nf">create_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protein</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Initialize and fill Res - Res maps based on contactlist</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> protein :</span> +<span class="sd"> </span> +<span class="sd"> args :</span> +<span class="sd"> </span> +<span class="sd"> kwargs :</span> +<span class="sd"> </span> +<span class="sd"> *args :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">offset</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="c1"># Should be 1 or upper (human_idx)</span> + <span class="n">idxnames</span> <span class="o">=</span> <span class="s2">"residuex"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">!=</span> <span class="s2">"metapsicovhb"</span> <span class="k">else</span> <span class="s2">"donor"</span> + <span class="n">colnames</span> <span class="o">=</span> <span class="s2">"residuey"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">!=</span> <span class="s2">"metapsicovhb"</span> <span class="k">else</span> <span class="s2">"acceptor"</span> + <span class="n">contactmap</span> <span class="o">=</span> <span class="n">ResMap</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="s1">'contact'</span><span class="p">,</span> + <span class="n">flaglist</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">'flaglist'</span><span class="p">],</span> + <span class="n">seqidx</span><span class="o">=</span><span class="n">protein</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">idxnames</span><span class="o">=</span><span class="n">idxnames</span><span class="p">,</span> + <span class="n">colnames</span><span class="o">=</span><span class="n">colnames</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">'sym'</span><span class="p">],</span> + <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"path"</span><span class="p">))</span> + <span class="c1"># DataFrame containing ec scores</span> + <span class="n">scoremap</span> <span class="o">=</span> <span class="n">ResMap</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="s1">'score'</span><span class="p">,</span> + <span class="n">seqidx</span><span class="o">=</span><span class="n">protein</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">idxnames</span><span class="o">=</span><span class="n">idxnames</span><span class="p">,</span> + <span class="n">colnames</span><span class="o">=</span><span class="n">colnames</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">'sym'</span><span class="p">],</span> + <span class="n">path</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"path"</span><span class="p">),</span> + <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort</span> <span class="k">else</span> <span class="kc">None</span> + <span class="n">distmap</span> <span class="o">=</span> <span class="n">ResMap</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="s1">'distance'</span><span class="p">,</span> + <span class="n">seqidx</span><span class="o">=</span><span class="n">protein</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">idxnames</span><span class="o">=</span><span class="n">idxnames</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"path"</span><span class="p">),</span> + <span class="n">colnames</span><span class="o">=</span><span class="n">colnames</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">'sym'</span><span class="p">],</span> + <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span> <span class="o">==</span> <span class="s2">"metapsicovhb"</span> <span class="k">else</span> <span class="kc">None</span> + + <span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">contact</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contactlist</span><span class="p">):</span> + <span class="n">contact_id</span> <span class="o">=</span> <span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span> + <span class="n">resid1</span><span class="p">,</span> <span class="n">resid2</span> <span class="o">=</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> + <span class="n">dist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">distlist</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">distlist</span> <span class="k">else</span> <span class="kc">None</span> + + <span class="c1"># Res id start from 0 in res-res map</span> + <span class="n">residx1</span> <span class="o">=</span> <span class="n">contactmap</span><span class="o">.</span><span class="n">index</span><span class="p">[</span><span class="n">resid1</span> <span class="o">-</span> <span class="n">offset</span><span class="p">]</span> + <span class="n">residx2</span> <span class="o">=</span> <span class="n">contactmap</span><span class="o">.</span><span class="n">index</span><span class="p">[</span><span class="n">resid2</span> <span class="o">-</span> <span class="n">offset</span><span class="p">]</span> + + <span class="k">if</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">residx1</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"-"</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span> <span class="o">!=</span> <span class="n">resid1</span><span class="p">)</span> <span class="ow">or</span> \ + <span class="p">(</span><span class="n">resid2</span> <span class="o">!=</span> <span class="nb">int</span><span class="p">(</span><span class="n">residx2</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"-"</span><span class="p">)[</span><span class="mi">0</span><span class="p">])):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Wrong resid humanidx (</span><span class="si">%d</span><span class="s2">, </span><span class="si">%d</span><span class="s2">) in contact (</span><span class="si">%d</span><span class="s2">) is "</span> + <span class="s2">"not the same in resmap (</span><span class="si">%s</span><span class="s2">, </span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> + <span class="n">resid1</span><span class="p">,</span> <span class="n">resid2</span><span class="p">,</span> <span class="n">contact_id</span><span class="p">,</span> + <span class="n">residx1</span><span class="p">,</span> <span class="n">residx2</span><span class="p">)</span> + + <span class="n">contactmap</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="n">residx1</span><span class="p">,</span> <span class="n">residx2</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort</span><span class="p">:</span> + <span class="n">scoremap</span><span class="o">.</span><span class="n">sort_list</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">resid1</span> <span class="o">-</span> <span class="n">offset</span><span class="p">,</span> <span class="n">resid2</span> <span class="o">-</span> <span class="n">offset</span><span class="p">))</span> + <span class="n">scoremap</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="n">residx1</span><span class="p">,</span> <span class="n">residx2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">scorelist</span><span class="p">[</span><span class="n">idx</span><span class="p">])</span> + <span class="k">if</span> <span class="n">distmap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">distmap</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="n">residx1</span><span class="p">,</span> <span class="n">residx2</span><span class="p">,</span> <span class="n">dist</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> contact map:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> <span class="n">contactmap</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span> <span class="o">=</span> <span class="n">contactmap</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> score map:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> <span class="n">scoremap</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"scoremap"</span><span class="p">]</span> <span class="o">=</span> <span class="n">scoremap</span> + <span class="k">if</span> <span class="n">distmap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"distmap"</span><span class="p">]</span> <span class="o">=</span> <span class="n">distmap</span></div></div> + + +<div class="viewcode-block" id="PDBFile"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.PDBFile">[docs]</a><span class="k">class</span> <span class="nc">PDBFile</span><span class="p">(</span><span class="n">MapFile</span><span class="p">):</span> + <span class="sd">"""PDB file"""</span> + <span class="n">pdbreg</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^(?P<record>ATOM |HETATM)(?P<serial>[\s\w]</span><span class="si">{5}</span><span class="s1">)'</span> + <span class="sa">r</span><span class="s1">'\s(?P<name>[\s\w]</span><span class="si">{4}</span><span class="s1">)'</span> + <span class="sa">r</span><span class="s1">'(?P<altLoc>[\s\w])'</span> + <span class="sa">r</span><span class="s1">'(?P<resName>\w</span><span class="si">{3}</span><span class="s1">)\s(?P<chainID>\w)'</span> + <span class="sa">r</span><span class="s1">'(?P<resSeq>[\s\w]</span><span class="si">{4}</span><span class="s1">)(?P<iCode>[\s\w])'</span> + <span class="sa">r</span><span class="s1">'\s</span><span class="si">{3}</span><span class="s1">(?P<x>[\s\d-]</span><span class="si">{4}</span><span class="s1">\.\d</span><span class="si">{3}</span><span class="s1">)(?P<y>[\s\d-]</span><span class="si">{4}</span><span class="s1">\.\d</span><span class="si">{3}</span><span class="s1">)'</span> + <span class="sa">r</span><span class="s1">'(?P<z>[\s\d-]</span><span class="si">{4}</span><span class="s1">\.\d</span><span class="si">{3}</span><span class="s1">)'</span> + <span class="sa">r</span><span class="s1">'(?P<occupancy>[\s\d-]</span><span class="si">{3}</span><span class="s1">\.\d</span><span class="si">{2}</span><span class="s1">)'</span> + <span class="sa">r</span><span class="s1">'(?P<tempFactor>[\s\d-]</span><span class="si">{3}</span><span class="s1">\.\d</span><span class="si">{2}</span><span class="s1">)'</span> + <span class="sa">r</span><span class="s1">'\s</span><span class="si">{10}</span><span class="s1">(?P<element>[\s\w]</span><span class="si">{2}</span><span class="s1">)'</span> + <span class="sa">r</span><span class="s1">'(?P<charge>[\s\w]</span><span class="si">{2}</span><span class="s1">)'</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="c1"># TODO: use PDB object in aria</span> + <span class="c1"># TODO: write dataframe in a separated file</span> + <span class="bp">self</span><span class="o">.</span><span class="n">check_type</span> <span class="o">=</span> <span class="kc">False</span> + <span class="nb">super</span><span class="p">(</span><span class="n">PDBFile</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">regex</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pdbreg</span><span class="p">,</span> <span class="n">filetype</span><span class="o">=</span><span class="s2">"pdb"</span><span class="p">,</span> + <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> + +<div class="viewcode-block" id="PDBFile.create_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.PDBFile.create_map">[docs]</a> <span class="k">def</span> <span class="nf">create_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protein</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="n">groupby_method</span><span class="o">=</span><span class="s2">"min"</span><span class="p">,</span> <span class="n">scsc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">flaglist</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> protein :</span> +<span class="sd"> contactdef:</span> +<span class="sd"> groupby_method :</span> +<span class="sd"> (Default value = "min")</span> +<span class="sd"> scsc: </span> +<span class="sd"> (Default value = None)</span> +<span class="sd"> flaglist :</span> +<span class="sd"> (Default value = None)</span> +<span class="sd"> sym: </span> +<span class="sd"> (Default value = True)</span> +<span class="sd"> path :</span> +<span class="sd"> (Default value = "")</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">resmap</span> <span class="o">=</span> <span class="n">ResAtmMap</span><span class="p">(</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">mtype</span><span class="o">=</span><span class="s1">'distance'</span><span class="p">,</span> + <span class="n">flaglist</span><span class="o">=</span><span class="n">flaglist</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> + <span class="n">seqidx</span><span class="o">=</span><span class="n">protein</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">filetype</span><span class="p">)</span> + <span class="c1"># noinspection PyTypeChecker</span> + <span class="n">resmap</span><span class="p">[:]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">update_map</span><span class="p">(</span><span class="n">resmap</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="n">sym</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"pdb distance map:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">resmap</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"alldistmap"</span><span class="p">]</span> <span class="o">=</span> <span class="n">resmap</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"distmap"</span><span class="p">]</span> <span class="o">=</span> <span class="n">resmap</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="n">groupby</span><span class="o">=</span><span class="n">groupby_method</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"allcontactmap"</span><span class="p">]</span> <span class="o">=</span> <span class="n">resmap</span><span class="o">.</span><span class="n">contact_map</span><span class="p">(</span> + <span class="n">contactdef</span><span class="o">=</span><span class="n">contactdef</span><span class="p">,</span> <span class="n">scsc_min</span><span class="o">=</span><span class="n">scsc</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapdict</span><span class="p">[</span><span class="s2">"allcontactmap"</span><span class="p">]</span><span class="o">.</span><span class="n">reduce</span><span class="p">()</span></div> + +<div class="viewcode-block" id="PDBFile.update_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.PDBFile.update_map">[docs]</a> <span class="k">def</span> <span class="nf">update_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resmap</span><span class="p">,</span> <span class="n">sym</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> resmap :</span> +<span class="sd"> param sym:</span> +<span class="sd"> sym :</span> +<span class="sd"> (Default value = True)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Map only on heavy atoms</span> + <span class="c1"># TODO: check if same sequence in pdb file</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating distance map with pdb file"</span><span class="p">)</span> + <span class="n">newmap</span> <span class="o">=</span> <span class="n">resmap</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> + <span class="n">heavylist</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">error_list</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> + <span class="k">for</span> <span class="n">atom</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">:</span> + <span class="k">if</span> <span class="n">resmap</span><span class="o">.</span><span class="n">heavy_reg</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atom</span><span class="p">][</span><span class="s1">'name'</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()):</span> + <span class="n">heavylist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">atom</span><span class="p">)</span> + + <span class="c1"># For each heavy atom</span> + <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">atomx</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">heavylist</span><span class="p">):</span> + <span class="k">for</span> <span class="n">atomy</span> <span class="ow">in</span> <span class="n">heavylist</span><span class="p">[</span><span class="n">x</span><span class="p">:]:</span> + <span class="c1"># TODO: Check first residue number in pdb file</span> + <span class="n">indx</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%03d</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomx</span><span class="p">][</span><span class="s1">'resSeq'</span><span class="p">]),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomx</span><span class="p">][</span><span class="s1">'resName'</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()),</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomx</span><span class="p">][</span><span class="s1">'name'</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="n">indy</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%03d</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomy</span><span class="p">][</span><span class="s1">'resSeq'</span><span class="p">]),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomy</span><span class="p">][</span><span class="s1">'resName'</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()),</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomy</span><span class="p">][</span><span class="s1">'name'</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> + <span class="n">coordx</span> <span class="o">=</span> <span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomx</span><span class="p">][</span><span class="s1">'x'</span><span class="p">]),</span> + <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomx</span><span class="p">][</span><span class="s1">'y'</span><span class="p">]),</span> + <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomx</span><span class="p">][</span><span class="s1">'z'</span><span class="p">]))</span> + <span class="n">coordy</span> <span class="o">=</span> <span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomy</span><span class="p">][</span><span class="s1">'x'</span><span class="p">]),</span> + <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomy</span><span class="p">][</span><span class="s1">'y'</span><span class="p">]),</span> + <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="n">atomy</span><span class="p">][</span><span class="s1">'z'</span><span class="p">]))</span> + + <span class="n">dist</span> <span class="o">=</span> <span class="n">distance</span><span class="o">.</span><span class="n">euclidean</span><span class="p">(</span><span class="n">coordx</span><span class="p">,</span> <span class="n">coordy</span><span class="p">)</span> + <span class="k">if</span> <span class="n">indx</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">resmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="s2">"residuex"</span><span class="p">))</span>\ + <span class="ow">and</span> <span class="n">indy</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">resmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="s2">"residuex"</span><span class="p">)):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Update distance value (</span><span class="si">%s</span><span class="s2">, </span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">indx</span><span class="p">,</span> <span class="n">indy</span><span class="p">)</span> + <span class="n">newmap</span><span class="o">.</span><span class="n">at</span><span class="p">[</span><span class="n">indx</span><span class="p">,</span> <span class="n">indy</span><span class="p">]</span> <span class="o">=</span> <span class="n">dist</span> + <span class="k">if</span> <span class="n">sym</span><span class="p">:</span> + <span class="c1"># If symmetric matrix</span> + <span class="n">newmap</span><span class="o">.</span><span class="n">at</span><span class="p">[</span><span class="n">indy</span><span class="p">,</span> <span class="n">indx</span><span class="p">]</span> <span class="o">=</span> <span class="n">dist</span> + <span class="k">elif</span> <span class="n">indx</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">resmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="s2">"residuex"</span><span class="p">)):</span> + <span class="n">error_list</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">indx</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">elif</span> <span class="n">indy</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">resmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="s2">"residuex"</span><span class="p">)):</span> + <span class="n">error_list</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">indy</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">if</span> <span class="n">error_list</span><span class="p">:</span> + <span class="c1"># Listing related humanidx in the initial df</span> + <span class="n">idxlist</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">resmap</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="s2">"residuex"</span><span class="p">))</span> + <span class="n">erridx</span> <span class="o">=</span> <span class="p">[</span><span class="n">idx</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"-"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">error_list</span><span class="p">)]</span> + <span class="n">missidx</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="n">idx</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="n">idxlist</span> + <span class="k">if</span> <span class="n">idx</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"-"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">erridx</span><span class="p">]))</span> + <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="n">missidx</span><span class="p">:</span> + <span class="n">newmap</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">if</span> <span class="n">sym</span><span class="p">:</span> + <span class="n">newmap</span><span class="o">.</span><span class="n">loc</span><span class="p">[:][</span><span class="n">idx</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Can't update pdb distance map for pos in pdb file "</span> + <span class="s2">"</span><span class="si">%s</span><span class="s2"> with </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">error_list</span><span class="p">),</span> <span class="n">missidx</span><span class="p">)</span> + <span class="k">return</span> <span class="n">newmap</span></div></div> + + +<div class="viewcode-block" id="DistanceMapFile"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.DistanceMapFile">[docs]</a><span class="k">class</span> <span class="nc">DistanceMapFile</span><span class="p">(</span><span class="n">MapFile</span><span class="p">):</span> + <span class="sd">"""Distance matrix file"""</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> <span class="n">filetype</span><span class="p">):</span> + <span class="nb">super</span><span class="p">(</span><span class="n">MapFile</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="n">filetype</span><span class="p">)</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span> + +<div class="viewcode-block" id="DistanceMapFile.create_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.DistanceMapFile.create_map">[docs]</a> <span class="k">def</span> <span class="nf">create_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aa_seq</span><span class="p">,</span> <span class="n">contactdef</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> aa_seq :</span> +<span class="sd"> param contactdef:</span> +<span class="sd"> kwargs :</span> +<span class="sd"> return:</span> +<span class="sd"> contactdef :</span> +<span class="sd"> </span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">pass</span></div> + + <span class="c1"># Native dist</span> +<div class="viewcode-block" id="DistanceMapFile.update_map"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.DistanceMapFile.update_map">[docs]</a> <span class="k">def</span> <span class="nf">update_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resmap</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> resmap :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">pass</span></div></div> + <span class="c1"># Construit map avec la liste de residus + infos de distance du fichier</span> + <span class="c1"># return DistanceMap</span> + + +<div class="viewcode-block" id="MapFileListReader"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.MapFileListReader">[docs]</a><span class="k">class</span> <span class="nc">MapFileListReader</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Reader class for Map files"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cont_def</span><span class="o">=</span><span class="mf">5.0</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> cont_def: float, optional</span> +<span class="sd"> Contact threshold used to filter native contacts (if reference</span> +<span class="sd"> structure given)</span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maps</span> <span class="o">=</span> <span class="p">[]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">contactdef</span> <span class="o">=</span> <span class="n">cont_def</span> + +<div class="viewcode-block" id="MapFileListReader.clear"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.MapFileListReader.clear">[docs]</a> <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Initiatize object from scratch object"""</span> + <span class="c1"># TODO: Init supprime bien les fichiers du cache ?</span> + <span class="bp">self</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contactdef</span><span class="p">)</span></div> + + <span class="k">def</span> <span class="nf">_add_maps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">maps</span><span class="p">,</span> <span class="n">maptypes</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Add Map file to the mapfile reader</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> maps : :obj: `list` of :obj: `str`</span> +<span class="sd"> List of Map file paths</span> +<span class="sd"> maptypes : :obj: `list` of :obj: `str`, optional</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">maps</span> <span class="o">=</span> <span class="p">[</span><span class="n">maps</span><span class="p">]</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">maps</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">list</span> <span class="k">else</span> <span class="n">maps</span> + <span class="n">maptypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">maptypes</span><span class="p">]</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span> + <span class="n">maptypes</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">list</span> <span class="k">else</span> <span class="n">maptypes</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">maptypes</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">maps</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">maptypes</span><span class="p">):</span> + <span class="n">maptypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">_</span><span class="p">)[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">maps</span><span class="p">]</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Reader focused on file(s) </span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">maps</span><span class="p">,</span> + <span class="n">maptypes</span><span class="p">)</span> + <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">filepath</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">maps</span><span class="p">):</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span> + <span class="c1"># TODO: check_type functionstr</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Adding </span><span class="si">%s</span><span class="s2"> file to watchlist"</span><span class="p">,</span> <span class="n">maptypes</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> + <span class="k">if</span> <span class="p">(</span><span class="n">maptypes</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"pdb"</span> <span class="ow">and</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">filepath</span><span class="p">)[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span> <span class="o">==</span> <span class="s2">"pdb"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span> + <span class="n">maptypes</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"distfile"</span> <span class="ow">and</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">filepath</span><span class="p">)[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:]</span> <span class="o">==</span> <span class="s2">"pdb"</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maps</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">PDBFile</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maps</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ContactMapFile</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> + <span class="n">maptypes</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> + <span class="c1"># else:</span> + <span class="c1"># self.maps.append(DistanceMapFile(filepath,</span> + <span class="c1"># maptypes[i]))</span> + <span class="c1"># TODO: DistanceMapFile condition</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">maps</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">regex</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Can't read </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">filepath</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">maps</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> + +<div class="viewcode-block" id="MapFileListReader.read"><a class="viewcode-back" href="../../ariaec.html#ariaec.reader.MapFileListReader.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">maps</span><span class="p">,</span> <span class="n">maptypes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">protein</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">scsc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Read contact map files. The generated maps will be accessible in</span> +<span class="sd"> `self.maps`</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> maps : :obj: `list` of :obj: `str`</span> +<span class="sd"> List of Map file paths</span> +<span class="sd"> maptypes : :obj: `list` of :obj: `str`, optional</span> +<span class="sd"> List of Map file types (Default value = None)</span> +<span class="sd"> protein : ariaec.protein.Protein object or None, optional</span> +<span class="sd"> (Default value = None)</span> +<span class="sd"> scsc : dict, optional</span> +<span class="sd"> Optional dictionary used for Atom Map reduction by selecting only</span> +<span class="sd"> one atom in the side chain. (Default value = None)</span> +<span class="sd"> kwargs :</span> +<span class="sd"> Optional arguments used for MapFile readers</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_add_maps</span><span class="p">(</span><span class="n">maps</span><span class="p">,</span> <span class="n">maptypes</span><span class="o">=</span><span class="n">maptypes</span><span class="p">)</span> + <span class="k">for</span> <span class="n">fo</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">maps</span><span class="p">:</span> + <span class="n">fo</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">protein</span><span class="o">=</span><span class="n">protein</span><span class="p">,</span> <span class="n">contactdef</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">contactdef</span><span class="p">,</span> + <span class="n">scsc</span><span class="o">=</span><span class="n">scsc</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/settings.html b/examples-dev/olds/_build/html/_modules/ariaec/settings.html new file mode 100644 index 0000000..6091331 --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/settings.html @@ -0,0 +1,543 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.settings — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.settings</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.settings</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Settings section</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> + +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">logging</span> +<span class="kn">import</span> <span class="nn">pickle</span> +<span class="kn">import</span> <span class="nn">collections</span> +<span class="c1"># noinspection PyCompatibility</span> +<span class="kn">from</span> <span class="nn">ConfigParser</span> <span class="k">import</span> <span class="n">ConfigParser</span> +<span class="kn">import</span> <span class="nn">pkg_resources</span> <span class="k">as</span> <span class="nn">pkgr</span> + +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">format_dict</span> + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="Setting"><a class="viewcode-back" href="../../ariaec.html#ariaec.settings.Setting">[docs]</a><span class="k">class</span> <span class="nc">Setting</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Main setting object with args and config section"""</span> + + <span class="c1"># TODO: merge config and args</span> + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">()</span> + + <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">):</span> + <span class="k">if</span> <span class="n">item</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">item</span><span class="p">]</span> + <span class="k">elif</span> <span class="n">item</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="n">item</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="s2">"Setting object</span><span class="se">\n</span><span class="s2"> config: </span><span class="si">%s</span><span class="se">\n</span><span class="s2"> args : </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span></div> + + +<div class="viewcode-block" id="Settings"><a class="viewcode-back" href="../../ariaec.html#ariaec.settings.Settings">[docs]</a><span class="k">class</span> <span class="nc">Settings</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Group settings with each section corresponding to a Setting object"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sections</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_sections</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">sections</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">configfile</span> <span class="o">=</span> <span class="s1">''</span> + <span class="k">for</span> <span class="n">section</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sections</span><span class="p">:</span> + <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">,</span> <span class="n">Setting</span><span class="p">())</span> + +<div class="viewcode-block" id="Settings.load_config"><a class="viewcode-back" href="../../ariaec.html#ariaec.settings.Settings.load_config">[docs]</a> <span class="k">def</span> <span class="nf">load_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">configpath</span><span class="p">,</span> <span class="n">pkg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Use ConfigParser module to load config sections</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> pkg :</span> +<span class="sd"> file is inside the package (Default value = False)</span> +<span class="sd"> configpath :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">configpath</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">configfile</span> <span class="o">=</span> <span class="n">configpath</span> + <span class="k">elif</span> <span class="ow">not</span> <span class="n">pkg</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Configuration file not found (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">configpath</span><span class="p">)</span> + <span class="k">return</span> <span class="kc">None</span> + <span class="c1"># config = SafeConfigParser(allow_no_value=True)</span> + <span class="n">config</span> <span class="o">=</span> <span class="n">ConfigParser</span><span class="p">(</span><span class="n">allow_no_value</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="k">if</span> <span class="n">pkg</span><span class="p">:</span> + <span class="k">with</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_stream</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">configpath</span><span class="p">)</span> <span class="k">as</span> <span class="n">conf</span><span class="p">:</span> + <span class="n">config</span><span class="o">.</span><span class="n">readfp</span><span class="p">(</span><span class="n">conf</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">config</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">configpath</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> + <span class="k">for</span> <span class="n">section</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">sections</span><span class="p">():</span> + <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">):</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Formatting items of </span><span class="si">%s</span><span class="s2"> section"</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span> + <span class="n">tmp</span> <span class="o">=</span> <span class="n">format_dict</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">config</span><span class="o">.</span><span class="n">items</span><span class="p">(</span><span class="n">section</span><span class="p">)))</span> + <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">tmp</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> config updated"</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">.</span><span class="si">%s</span><span class="s2"> : </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">section</span><span class="p">,</span> + <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Unknow config section </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span></div> + +<div class="viewcode-block" id="Settings.write_config"><a class="viewcode-back" href="../../ariaec.html#ariaec.settings.Settings.write_config">[docs]</a> <span class="k">def</span> <span class="nf">write_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Write config of all sections into another file</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> filename :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Writing .ini file (</span><span class="si">%s</span><span class="s2">)"</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span> + <span class="n">config</span> <span class="o">=</span> <span class="n">ConfigParser</span><span class="p">(</span><span class="n">allow_no_value</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="n">iniout</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">"w"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">section</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sections</span><span class="p">:</span> + <span class="n">config</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="n">section</span><span class="p">)</span> + <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">):</span> + <span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span><span class="o">.</span><span class="n">config</span><span class="p">:</span> + <span class="n">config</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">section</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">opt</span><span class="p">),</span> + <span class="nb">str</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">opt</span><span class="p">)))</span> + <span class="n">config</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">iniout</span><span class="p">)</span></div> + + <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">return</span> <span class="s2">"<Settings object></span><span class="se">\n</span><span class="s2"> sections: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sections</span></div> + + +<span class="c1"># TODO: AriaEcSettings should probably be an astract class.</span> +<div class="viewcode-block" id="AriaEcSettings"><a class="viewcode-back" href="../../ariaec.html#ariaec.settings.AriaEcSettings">[docs]</a><span class="k">class</span> <span class="nc">AriaEcSettings</span><span class="p">(</span><span class="n">Settings</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Settings object for ariaec</span> +<span class="sd"> @DynamicAttrs</span> +<span class="sd"> """</span> + <span class="c1"># ss_dist = os.path.join(os.path.dirname(os.path.realpath(__file__)),</span> + <span class="c1"># 'conf/ss_dist.txt')</span> + <span class="c1"># TODO: move these constant variable in objects which can read these file !!</span> + <span class="c1"># TODO: Baseclass inspired from this class and ariabase class. All</span> + <span class="c1"># objects in this package should extend the base object</span> + <span class="n">ARIAPROJ_TEMPLATE</span> <span class="o">=</span> <span class="s1">'templates/aria_project_v2.3.0.xml'</span> + <span class="n">SS_DIST</span> <span class="o">=</span> <span class="s1">'data/ss_dist.txt'</span> + <span class="n">SCSC_MIN</span> <span class="o">=</span> <span class="s1">'data/scsc_min.p'</span> + <span class="n">INTERLOWERBOUNDS</span> <span class="o">=</span> <span class="s1">'data/pdbdists/lowerbounds.inter.p'</span> + <span class="n">INTERTARGET</span> <span class="o">=</span> <span class="s1">'data/pdbdists/targetdists.inter.p'</span> + <span class="n">INTERUPPERBOUNDS</span> <span class="o">=</span> <span class="s1">'data/pdbdists/upperbounds.inter.p'</span> + <span class="n">INTRALOWERBOUNDS</span> <span class="o">=</span> <span class="s1">'data/pdbdists/lowerbounds.intra.p'</span> + <span class="n">INTRATARGET</span> <span class="o">=</span> <span class="s1">'data/pdbdists/targetdists.intra.p'</span> + <span class="n">INTRAUPPERBOUNDS</span> <span class="o">=</span> <span class="s1">'data/pdbdists/upperbounds.intra.p'</span> + <span class="c1"># TODO: If aria installed in site-packages, use topallhdg file from aria !</span> + <span class="n">TOPO</span> <span class="o">=</span> <span class="s1">'data/topallhdg5.3.pro'</span> + <span class="c1"># TODO: Should define sections in one object, actually we have to define</span> + <span class="c1"># sections in settings and also command objects ...</span> + <span class="n">SECTIONS</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"main"</span><span class="p">,</span> <span class="s2">"setup"</span><span class="p">,</span> <span class="s2">"maplot"</span><span class="p">,</span> <span class="s2">"bbconv"</span><span class="p">,</span> <span class="s2">"contactdef"</span><span class="p">,</span> + <span class="s2">"pdbqual"</span><span class="p">,</span> <span class="s2">"pdbdist"</span><span class="p">,</span> <span class="s2">"analysis"</span><span class="p">,</span> <span class="s2">"tbl2xml"</span><span class="p">,</span> <span class="s2">"pdbstat"</span><span class="p">)</span> + <span class="c1"># TODO: options in main section should be accessible from all sections ! DO</span> + <span class="c1"># not use this a other section as it is done actually</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Initiate settings with name related to a command</span> +<span class="sd"> :param name:</span> +<span class="sd"> """</span> + <span class="nb">super</span><span class="p">(</span><span class="n">AriaEcSettings</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SECTIONS</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_infra</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_scsc_min</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_ssdist</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_template</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> + + <span class="k">def</span> <span class="nf">_up_infra</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">""" """</span> + <span class="k">for</span> <span class="n">dirpath</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">infra</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"set </span><span class="si">%s</span><span class="s2"> dir: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> + <span class="n">dirpath</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_infra</span><span class="p">[</span><span class="n">dirpath</span><span class="p">]</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outdir</span><span class="p">,</span> <span class="n">dirpath</span><span class="p">)</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">infra</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Infrastructure for a specific command</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">"setup"</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_infra</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_infra</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"xml"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"tbl"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"etc"</span><span class="p">:</span> <span class="s2">""</span><span class="p">}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_up_infra</span><span class="p">()</span> + <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">"maplot"</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_infra</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_infra</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"graphics"</span><span class="p">:</span> <span class="s2">""</span><span class="p">}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_up_infra</span><span class="p">()</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_infra</span> + + <span class="nd">@infra</span><span class="o">.</span><span class="n">setter</span> + <span class="k">def</span> <span class="nf">infra</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Change infra root</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> root :</span> +<span class="sd"> return:</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outdir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">root</span><span class="p">)</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">infra</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_up_infra</span><span class="p">()</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">ssdist</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Get distance file for secondary structures in the package or in config</span> +<span class="sd"> file</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ssdist</span><span class="p">:</span> + <span class="k">if</span> <span class="bp">self</span><span class="p">[</span><span class="s2">"ss_dist_file"</span><span class="p">]</span> <span class="ow">and</span> \ + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="s2">"ss_dist_file"</span><span class="p">]):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_ssdist</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s2">"ss_dist_file"</span><span class="p">]</span> + <span class="k">else</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_ssdist</span> <span class="o">=</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SS_DIST</span><span class="p">)</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ssdist</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">template</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Get template files in config file or in the package</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_template</span><span class="p">:</span> + <span class="n">templatepath</span> <span class="o">=</span> <span class="s2">"templates/aria_project_v</span><span class="si">%s</span><span class="s2">.xml"</span> <span class="o">%</span> \ + <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="s2">"ariaproject_template"</span><span class="p">])</span> + <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">pkgr</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">templatepath</span><span class="p">)):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_template</span> <span class="o">=</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">templatepath</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Template version for aria project (</span><span class="si">%s</span><span class="s2">) is not "</span> + <span class="s2">"supported"</span><span class="p">,</span> <span class="bp">self</span><span class="p">[</span><span class="s2">"ariaproject_template"</span><span class="p">])</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_template</span> <span class="o">=</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">ARIAPROJ_TEMPLATE</span><span class="p">)</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_template</span> + + <span class="nd">@property</span> + <span class="k">def</span> <span class="nf">scsc_min</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Get contact index for side chains in package or config file</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scsc_min</span><span class="p">:</span> + <span class="k">try</span><span class="p">:</span> + <span class="c1"># Read scsc_min_file given in config.ini</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="s2">"scsc_min_file"</span><span class="p">])</span> <span class="k">as</span> <span class="n">scsc</span><span class="p">:</span> + <span class="n">scsc_min</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">scsc</span><span class="p">)</span> + <span class="k">except</span> <span class="p">(</span><span class="ne">IOError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span> + <span class="c1"># If file can't be open or given key is invalid, load default</span> + <span class="c1"># package file</span> + <span class="k">with</span> <span class="n">pkgr</span><span class="o">.</span><span class="n">resource_stream</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SCSC_MIN</span><span class="p">)</span> <span class="k">as</span> <span class="n">scsc</span><span class="p">:</span> + <span class="n">scsc_min</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">scsc</span><span class="p">)</span> + <span class="n">scsc_min</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span> + <span class="p">(</span><span class="n">aa1</span><span class="p">,</span> <span class="nb">dict</span><span class="p">((</span><span class="n">aa2</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">atm_pair</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)))</span> + <span class="k">for</span> <span class="n">aa2</span><span class="p">,</span> <span class="n">atm_pair</span> <span class="ow">in</span> <span class="n">atm_pairs</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span> + <span class="k">for</span> <span class="n">aa1</span><span class="p">,</span> <span class="n">atm_pairs</span> <span class="ow">in</span> <span class="n">scsc_min</span><span class="o">.</span><span class="n">items</span><span class="p">())</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_scsc_min</span> <span class="o">=</span> <span class="n">scsc_min</span> + <span class="k">return</span> <span class="n">scsc_min</span> + <span class="k">else</span><span class="p">:</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scsc_min</span> + +<div class="viewcode-block" id="AriaEcSettings.make_infra"><a class="viewcode-back" href="../../ariaec.html#ariaec.settings.AriaEcSettings.make_infra">[docs]</a> <span class="k">def</span> <span class="nf">make_infra</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""Generate infrastructure"""</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Making output directories"</span><span class="p">)</span> + <span class="k">for</span> <span class="n">direct</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">infra</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Create </span><span class="si">%s</span><span class="s2"> directory"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">infra</span><span class="p">[</span><span class="n">direct</span><span class="p">])</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">infra</span><span class="p">[</span><span class="n">direct</span><span class="p">]):</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">infra</span><span class="p">[</span><span class="n">direct</span><span class="p">]))</span></div> + +<div class="viewcode-block" id="AriaEcSettings.load_config"><a class="viewcode-back" href="../../ariaec.html#ariaec.settings.AriaEcSettings.load_config">[docs]</a> <span class="k">def</span> <span class="nf">load_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">configpath</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> </span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> configpath :</span> +<span class="sd"> param kwargs:</span> +<span class="sd"> **kwargs :</span> +<span class="sd"> </span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="nb">super</span><span class="p">(</span><span class="n">AriaEcSettings</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">load_config</span><span class="p">(</span><span class="n">configpath</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div> + + <span class="k">def</span> <span class="nf">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">):</span> + <span class="k">for</span> <span class="n">section</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sections</span><span class="p">:</span> + <span class="k">if</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span><span class="o">.</span><span class="n">args</span><span class="p">:</span> + <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">item</span><span class="p">]</span> + <span class="k">elif</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span><span class="o">.</span><span class="n">config</span><span class="p">:</span> + <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="n">item</span><span class="p">]</span></div> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/examples-dev/olds/_build/html/_modules/ariaec/setup.html b/examples-dev/olds/_build/html/_modules/ariaec/setup.html new file mode 100644 index 0000000..31b0401 --- /dev/null +++ b/examples-dev/olds/_build/html/_modules/ariaec/setup.html @@ -0,0 +1,541 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>ariaec.setup — AriaEc 0.2 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="../../genindex.html"/> + <link rel="search" title="Search" href="../../search.html"/> + <link rel="top" title="AriaEc 0.2 documentation" href="../../index.html"/> + <link rel="up" title="Module code" href="../index.html"/> + + + <script src="../../_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="../../index.html" class="icon icon-home"> AriaEc + + + + </a> + + + + + <div class="version"> + 0.2 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">AriaEc</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">Module code</a> »</li> + + <li>ariaec.setup</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <h1>Source code for ariaec.setup</h1><div class="highlight"><pre> +<span></span><span class="c1"># coding=utf-8</span> +<span class="sd">"""</span> +<span class="sd"> Input/Output aria_ec scripts</span> +<span class="sd">"""</span> +<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span> + +<span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">json</span> +<span class="kn">import</span> <span class="nn">logging</span> + +<span class="kn">from</span> <span class="nn">.protein</span> <span class="k">import</span> <span class="n">Protein</span> +<span class="kn">from</span> <span class="nn">.reader</span> <span class="k">import</span> <span class="n">MapFileListReader</span> +<span class="kn">from</span> <span class="nn">.common</span> <span class="k">import</span> <span class="n">get_filename</span> +<span class="kn">from</span> <span class="nn">.protmap</span> <span class="k">import</span> <span class="n">MapFilter</span> +<span class="kn">from</span> <span class="nn">.converter</span> <span class="k">import</span> <span class="n">AriaEcXMLConverter</span> + +<span class="c1"># TODO: S'inspirer de pandas/__init__.py pour les dependances</span> + +<span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> + + +<div class="viewcode-block" id="AriaEcSetup"><a class="viewcode-back" href="../../ariaec.html#ariaec.setup.AriaEcSetup">[docs]</a><span class="k">class</span> <span class="nc">AriaEcSetup</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> + <span class="sd">"""Aria Ec Setup protocol"""</span> + + <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> :param settings:</span> +<span class="sd"> :return:</span> +<span class="sd"> """</span> + <span class="c1"># TODO: check_type settings (AriaEcSettings)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span> <span class="o">=</span> <span class="n">Protein</span><span class="p">(</span><span class="n">settings</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">=</span> <span class="s1">''</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reader</span> <span class="o">=</span> <span class="n">MapFileListReader</span><span class="p">(</span><span class="n">cont_def</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">contactdef</span><span class="o">.</span><span class="n">config</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">targetmaps</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">refmaps</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">hbmaps</span> <span class="o">=</span> <span class="kc">None</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filter</span> <span class="o">=</span> <span class="n">MapFilter</span><span class="p">(</span> + <span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">,</span> + <span class="n">nofilter</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"no_filter"</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">converter</span> <span class="o">=</span> <span class="n">AriaEcXMLConverter</span><span class="p">(</span><span class="n">settings</span><span class="p">)</span> + +<div class="viewcode-block" id="AriaEcSetup.run"><a class="viewcode-back" href="../../ariaec.html#ariaec.setup.AriaEcSetup.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> main method</span> +<span class="sd"> :return:</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Check input</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Settings:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">,</span> + <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Args:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> + <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">make_infra</span><span class="p">()</span> + <span class="c1"># -------------------------------------------------------------------- #</span> + <span class="c1"># ----------------------------- Input -------------------------------- #</span> + <span class="c1"># -------------------------------------------------------------------- #</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">=</span> <span class="n">get_filename</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> + <span class="c1"># ------------------------- Load sequence ---------------------------- #</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">set_aa_sequence</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"seq"</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> + <span class="c1"># -------------- Load secondary structure prediction ----------------- #</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sspred"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">set_sec_struct</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sspred"</span><span class="p">,</span> + <span class="kc">None</span><span class="p">),</span> + <span class="n">ssdist_filename</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">ssdist</span><span class="p">,</span> + <span class="n">ssidx</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"ssidx"</span><span class="p">,</span> <span class="kc">False</span><span class="p">))</span> + <span class="c1"># -------------------------------------------------------------------- #</span> + <span class="c1"># ---------------------------- Processing ---------------------------- #</span> + <span class="c1"># -------------------------------------------------------------------- #</span> + <span class="c1"># TODO: write submatrix in a file</span> + <span class="c1"># TODO: change read method in reader to __call__</span> + <span class="c1"># -------------------------- contact maps ---------------------------- #</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"infiles"</span><span class="p">),</span> + <span class="n">maptypes</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span> + <span class="s2">"contact_types"</span><span class="p">),</span> + <span class="n">protein</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> + <span class="n">groupby_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s1">'groupby_method'</span><span class="p">],</span> + <span class="n">scsc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">)</span> + <span class="k">for</span> <span class="n">mapfile</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">maps</span><span class="p">:</span> + <span class="c1"># fo need a maplot in order to wite XML dist restraints</span> + <span class="c1"># TODO: filter pour toutes les map de mapdict !! (fonction remove</span> + <span class="c1"># s'applique sur l'humanidx contenant les residus)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">mapfile</span><span class="o">.</span><span class="n">mapdict</span><span class="p">,</span> <span class="n">mapfile</span><span class="o">.</span><span class="n">filetype</span><span class="p">,</span> <span class="n">mapfile</span><span class="o">.</span><span class="n">contactlist</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> <span class="n">clashlist</span><span class="o">=</span><span class="n">mapfile</span><span class="o">.</span><span class="n">clashlist</span><span class="p">,</span> + <span class="n">outprefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">,</span> + <span class="n">outdir</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"etc"</span><span class="p">,</span> <span class="s1">''</span><span class="p">))</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="n">mapfile</span><span class="o">.</span><span class="n">filetype</span><span class="p">]</span> <span class="o">=</span> <span class="n">mapfile</span><span class="o">.</span><span class="n">mapdict</span> + + <span class="k">if</span> <span class="n">mapfile</span><span class="o">.</span><span class="n">filetype</span> <span class="o">!=</span> <span class="s2">"pdb"</span> <span class="ow">and</span> <span class="s2">"pdb"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">:</span> + <span class="n">mapfile</span><span class="o">.</span><span class="n">maplot</span><span class="o">.</span><span class="n">compareplot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="s2">"pdb"</span><span class="p">])</span> + + <span class="c1"># ---------------------------- target map ---------------------------- #</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"distfile"</span><span class="p">)</span> <span class="ow">and</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"distance_type"</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"distfile"</span><span class="p">:</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Loading target distance file"</span><span class="p">)</span> + <span class="c1"># Read distance file</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"distfile"</span><span class="p">),</span> + <span class="n">maptypes</span><span class="o">=</span><span class="s2">"distfile"</span><span class="p">,</span> + <span class="n">protein</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> + <span class="n">groupby_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'groupby_method'</span><span class="p">],</span> + <span class="n">scsc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">targetmaps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">targetdistmaps</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> <span class="n">distfile</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">maps</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Default targetmaps using config parameters</span> + <span class="bp">self</span><span class="o">.</span><span class="n">targetmaps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">targetdistmaps</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> + + <span class="c1"># ---------------------------- ref map ----------------------------- #</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ref"</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ref"</span><span class="p">),</span> + <span class="n">maptypes</span><span class="o">=</span><span class="s2">"pdb"</span><span class="p">,</span> + <span class="n">protein</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> + <span class="n">groupby_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'groupby_method'</span><span class="p">],</span> + <span class="n">scsc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">refmaps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">maps</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">mapdict</span> + + <span class="c1"># ---------------------------- hbond map ----------------------------- #</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"hb"</span><span class="p">)</span> <span class="ow">and</span> \ + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"longrange_hb"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> + <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"hb"</span><span class="p">),</span> + <span class="n">maptypes</span><span class="o">=</span><span class="s2">"metapsicovhb"</span><span class="p">,</span> + <span class="n">protein</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> + <span class="n">groupby_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'groupby_method'</span><span class="p">],</span> + <span class="n">scsc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">scsc_min</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">hbmaps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">maps</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">mapdict</span> + <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"longrange_hb"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> + <span class="c1"># Create HBMAP with naive metapsicov method</span> + <span class="c1"># Consider as hbond ec predicted between beta strand</span> + <span class="k">raise</span> <span class="ne">NotImplementedError</span> + + <span class="c1"># -------------------------------------------------------------------- #</span> + <span class="c1"># ------------------------------ Output ------------------------------ #</span> + + <span class="c1"># ----------------------------- SEQ file ----------------------------- #</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">write_seq</span><span class="p">(</span> + <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"etc"</span><span class="p">,</span> <span class="s1">''</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span> <span class="o">+</span> <span class="s2">".seq"</span><span class="p">))</span> + <span class="c1"># Load aria molecule object from seq file and convert it into xml format</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Load molecule file and convert it into xml format"</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">read_seq</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">seqfile_path</span><span class="p">)</span> + <span class="c1"># --------------------------- TBL restraints ------------------------- #</span> + <span class="c1"># Setting contact number limit for hbmap</span> + <span class="n">n_hb</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">)</span> <span class="o">*</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"nf_longrange_hb"</span><span class="p">))</span> + <span class="n">LOG</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Writing tbl files ..."</span><span class="p">)</span> + <span class="n">tbl_files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">write_tbl_restraints</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">,</span> <span class="n">hbmap</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">hbmaps</span><span class="p">,</span> <span class="n">n_hb</span><span class="o">=</span><span class="n">n_hb</span><span class="p">)</span> + + <span class="c1"># --------------------------- XML restraints ------------------------- #</span> + <span class="c1"># Setting contact number limit for map restraints (native, ec, ...)</span> + + <span class="n">dist_files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">write_maplist_restraints</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">targetmaps</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> + + <span class="c1"># --------------------------- XML SEQ file --------------------------- #</span> + <span class="n">xmlseq_file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">write_xmlseq</span><span class="p">()</span> + + <span class="c1"># ---------------------- ARIA XML project file ----------------------- #</span> + <span class="bp">self</span><span class="o">.</span><span class="n">converter</span><span class="o">.</span><span class="n">write_ariaproject</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">template</span><span class="p">,</span> + <span class="n">xmlseq_file</span><span class="p">,</span> <span class="n">dist_files</span><span class="p">,</span> <span class="n">tbl_files</span><span class="p">,</span> + <span class="n">desclist</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> + <span class="c1"># -------------------------------- etc ------------------------------- #</span> + <span class="bp">self</span><span class="o">.</span><span class="n">write_optional_files</span><span class="p">()</span></div> + +<div class="viewcode-block" id="AriaEcSetup.write_optional_files"><a class="viewcode-back" href="../../ariaec.html#ariaec.setup.AriaEcSetup.write_optional_files">[docs]</a> <span class="k">def</span> <span class="nf">write_optional_files</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Write filtered contacts & distance maps (.csv)</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="c1"># Indextableplus file (submatrix)</span> + <span class="c1"># Contacts_refined.out</span> + <span class="k">for</span> <span class="n">maptype</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="n">maptype</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"maplot"</span><span class="p">)</span><span class="o">.</span><span class="n">write_contacts</span><span class="p">(</span> + <span class="s2">"_"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">,</span> <span class="n">maptype</span><span class="p">,</span> <span class="s2">"filtered"</span><span class="p">)),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"etc"</span><span class="p">),</span> <span class="n">scoremap</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span> + <span class="n">maptype</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"scoremap"</span><span class="p">))</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="n">maptype</span><span class="p">][</span><span class="s2">"alldistmap"</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="n">maptype</span><span class="p">][</span><span class="s2">"alldistmap"</span><span class="p">]</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span> + <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">.distmap.csv"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"etc"</span><span class="p">),</span> + <span class="n">maptype</span><span class="p">))</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">refmaps</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_write_contacts</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">allresmap</span><span class="p">[</span><span class="n">maptype</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"filteredlist"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">protein</span><span class="o">.</span><span class="n">aa_sequence</span><span class="o">.</span><span class="n">sequence</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"etc"</span><span class="p">,</span> <span class="s1">''</span><span class="p">),</span> + <span class="s2">"_"</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">,</span> <span class="n">maptype</span><span class="p">,</span> <span class="s2">"filtered"</span><span class="p">)),</span> + <span class="n">ref</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">refmaps</span><span class="p">[</span><span class="s2">"maplot"</span><span class="p">],</span> + <span class="n">distmap</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">refmaps</span><span class="p">[</span><span class="s2">"distmap"</span><span class="p">])</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">refmaps</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">refmaps</span><span class="p">[</span><span class="s2">"alldistmap"</span><span class="p">]</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span> + <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">_</span><span class="si">%s</span><span class="s2">.distmap.csv"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">infra</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"etc"</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">outprefix</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">refmaps</span><span class="o">.</span><span class="n">filetype</span><span class="p">))</span></div> + + <span class="k">def</span> <span class="nf">_write_contacts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contacts_list</span><span class="p">,</span> <span class="n">seq</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">nc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> + <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">distmap</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Write contacts from contact_list (sorted !)</span> + +<span class="sd"> Parameters</span> +<span class="sd"> ----------</span> +<span class="sd"> contacts_list :</span> +<span class="sd"> param seq:</span> +<span class="sd"> out :</span> +<span class="sd"> param prefix:</span> +<span class="sd"> nc :</span> +<span class="sd"> param append: (Default value = None)</span> +<span class="sd"> ref :</span> +<span class="sd"> return: (Default value = None)</span> +<span class="sd"> seq :</span> +<span class="sd"> </span> +<span class="sd"> prefix :</span> +<span class="sd"> </span> +<span class="sd"> append :</span> +<span class="sd"> (Default value = False)</span> +<span class="sd"> distmap :</span> +<span class="sd"> (Default value = None)</span> + +<span class="sd"> Returns</span> +<span class="sd"> -------</span> + +<span class="sd"> </span> +<span class="sd"> """</span> + <span class="n">mapy</span> <span class="o">=</span> <span class="p">[]</span> + <span class="n">tp_count</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">filemode</span> <span class="o">=</span> <span class="s1">'a'</span> <span class="k">if</span> <span class="n">append</span> <span class="k">else</span> <span class="s1">'w'</span> + <span class="n">dist_desc</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\t</span><span class="s1">TP/FP</span><span class="se">\t</span><span class="s1">dist</span><span class="si">%s</span><span class="s1">(ref)'</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">setup</span><span class="o">.</span><span class="n">config</span><span class="p">[</span> + <span class="s2">"groupby_method"</span><span class="p">]</span> <span class="k">if</span> \ + <span class="n">distmap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> \ + <span class="k">else</span> <span class="s1">''</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">.contacts.txt"</span> <span class="o">%</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">prefix</span><span class="p">),</span> <span class="n">filemode</span><span class="p">)</span> <span class="k">as</span> <span class="n">outfile</span><span class="p">:</span> + <span class="k">if</span> <span class="ow">not</span> <span class="n">append</span><span class="p">:</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span> + <span class="sd">'''# resid1\tresid2\tres1\tres2%s\n'''</span> <span class="o">%</span> <span class="n">dist_desc</span><span class="p">)</span> + + <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">contacts_list</span><span class="p">,</span> <span class="s1">'keys'</span><span class="p">):</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="n">contacts_list</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nc</span> <span class="k">else</span> \ + <span class="n">contacts_list</span><span class="o">.</span><span class="n">keys</span><span class="p">()[:</span><span class="n">nc</span><span class="p">]</span> + <span class="n">d_type</span> <span class="o">=</span> <span class="kc">True</span> + <span class="k">else</span><span class="p">:</span> + <span class="c1"># Check if contacts is 2-tuple</span> + <span class="k">if</span> <span class="kc">False</span> <span class="ow">in</span> <span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">contacts_list</span><span class="p">]:</span> + <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">'Contact list must be 2-tuple !'</span><span class="p">)</span> + <span class="n">contacts</span> <span class="o">=</span> <span class="n">contacts_list</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nc</span> <span class="k">else</span> <span class="n">contacts_list</span><span class="p">[:</span><span class="n">nc</span><span class="p">]</span> + <span class="n">d_type</span> <span class="o">=</span> <span class="kc">False</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Contact list </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">contacts</span><span class="p">)</span> + <span class="k">for</span> <span class="n">contact</span> <span class="ow">in</span> <span class="n">contacts</span><span class="p">:</span> + + <span class="k">if</span> <span class="n">d_type</span><span class="p">:</span> + <span class="c1"># If dictionary</span> + <span class="n">resid1</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">contacts_list</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'res1_nb'</span><span class="p">))</span> + <span class="n">resid2</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">contacts_list</span><span class="p">[</span><span class="n">contact</span><span class="p">]</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="s1">'res2_nb'</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">resid1</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> + <span class="n">resid2</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">contact</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> + + <span class="n">LOG</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Contact </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">contact</span><span class="p">))</span> + <span class="k">if</span> <span class="n">distmap</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="n">dist</span> <span class="o">=</span> <span class="n">distmap</span><span class="o">.</span><span class="n">ix</span><span class="p">[(</span><span class="n">resid1</span><span class="p">,</span> <span class="n">resid2</span><span class="p">)]</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">dist</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'dist'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'atoms'</span><span class="p">:</span> <span class="s1">''</span><span class="p">}</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">resid1</span><span class="p">,</span> <span class="n">resid2</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mapy</span><span class="p">:</span> + <span class="n">mapy</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">resid1</span><span class="p">,</span> <span class="n">resid2</span><span class="p">))</span> + <span class="k">if</span> <span class="n">ref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> + <span class="k">if</span> <span class="n">ref</span><span class="o">.</span><span class="n">ix</span><span class="p">[(</span><span class="n">resid1</span><span class="p">,</span> <span class="n">resid2</span><span class="p">)]:</span> + <span class="n">asses</span> <span class="o">=</span> <span class="s1">'TP'</span> + <span class="n">tp_count</span> <span class="o">+=</span> <span class="mi">1</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">asses</span> <span class="o">=</span> <span class="s1">'FP'</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span> + <span class="s2">"</span><span class="si">%s</span><span class="se">\t</span><span class="si">%s</span><span class="se">\t</span><span class="si">%s</span><span class="se">\t</span><span class="si">%s</span><span class="se">\t</span><span class="si">%s</span><span class="se">\t</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">resid1</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> + <span class="n">resid2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> + <span class="n">seq</span><span class="p">[</span><span class="n">resid1</span><span class="p">],</span> + <span class="n">seq</span><span class="p">[</span><span class="n">resid2</span><span class="p">],</span> <span class="n">asses</span><span class="p">,</span> + <span class="n">dist</span><span class="p">))</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="se">\t</span><span class="si">%s</span><span class="se">\t</span><span class="si">%s</span><span class="se">\t</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">resid1</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> + <span class="n">resid2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> + <span class="n">seq</span><span class="p">[</span><span class="n">resid1</span><span class="p">],</span> + <span class="n">seq</span><span class="p">[</span><span class="n">resid2</span><span class="p">]))</span> + + <span class="n">ptp</span> <span class="o">=</span> <span class="p">(</span><span class="n">tp_count</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">contacts</span><span class="p">)))</span> <span class="o">*</span> <span class="mf">100.0</span> <span class="k">if</span> <span class="n">ref</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> \ + <span class="kc">None</span> + <span class="n">outfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'''</span> +<span class="s1"># TP number : </span><span class="si">{tp}</span><span class="s1"> (</span><span class="si">{ptp:.2f}</span><span class="s1"> %)</span> +<span class="s1"># Number of contacts : </span><span class="si">{nc}</span><span class="s1"></span> +<span class="s1">'''</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tp</span><span class="o">=</span><span class="n">tp_count</span><span class="p">,</span> <span class="n">ptp</span><span class="o">=</span><span class="n">ptp</span><span class="p">,</span> <span class="n">nc</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">contacts</span><span class="p">)))</span></div> + + +<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> + <span class="c1"># Test AriaEcCommand object</span> + <span class="kn">from</span> <span class="nn">.settings</span> <span class="k">import</span> <span class="n">AriaEcSettings</span> + + <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span> + <span class="n">LOG</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"Setup"</span><span class="p">)</span> + <span class="n">AriaEcSettings</span><span class="p">(</span><span class="s1">'setup'</span><span class="p">)</span><span class="o">.</span><span class="n">load_config</span><span class="p">(</span><span class="s1">'config.ini'</span><span class="p">)</span> +</pre></div> + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'../../', + VERSION:'0.2', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/docs/_build/html/genindex.html b/examples-dev/olds/_build/html/_modules/index.html similarity index 60% rename from docs/_build/html/genindex.html rename to examples-dev/olds/_build/html/_modules/index.html index 127f52a..2fa5593 100644 --- a/docs/_build/html/genindex.html +++ b/examples-dev/olds/_build/html/_modules/index.html @@ -1,6 +1,5 @@ - <!DOCTYPE html> <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> @@ -9,7 +8,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Index — ARIA 4 documentation</title> + <title>Overview: module code — Aria-EC 0.3 documentation</title> @@ -27,20 +26,19 @@ - <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> <link rel="index" title="Index" - href="#"/> - <link rel="search" title="Search" href="search.html"/> - <link rel="copyright" title="Copyright" href="copyright.html"/> - <link rel="top" title="ARIA 4 documentation" href="index.html"/> + href="../genindex.html"/> + <link rel="search" title="Search" href="../search.html"/> + <link rel="top" title="Aria-EC 0.3 documentation" href="../index.html"/> - <script src="_static/js/modernizr.min.js"></script> + <script src="../_static/js/modernizr.min.js"></script> </head> @@ -56,7 +54,7 @@ - <a href="index.html" class="icon icon-home"> ARIA + <a href="../index.html" class="icon icon-home"> Aria-EC @@ -66,14 +64,14 @@ <div class="version"> - 2 + 0.3 </div> <div role="search"> - <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> <input type="text" name="q" placeholder="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> @@ -104,7 +102,7 @@ <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="index.html">ARIA</a> + <a href="../index.html">Aria-EC</a> </nav> @@ -132,9 +130,9 @@ <ul class="wy-breadcrumbs"> - <li><a href="index.html">Docs</a> »</li> + <li><a href="../index.html">Docs</a> »</li> - <li>Index</li> + <li>Overview: module code</li> <li class="wy-breadcrumbs-aside"> @@ -151,13 +149,20 @@ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> - -<h1 id="index">Index</h1> - -<div class="genindex-jumpbox"> - -</div> - + <h1>All modules for which code is available</h1> +<ul><li><a href="aria/conbox/analysis.html">aria.conbox.analysis</a></li> +<li><a href="aria/conbox/commands.html">aria.conbox.commands</a></li> +<li><a href="aria/conbox/converter.html">aria.conbox.converter</a></li> +<li><a href="aria/conbox/maplot.html">aria.conbox.maplot</a></li> +<li><a href="aria/conbox/ndconv.html">aria.conbox.ndconv</a></li> +<li><a href="aria/conbox/pdbdist.html">aria.conbox.pdbdist</a></li> +<li><a href="aria/conbox/pdbqual.html">aria.conbox.pdbqual</a></li> +<li><a href="aria/conbox/protein.html">aria.conbox.protein</a></li> +<li><a href="aria/conbox/protmap.html">aria.conbox.protmap</a></li> +<li><a href="aria/conbox/reader.html">aria.conbox.reader</a></li> +<li><a href="aria/conbox/settings.html">aria.conbox.settings</a></li> +<li><a href="aria/conbox/setup.html">aria.conbox.setup</a></li> +</ul> </div> <div class="articleComments"> @@ -171,7 +176,7 @@ <div role="contentinfo"> <p> - © <a href="copyright.html">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. + © Copyright 2017, Fabrice Allain, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. </p> </div> @@ -192,24 +197,24 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { - URL_ROOT:'./', - VERSION:'4', + URL_ROOT:'../', + VERSION:'0.3', COLLAPSE_INDEX:false, FILE_SUFFIX:'.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt' }; </script> - <script type="text/javascript" src="_static/jquery.js"></script> - <script type="text/javascript" src="_static/underscore.js"></script> - <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> - <script type="text/javascript" src="_static/js/theme.js"></script> + <script type="text/javascript" src="../_static/js/theme.js"></script> diff --git a/examples-dev/olds/_build/html/_sources/ariaec.rst.txt b/examples-dev/olds/_build/html/_sources/ariaec.rst.txt new file mode 100644 index 0000000..20f786d --- /dev/null +++ b/examples-dev/olds/_build/html/_sources/ariaec.rst.txt @@ -0,0 +1,123 @@ +aria.conbox package +=================== + +Subpackages +----------- + +.. toctree:: + +Submodules +---------- + +aria.conbox.analysis module +--------------------------- + +.. automodule:: aria.conbox.analysis + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.base module +----------------------- + +.. automodule:: aria.conbox.base + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.commands module +--------------------------- + +.. automodule:: aria.conbox.commands + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.converter module +---------------------------- + +.. automodule:: aria.conbox.converter + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.maplot module +------------------------- + +.. automodule:: aria.conbox.maplot + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.ndconv module +------------------------- + +.. automodule:: aria.conbox.ndconv + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.pdbdist module +-------------------------- + +.. automodule:: aria.conbox.pdbdist + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.pdbqual module +-------------------------- + +.. automodule:: aria.conbox.pdbqual + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.protein module +-------------------------- + +.. automodule:: aria.conbox.protein + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.protmap module +-------------------------- + +.. automodule:: aria.conbox.protmap + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.reader module +------------------------- + +.. automodule:: aria.conbox.reader + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.settings module +--------------------------- + +.. automodule:: aria.conbox.settings + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.setup module +------------------------ + +.. automodule:: aria.conbox.setup + :members: + :undoc-members: + :show-inheritance: + + +Module contents +--------------- + +.. automodule:: aria.conbox + :members: + :undoc-members: + :show-inheritance: diff --git a/examples-dev/olds/_build/html/_sources/ariaec.test.rst.txt b/examples-dev/olds/_build/html/_sources/ariaec.test.rst.txt new file mode 100644 index 0000000..8813337 --- /dev/null +++ b/examples-dev/olds/_build/html/_sources/ariaec.test.rst.txt @@ -0,0 +1,10 @@ +ariaec.test package +=================== + +Module contents +--------------- + +.. automodule:: ariaec.test + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_build/html/_sources/index.rst.txt b/examples-dev/olds/_build/html/_sources/index.rst.txt similarity index 61% rename from docs/_build/html/_sources/index.rst.txt rename to examples-dev/olds/_build/html/_sources/index.rst.txt index b737aaf..c213df6 100644 --- a/docs/_build/html/_sources/index.rst.txt +++ b/examples-dev/olds/_build/html/_sources/index.rst.txt @@ -1,10 +1,10 @@ -.. ARIAEC documentation master file, created by - sphinx-quickstart on Mon Oct 23 16:10:18 2017. +.. AriaEc documentation master file, created by + sphinx-quickstart on Fri Apr 21 16:27:42 2017. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to ARIAEC's documentation! -================================== +Welcome to Aria-EC's documentation! +=================================== .. toctree:: :maxdepth: 2 diff --git a/docs/_build/html/_sources/modules.rst.txt b/examples-dev/olds/_build/html/_sources/modules.rst.txt similarity index 100% rename from docs/_build/html/_sources/modules.rst.txt rename to examples-dev/olds/_build/html/_sources/modules.rst.txt diff --git a/docs/_build/html/_static/ajax-loader.gif b/examples-dev/olds/_build/html/_static/ajax-loader.gif similarity index 100% rename from docs/_build/html/_static/ajax-loader.gif rename to examples-dev/olds/_build/html/_static/ajax-loader.gif diff --git a/docs/_build/html/_static/basic.css b/examples-dev/olds/_build/html/_static/basic.css similarity index 98% rename from docs/_build/html/_static/basic.css rename to examples-dev/olds/_build/html/_static/basic.css index 6f40830..6df76b0 100644 --- a/docs/_build/html/_static/basic.css +++ b/examples-dev/olds/_build/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -445,14 +445,10 @@ dd { margin-left: 30px; } -dt:target, span.highlighted { +dt:target, .highlighted { background-color: #fbe54e; } -rect.highlighted { - fill: #fbe54e; -} - dl.glossary dt { font-weight: bold; font-size: 1.1em; diff --git a/docs/_build/html/_static/comment-bright.png b/examples-dev/olds/_build/html/_static/comment-bright.png similarity index 100% rename from docs/_build/html/_static/comment-bright.png rename to examples-dev/olds/_build/html/_static/comment-bright.png diff --git a/docs/_build/html/_static/comment-close.png b/examples-dev/olds/_build/html/_static/comment-close.png similarity index 100% rename from docs/_build/html/_static/comment-close.png rename to examples-dev/olds/_build/html/_static/comment-close.png diff --git a/docs/_build/html/_static/comment.png b/examples-dev/olds/_build/html/_static/comment.png similarity index 100% rename from docs/_build/html/_static/comment.png rename to examples-dev/olds/_build/html/_static/comment.png diff --git a/docs/_build/html/_static/css/badge_only.css b/examples-dev/olds/_build/html/_static/css/badge_only.css similarity index 100% rename from docs/_build/html/_static/css/badge_only.css rename to examples-dev/olds/_build/html/_static/css/badge_only.css diff --git a/docs/_build/html/_static/css/theme.css b/examples-dev/olds/_build/html/_static/css/theme.css similarity index 100% rename from docs/_build/html/_static/css/theme.css rename to examples-dev/olds/_build/html/_static/css/theme.css diff --git a/docs/_build/html/_static/doctools.js b/examples-dev/olds/_build/html/_static/doctools.js similarity index 82% rename from docs/_build/html/_static/doctools.js rename to examples-dev/olds/_build/html/_static/doctools.js index 0c15c00..5654977 100644 --- a/docs/_build/html/_static/doctools.js +++ b/examples-dev/olds/_build/html/_static/doctools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for all documentation. * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -45,7 +45,7 @@ jQuery.urlencode = encodeURIComponent; * it will always return arrays of strings for the value parts. */ jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') + if (typeof s == 'undefined') s = document.location.search; var parts = s.substr(s.indexOf('?') + 1).split('&'); var result = {}; @@ -66,53 +66,29 @@ jQuery.getQueryParameters = function(s) { * span elements with the given class name. */ jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { + function highlight(node) { + if (node.nodeType == 3) { var val = node.nodeValue; var pos = val.toLowerCase().indexOf(text); if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } + var span = document.createElement("span"); + span.className = className; span.appendChild(document.createTextNode(val.substr(pos, text.length))); node.parentNode.insertBefore(span, node.parentNode.insertBefore( document.createTextNode(val.substr(pos + text.length)), node.nextSibling)); node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var bbox = span.getBBox(); - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - var parentOfText = node.parentNode.parentNode; - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } } } else if (!jQuery(node).is("button, select, textarea")) { jQuery.each(node.childNodes, function() { - highlight(this, addItems); + highlight(this); }); } } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); + return this.each(function() { + highlight(this); }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; }; /* @@ -155,21 +131,21 @@ var Documentation = { * i18n support */ TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, LOCALE : 'unknown', // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) gettext : function(string) { var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') + if (typeof translated == 'undefined') return string; - return (typeof translated === 'string') ? translated : translated[0]; + return (typeof translated == 'string') ? translated : translated[0]; }, ngettext : function(singular, plural, n) { var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') + if (typeof translated == 'undefined') return (n == 1) ? singular : plural; return translated[Documentation.PLURALEXPR(n)]; }, @@ -204,7 +180,7 @@ var Documentation = { * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 */ fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) + if (document.location.hash) window.setTimeout(function() { document.location.href += ''; }, 10); @@ -240,7 +216,7 @@ var Documentation = { var src = $(this).attr('src'); var idnum = $(this).attr('id').substr(7); $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') + if (src.substr(-9) == 'minus.png') $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); else $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); @@ -272,7 +248,7 @@ var Documentation = { var path = document.location.pathname; var parts = path.split(/\//); $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') + if (this == '..') parts.pop(); }); var url = parts.join('/'); diff --git a/docs/_build/html/_static/down-pressed.png b/examples-dev/olds/_build/html/_static/down-pressed.png similarity index 100% rename from docs/_build/html/_static/down-pressed.png rename to examples-dev/olds/_build/html/_static/down-pressed.png diff --git a/docs/_build/html/_static/down.png b/examples-dev/olds/_build/html/_static/down.png similarity index 100% rename from docs/_build/html/_static/down.png rename to examples-dev/olds/_build/html/_static/down.png diff --git a/docs/_build/html/_static/file.png b/examples-dev/olds/_build/html/_static/file.png similarity index 100% rename from docs/_build/html/_static/file.png rename to examples-dev/olds/_build/html/_static/file.png diff --git a/docs/_build/html/_static/fonts/Inconsolata-Bold.ttf b/examples-dev/olds/_build/html/_static/fonts/Inconsolata-Bold.ttf similarity index 100% rename from docs/_build/html/_static/fonts/Inconsolata-Bold.ttf rename to examples-dev/olds/_build/html/_static/fonts/Inconsolata-Bold.ttf diff --git a/docs/_build/html/_static/fonts/Inconsolata-Regular.ttf b/examples-dev/olds/_build/html/_static/fonts/Inconsolata-Regular.ttf similarity index 100% rename from docs/_build/html/_static/fonts/Inconsolata-Regular.ttf rename to examples-dev/olds/_build/html/_static/fonts/Inconsolata-Regular.ttf diff --git a/docs/_build/html/_static/fonts/Lato-Bold.ttf b/examples-dev/olds/_build/html/_static/fonts/Lato-Bold.ttf similarity index 100% rename from docs/_build/html/_static/fonts/Lato-Bold.ttf rename to examples-dev/olds/_build/html/_static/fonts/Lato-Bold.ttf diff --git a/docs/_build/html/_static/fonts/Lato-Regular.ttf b/examples-dev/olds/_build/html/_static/fonts/Lato-Regular.ttf similarity index 100% rename from docs/_build/html/_static/fonts/Lato-Regular.ttf rename to examples-dev/olds/_build/html/_static/fonts/Lato-Regular.ttf diff --git a/docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf b/examples-dev/olds/_build/html/_static/fonts/RobotoSlab-Bold.ttf similarity index 100% rename from docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf rename to examples-dev/olds/_build/html/_static/fonts/RobotoSlab-Bold.ttf diff --git a/docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf b/examples-dev/olds/_build/html/_static/fonts/RobotoSlab-Regular.ttf similarity index 100% rename from docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf rename to examples-dev/olds/_build/html/_static/fonts/RobotoSlab-Regular.ttf diff --git a/docs/_build/html/_static/fonts/fontawesome-webfont.eot b/examples-dev/olds/_build/html/_static/fonts/fontawesome-webfont.eot similarity index 100% rename from docs/_build/html/_static/fonts/fontawesome-webfont.eot rename to examples-dev/olds/_build/html/_static/fonts/fontawesome-webfont.eot diff --git a/docs/_build/html/_static/fonts/fontawesome-webfont.svg b/examples-dev/olds/_build/html/_static/fonts/fontawesome-webfont.svg similarity index 100% rename from docs/_build/html/_static/fonts/fontawesome-webfont.svg rename to examples-dev/olds/_build/html/_static/fonts/fontawesome-webfont.svg diff --git a/docs/_build/html/_static/fonts/fontawesome-webfont.ttf b/examples-dev/olds/_build/html/_static/fonts/fontawesome-webfont.ttf similarity index 100% rename from docs/_build/html/_static/fonts/fontawesome-webfont.ttf rename to examples-dev/olds/_build/html/_static/fonts/fontawesome-webfont.ttf diff --git a/docs/_build/html/_static/fonts/fontawesome-webfont.woff b/examples-dev/olds/_build/html/_static/fonts/fontawesome-webfont.woff similarity index 100% rename from docs/_build/html/_static/fonts/fontawesome-webfont.woff rename to examples-dev/olds/_build/html/_static/fonts/fontawesome-webfont.woff diff --git a/docs/_build/html/_static/jquery-3.1.0.js b/examples-dev/olds/_build/html/_static/jquery-3.1.0.js similarity index 100% rename from docs/_build/html/_static/jquery-3.1.0.js rename to examples-dev/olds/_build/html/_static/jquery-3.1.0.js diff --git a/docs/_build/html/_static/jquery.js b/examples-dev/olds/_build/html/_static/jquery.js similarity index 100% rename from docs/_build/html/_static/jquery.js rename to examples-dev/olds/_build/html/_static/jquery.js diff --git a/docs/_build/html/_static/js/modernizr.min.js b/examples-dev/olds/_build/html/_static/js/modernizr.min.js similarity index 100% rename from docs/_build/html/_static/js/modernizr.min.js rename to examples-dev/olds/_build/html/_static/js/modernizr.min.js diff --git a/docs/_build/html/_static/js/theme.js b/examples-dev/olds/_build/html/_static/js/theme.js similarity index 100% rename from docs/_build/html/_static/js/theme.js rename to examples-dev/olds/_build/html/_static/js/theme.js diff --git a/docs/_build/html/_static/minus.png b/examples-dev/olds/_build/html/_static/minus.png similarity index 100% rename from docs/_build/html/_static/minus.png rename to examples-dev/olds/_build/html/_static/minus.png diff --git a/docs/_build/html/_static/plus.png b/examples-dev/olds/_build/html/_static/plus.png similarity index 100% rename from docs/_build/html/_static/plus.png rename to examples-dev/olds/_build/html/_static/plus.png diff --git a/docs/_build/html/_static/pygments.css b/examples-dev/olds/_build/html/_static/pygments.css similarity index 100% rename from docs/_build/html/_static/pygments.css rename to examples-dev/olds/_build/html/_static/pygments.css diff --git a/docs/_build/html/_static/searchtools.js b/examples-dev/olds/_build/html/_static/searchtools.js similarity index 99% rename from docs/_build/html/_static/searchtools.js rename to examples-dev/olds/_build/html/_static/searchtools.js index 41b8336..c821573 100644 --- a/docs/_build/html/_static/searchtools.js +++ b/examples-dev/olds/_build/html/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -540,9 +540,6 @@ var Search = { }); } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX; - if (suffix === undefined) { - suffix = '.txt'; - } $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix), dataType: "text", complete: function(jqxhr, textstatus) { diff --git a/docs/_build/html/_static/underscore-1.3.1.js b/examples-dev/olds/_build/html/_static/underscore-1.3.1.js similarity index 100% rename from docs/_build/html/_static/underscore-1.3.1.js rename to examples-dev/olds/_build/html/_static/underscore-1.3.1.js diff --git a/docs/_build/html/_static/underscore.js b/examples-dev/olds/_build/html/_static/underscore.js similarity index 100% rename from docs/_build/html/_static/underscore.js rename to examples-dev/olds/_build/html/_static/underscore.js diff --git a/docs/_build/html/_static/up-pressed.png b/examples-dev/olds/_build/html/_static/up-pressed.png similarity index 100% rename from docs/_build/html/_static/up-pressed.png rename to examples-dev/olds/_build/html/_static/up-pressed.png diff --git a/docs/_build/html/_static/up.png b/examples-dev/olds/_build/html/_static/up.png similarity index 100% rename from docs/_build/html/_static/up.png rename to examples-dev/olds/_build/html/_static/up.png diff --git a/docs/_build/html/_static/websupport.js b/examples-dev/olds/_build/html/_static/websupport.js similarity index 99% rename from docs/_build/html/_static/websupport.js rename to examples-dev/olds/_build/html/_static/websupport.js index 79b18e3..53f6a45 100644 --- a/docs/_build/html/_static/websupport.js +++ b/examples-dev/olds/_build/html/_static/websupport.js @@ -4,7 +4,7 @@ * * sphinx.websupport utilities for all documentation. * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/examples-dev/olds/_build/html/ariaec.html b/examples-dev/olds/_build/html/ariaec.html new file mode 100644 index 0000000..0a80067 --- /dev/null +++ b/examples-dev/olds/_build/html/ariaec.html @@ -0,0 +1,2953 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>aria.conbox package — Aria-EC 0.3 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="genindex.html"/> + <link rel="search" title="Search" href="search.html"/> + <link rel="top" title="Aria-EC 0.3 documentation" href="index.html"/> + + + <script src="_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="index.html" class="icon icon-home"> Aria-EC + + + + </a> + + + + + <div class="version"> + 0.3 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"><ul> +<li><a class="reference internal" href="#">aria.conbox package</a><ul> +<li><a class="reference internal" href="#subpackages">Subpackages</a></li> +<li><a class="reference internal" href="#submodules">Submodules</a></li> +<li><a class="reference internal" href="#module-aria.conbox.analysis">aria.conbox.analysis module</a></li> +<li><a class="reference internal" href="#aria-conbox-base-module">aria.conbox.base module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.commands">aria.conbox.commands module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.converter">aria.conbox.converter module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.maplot">aria.conbox.maplot module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.ndconv">aria.conbox.ndconv module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.pdbdist">aria.conbox.pdbdist module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.pdbqual">aria.conbox.pdbqual module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.protein">aria.conbox.protein module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.protmap">aria.conbox.protmap module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.reader">aria.conbox.reader module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.settings">aria.conbox.settings module</a></li> +<li><a class="reference internal" href="#module-aria.conbox.setup">aria.conbox.setup module</a></li> +<li><a class="reference internal" href="#module-aria.conbox">Module contents</a></li> +</ul> +</li> +</ul> +</div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">Aria-EC</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>aria.conbox package</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/ariaec.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="aria-conbox-package"> +<h1>aria.conbox package<a class="headerlink" href="#aria-conbox-package" title="Permalink to this headline">¶</a></h1> +<div class="section" id="subpackages"> +<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2> +<div class="toctree-wrapper compound"> +</div> +</div> +<div class="section" id="submodules"> +<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2> +</div> +<div class="section" id="module-aria.conbox.analysis"> +<span id="aria-conbox-analysis-module"></span><h2>aria.conbox.analysis module<a class="headerlink" href="#module-aria.conbox.analysis" title="Permalink to this headline">¶</a></h2> +<p>Created on 4/7/17</p> +<p>@author: fallain</p> +<dl class="class"> +<dt id="aria.conbox.analysis.EnsembleAnalysis"> +<em class="property">class </em><code class="descclassname">aria.conbox.analysis.</code><code class="descname">EnsembleAnalysis</code><span class="sig-paren">(</span><em>settings</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/analysis.html#EnsembleAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.analysis.EnsembleAnalysis" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>ARIA extended ensemble analysis</p> +<dl class="staticmethod"> +<dt id="aria.conbox.analysis.EnsembleAnalysis.pca_projection"> +<em class="property">static </em><code class="descname">pca_projection</code><span class="sig-paren">(</span><em>ensemble</em>, <em>molecule</em>, <em>infos</em>, <em>atmask='CA'</em>, <em>title='3D PCA projection on backbone coordinates'</em>, <em>outfile=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/analysis.html#EnsembleAnalysis.pca_projection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.analysis.EnsembleAnalysis.pca_projection" title="Permalink to this definition">¶</a></dt> +<dd><p>PCA projection of ensemble coordinates</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>ensemble</strong> – </li> +<li><strong>molecule</strong> – </li> +<li><strong>infos</strong> – </li> +<li><strong>atmask</strong> – (Default value = “CAâ€)</li> +<li><strong>title</strong> – </li> +<li><strong>outfile</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.analysis.EnsembleAnalysis.run"> +<code class="descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/analysis.html#EnsembleAnalysis.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.analysis.EnsembleAnalysis.run" title="Permalink to this definition">¶</a></dt> +<dd><p>Execute Ensemble analysis</p> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.analysis.EnsembleAnalysis.violation_analysis"> +<em class="property">static </em><code class="descname">violation_analysis</code><span class="sig-paren">(</span><em>project</em>, <em>iteration_id</em>, <em>restraints</em>, <em>ensemble</em>, <em>out_file</em>, <em>dists_ref=None</em>, <em>headerflag=True</em>, <em>clusteridx=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/analysis.html#EnsembleAnalysis.violation_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.analysis.EnsembleAnalysis.violation_analysis" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>clusteridx</strong> – </li> +<li><strong>project</strong> (<em>aria.Project.Project object</em>) – </li> +<li><strong>iteration_id</strong> – </li> +<li><strong>restraints</strong> – </li> +<li><strong>ensemble</strong> – </li> +<li><strong>out_file</strong> – </li> +<li><strong>dists_ref</strong> – Reference distances (Default value = None)</li> +<li><strong>headerflag</strong> – (Default value = True)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="function"> +<dt id="aria.conbox.analysis.colscatter"> +<code class="descclassname">aria.conbox.analysis.</code><code class="descname">colscatter</code><span class="sig-paren">(</span><em>X</em>, <em>axe</em>, <em>colors</em>, <em>ndim=2</em>, <em>axtitle=''</em>, <em>xlabel='x'</em>, <em>ylabel='y'</em>, <em>zlabel='z'</em>, <em>legend_prefix=''</em>, <em>others=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/analysis.html#colscatter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.analysis.colscatter" title="Permalink to this definition">¶</a></dt> +<dd><p>Scatter plot with palette colors</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>X</strong> – </li> +<li><strong>axe</strong> – </li> +<li><strong>colors</strong> – </li> +<li><strong>ndim</strong> – (Default value = 2)</li> +<li><strong>axtitle</strong> – (Default value = “â€)</li> +<li><strong>xlabel</strong> – (Default value = “xâ€)</li> +<li><strong>ylabel</strong> – (Default value = “yâ€)</li> +<li><strong>zlabel</strong> – (Default value = “zâ€)</li> +<li><strong>legend_prefix</strong> – (Default value = “â€)</li> +<li><strong>others</strong> – (Default value = False)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</div> +<div class="section" id="aria-conbox-base-module"> +<h2>aria.conbox.base module<a class="headerlink" href="#aria-conbox-base-module" title="Permalink to this headline">¶</a></h2> +</div> +<div class="section" id="module-aria.conbox.commands"> +<span id="aria-conbox-commands-module"></span><h2>aria.conbox.commands module<a class="headerlink" href="#module-aria.conbox.commands" title="Permalink to this headline">¶</a></h2> +<p>ARIA Evolutive Contact toolbox</p> +<dl class="class"> +<dt id="aria.conbox.commands.AriaEcCommands"> +<em class="property">class </em><code class="descclassname">aria.conbox.commands.</code><code class="descname">AriaEcCommands</code><span class="sig-paren">(</span><em>custom_logging=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Argparse interface for aria_ec</p> +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.analysis"> +<code class="descname">analysis</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.analysis" title="Permalink to this definition">¶</a></dt> +<dd><p>Extended ensemble analysis of distance restraints</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.bbconv"> +<code class="descname">bbconv</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.bbconv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.bbconv" title="Permalink to this definition">¶</a></dt> +<dd><p>bbcontacts converter call</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.commands.AriaEcCommands.command_list"> +<code class="descname">command_list</code><em class="property"> = ('setup', 'bbconv', 'maplot', 'pdbqual', 'analysis', 'tbl2xml', 'pdbdist', 'pdbstat')</em><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.command_list" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.commands.AriaEcCommands.contact_types"> +<code class="descname">contact_types</code><em class="property"> = ('evfold', 'plmev', 'plm', 'plmdca', 'plmc', 'bbcontacts', 'pconsc', 'pconsc1', 'pconsc2', 'psicov', 'metapsicovhb', 'metapsicov_stg1', 'metapsicov_stg2', 'gremlin', 'pdb', 'native', 'native_full', 'contactlist')</em><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.contact_types" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.create_settings"> +<code class="descname">create_settings</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.create_settings"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.create_settings" title="Permalink to this definition">¶</a></dt> +<dd><p>Create settings relative to args.command</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.commands.AriaEcCommands.default_confile"> +<code class="descname">default_confile</code><em class="property"> = 'conf/config.ini'</em><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.default_confile" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.commands.AriaEcCommands.desc_list"> +<code class="descname">desc_list</code><em class="property"> = (u'Setup ARIA infrastructure with contact maps translated into ARIA restraints', u'Convert a contact map in bbcontact format', u'Contactmap visualization tool', u'Quality tool for pdb file(s)', u'Extended ARIA ensemble analysis on a specific iteration ', u'XML converter for tbl distance restraint', u'Extract distance distribution from culled list of pdb files', u'Analyze distance distribution with GMM, ...')</em><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.desc_list" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.maplot"> +<code class="descname">maplot</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.maplot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.maplot" title="Permalink to this definition">¶</a></dt> +<dd><p>instantiate AriaEcContactmap with AriaSettings</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.pdbdist"> +<code class="descname">pdbdist</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.pdbdist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.pdbdist" title="Permalink to this definition">¶</a></dt> +<dd><p>Extract pdb distance distributions</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.pdbqual"> +<code class="descname">pdbqual</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.pdbqual"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.pdbqual" title="Permalink to this definition">¶</a></dt> +<dd><p>Quality run subcommand</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.pdbstat"> +<code class="descname">pdbstat</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.pdbstat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.pdbstat" title="Permalink to this definition">¶</a></dt> +<dd><p>Analyse pdb distance distribution</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.run"> +<code class="descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.run" title="Permalink to this definition">¶</a></dt> +<dd><p>call method relative to args.command</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.setup"> +<code class="descname">setup</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.setup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.setup" title="Permalink to this definition">¶</a></dt> +<dd><p>Setup call</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.commands.AriaEcCommands.tbl2xml"> +<code class="descname">tbl2xml</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#AriaEcCommands.tbl2xml"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.AriaEcCommands.tbl2xml" title="Permalink to this definition">¶</a></dt> +<dd><p>tbl2xml command</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.commands.ReadableFile"> +<em class="property">class </em><code class="descclassname">aria.conbox.commands.</code><code class="descname">ReadableFile</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#ReadableFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.ReadableFile" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">argparse.Action</span></code></p> +<p>Class used with argparse action to check if a file is readable</p> +</dd></dl> + +<dl class="function"> +<dt id="aria.conbox.commands.check_file"> +<code class="descclassname">aria.conbox.commands.</code><code class="descname">check_file</code><span class="sig-paren">(</span><em>prospective_file</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#check_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.check_file" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>prospective_file</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="function"> +<dt id="aria.conbox.commands.main"> +<code class="descclassname">aria.conbox.commands.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/commands.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.commands.main" title="Permalink to this definition">¶</a></dt> +<dd><p>Launch ariaec command interface</p> +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.converter"> +<span id="aria-conbox-converter-module"></span><h2>aria.conbox.converter module<a class="headerlink" href="#module-aria.conbox.converter" title="Permalink to this headline">¶</a></h2> +<p>Input/Output aria_ec scripts</p> +<dl class="class"> +<dt id="aria.conbox.converter.AriaEcBbConverter"> +<em class="property">class </em><code class="descclassname">aria.conbox.converter.</code><code class="descname">AriaEcBbConverter</code><span class="sig-paren">(</span><em>settings</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcBbConverter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcBbConverter" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Bbcontacts convert main class</p> +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaEcBbConverter.compute_diversityvalue"> +<em class="property">static </em><code class="descname">compute_diversityvalue</code><span class="sig-paren">(</span><em>msa</em>, <em>seqlen</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcBbConverter.compute_diversityvalue"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcBbConverter.compute_diversityvalue" title="Permalink to this definition">¶</a></dt> +<dd><blockquote> +<div><p>Compute bbcontacts diversity value</p> +<dl class="docutils"> +<dt>msa <span class="classifier-delimiter">:</span> <span class="classifier"><cite>str</cite></span></dt> +<dd>multiple sequence alignment file path</dd> +<dt>seqlen <span class="classifier-delimiter">:</span> <span class="classifier"><cite>int</cite></span></dt> +<dd>protein sequence length</dd> +</dl> +<p>diversity_score : <cite>float</cite></p> +<blockquote> +<div><p>Diversity score correspond to the square root of the multiple +sequence alignment length (<span class="math">\(m\)</span>) over the length of the protein +sequence (<span class="math">\(l\)</span>)</p> +<div class="math"> +\[Divscore =\]</div> +</div></blockquote> +</div></blockquote> +<p>rac{sqrt{m}}{l}</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcBbConverter.run"> +<code class="descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcBbConverter.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcBbConverter.run" title="Permalink to this definition">¶</a></dt> +<dd><p>BBConverter command</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.converter.AriaEcXMLConverter"> +<em class="property">class </em><code class="descclassname">aria.conbox.converter.</code><code class="descname">AriaEcXMLConverter</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.converter.AriaXMLConverter" title="aria.conbox.converter.AriaXMLConverter"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.converter.AriaXMLConverter</span></code></a></p> +<p>XML converter ariaec to aria</p> +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.atm_list"> +<code class="descname">atm_list</code><span class="sig-paren">(</span><em>idx1</em>, <em>res1</em>, <em>idx2</em>, <em>res2</em>, <em>list_type='min'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.atm_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.atm_list" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>idx1</strong> – </li> +<li><strong>res1</strong> – </li> +<li><strong>idx2</strong> – </li> +<li><strong>res2</strong> – </li> +<li><strong>list_type</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.atm_product"> +<code class="descname">atm_product</code><span class="sig-paren">(</span><em>idx1</em>, <em>res1</em>, <em>idx2</em>, <em>res2</em>, <em>list_type='min'</em>, <em>adr_flag=False</em>, <em>product_type='allvsall'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.atm_product"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.atm_product" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>product_type</strong> – </li> +<li><strong>adr_flag</strong> – </li> +<li><strong>idx1</strong> – </li> +<li><strong>res1</strong> – </li> +<li><strong>idx2</strong> – </li> +<li><strong>res2</strong> – </li> +<li><strong>list_type</strong> – type of atoms in the product (Default value = “minâ€)</li> +<li><strong>res1</strong> – </li> +<li><strong>res2</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.get_dist"> +<code class="descname">get_dist</code><span class="sig-paren">(</span><em>distmap</em>, <em>contribs</em>, <em>defaultdist</em>, <em>protein</em>, <em>groupby=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.get_dist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.get_dist" title="Permalink to this definition">¶</a></dt> +<dd><p>Get target distance from distance map</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>distmap</strong> – </li> +<li><strong>contribs</strong> – </li> +<li><strong>defaultdist</strong> – </li> +<li><strong>protein</strong> – </li> +<li><strong>groupby</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.neighcontact"> +<em class="property">static </em><code class="descname">neighcontact</code><span class="sig-paren">(</span><em>contact</em>, <em>maxidx</em>, <em>offset=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.neighcontact"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.neighcontact" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>contact</strong> (<em>tuple object</em>) – </li> +<li><strong>maxidx</strong> (<em>int</em>) – </li> +<li><strong>offset</strong> (<em>int</em>) – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.neighcontacts"> +<em class="property">static </em><code class="descname">neighcontacts</code><span class="sig-paren">(</span><em>contacts</em>, <em>maxidx</em>, <em>offset=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.neighcontacts"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.neighcontacts" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>contacts</strong> (<em>list of tuple</em>) – </li> +<li><strong>maxidx</strong> (<em>int</em>) – Maximum index value in pairs</li> +<li><strong>offset</strong> (<em>int</em>) – If indexes in pairs start by 0 or 0 + offset</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.run_tbl2xml"> +<code class="descname">run_tbl2xml</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.run_tbl2xml"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.run_tbl2xml" title="Permalink to this definition">¶</a></dt> +<dd><p>Main command to convert tbl file(s) in ARIA XML Format</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.targetdistmaps"> +<code class="descname">targetdistmaps</code><span class="sig-paren">(</span><em>sequence</em>, <em>distfile=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.targetdistmaps"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.targetdistmaps" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>distfile</strong> – param groupby: (Default value = None)</li> +<li><strong>sequence</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.tbl2xml"> +<em class="property">static </em><code class="descname">tbl2xml</code><span class="sig-paren">(</span><em>outdir_path</em>, <em>molecule_path</em>, <em>tbl_paths</em>, <em>list_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.tbl2xml"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.tbl2xml" title="Permalink to this definition">¶</a></dt> +<dd><p>Read cns distance restraints in TBL format and convert them into ARIA +XML format</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>outdir_path</strong> (<em>str</em>) – Path where ARIA XML files are saved</li> +<li><strong>molecule_path</strong> (<em>str</em>) – Path of molecule file in ARIA XML format</li> +<li><strong>tbl_paths</strong> (<em>list of str</em>) – List of distance restraints paths</li> +<li><strong>list_name</strong> (<em>str</em>) – Name of spec in tbl file which will be converted into XML format</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>xml_paths</strong> – List of distance restraints in ARIA XML format</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">str</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.write_ariaproject"> +<code class="descname">write_ariaproject</code><span class="sig-paren">(</span><em>aria_template</em>, <em>seqfile</em>, <em>dist_files</em>, <em>tbl_files</em>, <em>desclist=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.write_ariaproject"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.write_ariaproject" title="Permalink to this definition">¶</a></dt> +<dd><p>Generate ariaproject.xml file</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>aria_template</strong> (<em>str</em>) – ariaproject.xml template path</li> +<li><strong>seqfile</strong> (<em>str</em>) – path of molecule sequence in SEQ format</li> +<li><strong>dist_files</strong> (<em>list of str</em>) – List of distance restraint files in ARIA XML format</li> +<li><strong>tbl_files</strong> (<em>dict</em>) – Distance restraint files in CNS TBL format</li> +<li><strong>desclist</strong> (<em>list of str</em>) – List of data descriptor for the actual run (Default value = None).</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"></p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">None</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.write_map_restraint"> +<code class="descname">write_map_restraint</code><span class="sig-paren">(</span><em>protein</em>, <em>contactmap</em>, <em>nb_c</em>, <em>targetdists</em>, <em>scoremap=None</em>, <em>listname=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.write_map_restraint"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.write_map_restraint" title="Permalink to this definition">¶</a></dt> +<dd><p>Translate maplot in ARIA XML restraint</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>protein</strong> – </li> +<li><strong>listname</strong> – param contactmap: ResAtmMap for a protein (Default value = “â€)</li> +<li><strong>nb_c</strong> – Number of restraints selected</li> +<li><strong>targetdists</strong> (<em>dict</em>) – ResAtmMap for each atom for each amino acid</li> +<li><strong>scoremap</strong> – sorted list of contacts (Default value = None)</li> +<li><strong>contactmap</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.write_maplist_restraints"> +<code class="descname">write_maplist_restraints</code><span class="sig-paren">(</span><em>maplist</em>, <em>targetmaps</em>, <em>protein</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.write_maplist_restraints"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.write_maplist_restraints" title="Permalink to this definition">¶</a></dt> +<dd><p>Generate ARIA XML restraints from maplist</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>maplist</strong> (<em>list of ResAtmMap</em><em> or </em><em>ResMap object</em>) – </li> +<li><strong>targetmaps</strong> (<em>dict</em>) – </li> +<li><strong>protein</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaEcXMLConverter.write_tbl_restraints"> +<code class="descname">write_tbl_restraints</code><span class="sig-paren">(</span><em>protein</em>, <em>hbmap=None</em>, <em>n_hb=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaEcXMLConverter.write_tbl_restraints"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaEcXMLConverter.write_tbl_restraints" title="Permalink to this definition">¶</a></dt> +<dd><p>Write tbl restraints</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>protein</strong> – </li> +<li><strong>hbmap</strong> – Extra hbond map (eg: metapsicov hbonds) (Default value = None)</li> +<li><strong>n_hb</strong> – </li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">{‘hbond’: hb_file, ‘dihed’: dihed_file, ‘ssdist’: ssdist_file}</p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">dict</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.converter.AriaXMLConverter"> +<em class="property">class </em><code class="descclassname">aria.conbox.converter.</code><code class="descname">AriaXMLConverter</code><span class="sig-paren">(</span><em>settings</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">aria.core.conversion.Converter</span></code>, <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>XML converter for aria files</p> +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaXMLConverter.deff"> +<em class="property">static </em><code class="descname">deff</code><span class="sig-paren">(</span><em>atm_dists</em>, <em>dpow=6</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.deff"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.deff" title="Permalink to this definition">¶</a></dt> +<dd><p>Compute aria effective distance from input distances</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>atm_dists</strong> (<em>list</em>) – list of atm-atm distances</li> +<li><strong>dpow</strong> (<em>int</em>) – effective distance exponant (Default value = 6)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.converter.AriaXMLConverter.molecule"> +<code class="descname">molecule</code><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.molecule" title="Permalink to this definition">¶</a></dt> +<dd><p>aria.Molecule.Molecule object or None. If a structure has been loaded, +use it to update the molecule</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaXMLConverter.read_pdb"> +<code class="descname">read_pdb</code><span class="sig-paren">(</span><em>pdbpath</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.read_pdb"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.read_pdb" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>pdbpath</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaXMLConverter.read_seq"> +<code class="descname">read_seq</code><span class="sig-paren">(</span><em>seqpath</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.read_seq"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.read_seq" title="Permalink to this definition">¶</a></dt> +<dd><p>Load aria Molecule object from seq file</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>seqpath</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaXMLConverter.upd_mol"> +<em class="property">static </em><code class="descname">upd_mol</code><span class="sig-paren">(</span><em>molecule</em>, <em>structure</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.upd_mol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.upd_mol" title="Permalink to this definition">¶</a></dt> +<dd><p>Update molecule object according to pdb structure</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>molecule</strong> – </li> +<li><strong>structure</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaXMLConverter.write_dihedral_tbl"> +<em class="property">static </em><code class="descname">write_dihedral_tbl</code><span class="sig-paren">(</span><em>secstructs</em>, <em>outfile</em>, <em>knrj=0.5</em>, <em>exp=2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.write_dihedral_tbl"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.write_dihedral_tbl" title="Permalink to this definition">¶</a></dt> +<dd><p>Build dihedral angle restraints (phi, psi) in tbl format</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>secstructs</strong> – </li> +<li><strong>outfile</strong> – </li> +<li><strong>knrj</strong> – (Default value = 0.5)</li> +<li><strong>exp</strong> – (Default value = 2)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaXMLConverter.write_dist_xml"> +<em class="property">static </em><code class="descname">write_dist_xml</code><span class="sig-paren">(</span><em>dist_restraints</em>, <em>outfile</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.write_dist_xml"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.write_dist_xml" title="Permalink to this definition">¶</a></dt> +<dd><p>Write aria distance restraint xml file</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>dist_restraints</strong> – </li> +<li><strong>outfile</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaXMLConverter.write_hb_tbl"> +<code class="descname">write_hb_tbl</code><span class="sig-paren">(</span><em>protein</em>, <em>outfile</em>, <em>hbmap=None</em>, <em>dminus=0.0</em>, <em>dplus=0.5</em>, <em>n_hb=None</em>, <em>lr_type='main'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.write_hb_tbl"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.write_hb_tbl" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>protein</strong> – param outfile:</li> +<li><strong>hbmap</strong> – param dminus: (Default value = None)</li> +<li><strong>dplus</strong> – param n_hb: (Default value = 0.5)</li> +<li><strong>lr_type</strong> – return: (Default value = ‘main’)</li> +<li><strong>outfile</strong> – </li> +<li><strong>dminus</strong> – (Default value = 0.0)</li> +<li><strong>n_hb</strong> – (Default value = None)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.converter.AriaXMLConverter.write_ssdist_tbl"> +<em class="property">static </em><code class="descname">write_ssdist_tbl</code><span class="sig-paren">(</span><em>sec_struct</em>, <em>ss_dist</em>, <em>outfile</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.write_ssdist_tbl"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.write_ssdist_tbl" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>sec_struct</strong> – </li> +<li><strong>ss_dist</strong> – </li> +<li><strong>outfile</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.converter.AriaXMLConverter.write_xmlseq"> +<code class="descname">write_xmlseq</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/converter.html#AriaXMLConverter.write_xmlseq"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.converter.AriaXMLConverter.write_xmlseq" title="Permalink to this definition">¶</a></dt> +<dd><p>Use aria xml pickler to generate xml molecule file</p> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.maplot"> +<span id="aria-conbox-maplot-module"></span><h2>aria.conbox.maplot module<a class="headerlink" href="#module-aria.conbox.maplot" title="Permalink to this headline">¶</a></h2> +<p>Input/Output aria_ec scripts</p> +<dl class="class"> +<dt id="aria.conbox.maplot.AriaEcContactMap"> +<em class="property">class </em><code class="descclassname">aria.conbox.maplot.</code><code class="descname">AriaEcContactMap</code><span class="sig-paren">(</span><em>settings</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/maplot.html#AriaEcContactMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.maplot.AriaEcContactMap" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Contact maplot class</p> +<dl class="method"> +<dt id="aria.conbox.maplot.AriaEcContactMap.run"> +<code class="descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/maplot.html#AriaEcContactMap.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.maplot.AriaEcContactMap.run" title="Permalink to this definition">¶</a></dt> +<dd><p>Contact map analysis command</p> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.ndconv"> +<span id="aria-conbox-ndconv-module"></span><h2>aria.conbox.ndconv module<a class="headerlink" href="#module-aria.conbox.ndconv" title="Permalink to this headline">¶</a></h2> +<p>Network deconvolution tool</p> +<dl class="function"> +<dt id="aria.conbox.ndconv.net_deconv"> +<code class="descclassname">aria.conbox.ndconv.</code><code class="descname">net_deconv</code><span class="sig-paren">(</span><em>npmat</em>, <em>beta=0.99</em>, <em>alpha=1</em>, <em>control=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/ndconv.html#net_deconv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.ndconv.net_deconv" title="Permalink to this definition">¶</a></dt> +<dd><p>This is a python implementation/translation of network deconvolution by +MIT-KELLIS LAB</p> +<blockquote> +<div><p>LICENSE: MIT-KELLIS LAB</p> +<dl class="docutils"> +<dt>AUTHORS:</dt> +<dd>Algorithm was programmed by Soheil Feizi. +Paper authors are S. Feizi, D. Marbach, M. Medard and M. Kellis</dd> +</dl> +</div></blockquote> +<p>Python implementation: Gideon Rosenthal</p> +<p class="rubric">References</p> +<dl class="docutils"> +<dt>For more details, see the following paper:</dt> +<dd>Network Deconvolution as a General Method to Distinguish +Direct Dependencies over Networks +By: Soheil Feizi, Daniel Marbach, Muriel Medard and Manolis Kellis +Nature Biotechnology</dd> +</dl> +<blockquote> +<div>ND.m: network deconvolution</div></blockquote> +<p>DESCRIPTION:</p> +<blockquote> +<div><dl class="docutils"> +<dt>USAGE:</dt> +<dd>mat_nd = ND(npmat) +mat_nd = ND(npmat,beta) +mat_nd = ND(npmat,beta,alpha,control)</dd> +</dl> +</div></blockquote> +<p>INPUT ARGUMENTS:</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>npmat</strong> – Input matrix, if it is a square matrix, the program assumes +it is a relevance matrix where npmat(i,j) represents the +similarity content between nodes i and j. Elements of +matrix should be non-negative. +optional parameters:</li> +<li><strong>beta</strong> – Scaling parameter, the program maps the largest absolute +eigenvalue of the direct dependency matrix to beta. It +should be between 0 and 1. (Default value = 0.99)</li> +<li><strong>alpha</strong> – fraction of edges of the observed dependency matrix to be +kept in deconvolution process. (Default value = 1)</li> +<li><strong>control</strong> – if 0, displaying direct weights for observed +interactions, if 1, displaying direct weights for both +observed and +non-observed interactions. +OUTPUT ARGUMENTS: +mat_nd Output deconvolved matrix (direct dependency matrix). Its +components +represent direct edge weights of observed interactions. +Choosing top direct interactions (a cut-off) depends on +the application and +is not implemented in this code. +To apply ND on regulatory networks, follow steps explained in +Supplementary notes +1.4.1 and 2.1 and 2.3 of the paper. +In this implementation, input matrices are made symmetric. +<strong>**********************************************************************</strong> +loading scaling and thresholding parameters (Default value = 0)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.pdbdist"> +<span id="aria-conbox-pdbdist-module"></span><h2>aria.conbox.pdbdist module<a class="headerlink" href="#module-aria.conbox.pdbdist" title="Permalink to this headline">¶</a></h2> +<p>PDB distance distribution generation</p> +<dl class="class"> +<dt id="aria.conbox.pdbdist.PDBDist"> +<em class="property">class </em><code class="descclassname">aria.conbox.pdbdist.</code><code class="descname">PDBDist</code><span class="sig-paren">(</span><em>settings</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/pdbdist.html#PDBDist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.pdbdist.PDBDist" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Extract pdb distance distribution from culled list of pdb files provided by +PICSES server [G. Wang and R. L. Dunbrack, Jr. PISCES: a protein sequence +culling server. Bioinformatics, 19:1589-1591, 2003.] with Bio.PDB tools +[Hamelryck, T., Manderick, B. (2003) PDB pdbparser and structure class +implemented in Python. Bioinformatics 19: 2308–2310]</p> +<dl class="staticmethod"> +<dt id="aria.conbox.pdbdist.PDBDist.get_proteinblocks"> +<em class="property">static </em><code class="descname">get_proteinblocks</code><span class="sig-paren">(</span><em>pdb</em>, <em>chain</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/pdbdist.html#PDBDist.get_proteinblocks"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.pdbdist.PDBDist.get_proteinblocks" title="Permalink to this definition">¶</a></dt> +<dd><p>Get Protein Block assignment index for chain with pbxplore</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>pdb</strong> (<em>pdb file path</em>) – </li> +<li><strong>chain</strong> (<em>str</em>) – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.pdbdist.PDBDist.get_secstructs"> +<em class="property">static </em><code class="descname">get_secstructs</code><span class="sig-paren">(</span><em>backbone</em>, <em>dssp_dict</em>, <em>chain</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/pdbdist.html#PDBDist.get_secstructs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.pdbdist.PDBDist.get_secstructs" title="Permalink to this definition">¶</a></dt> +<dd><p>Return related secondary structure dictionary for each backbone residue</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>backbone</strong> – List of bacbkone residues</li> +<li><strong>dssp_dict</strong> – </li> +<li><strong>chain</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.pdbdist.PDBDist.pdbdists"> +<code class="descname">pdbdists</code><span class="sig-paren">(</span><em>pdb</em>, <em>pdbid</em>, <em>chain</em>, <em>pair_list='all'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/pdbdist.html#PDBDist.pdbdists"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.pdbdist.PDBDist.pdbdists" title="Permalink to this definition">¶</a></dt> +<dd><p>Get distance matrix from pdb file and write distances into output file</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>pdb</strong> (<em>str</em>) – Path of pdb file</li> +<li><strong>pdbid</strong> (<em>str</em>) – PDB id</li> +<li><strong>chain</strong> (<em>str</em>) – Chain id</li> +<li><strong>pair_list</strong> (<em>{'all'</em><em>, </em><em>'min'</em><em>, </em><em>'heavy'}</em>) – Defining if we generate a distance distribution for a minimal set +of atom pairs, heavy pairs or all atom pairs (Default value = “allâ€)</li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"><strong>dists</strong></p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">obj:</th><td class="field-body"><cite>list</cite> of :obj: <cite>OrderedDict</cite></td> +</tr> +</tbody> +</table> +</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.pdbdist.PDBDist.run"> +<code class="descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/pdbdist.html#PDBDist.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.pdbdist.PDBDist.run" title="Permalink to this definition">¶</a></dt> +<dd><p>main method</p> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.pdbqual"> +<span id="aria-conbox-pdbqual-module"></span><h2>aria.conbox.pdbqual module<a class="headerlink" href="#module-aria.conbox.pdbqual" title="Permalink to this headline">¶</a></h2> +<p>Created on 9/5/16 +@author: fallain</p> +<p>Derived from qual.py script by Dr. Benjamin Bardiaux</p> +<dl class="class"> +<dt id="aria.conbox.pdbqual.AriaEcPdbqual"> +<em class="property">class </em><code class="descclassname">aria.conbox.pdbqual.</code><code class="descname">AriaEcPdbqual</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/pdbqual.html#AriaEcPdbqual"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.pdbqual.AriaEcPdbqual" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">aria.conbox.common.CommandProtocol</span></code></p> +<p>Quality pdb tool</p> +<dl class="method"> +<dt id="aria.conbox.pdbqual.AriaEcPdbqual.run"> +<code class="descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/pdbqual.html#AriaEcPdbqual.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.pdbqual.AriaEcPdbqual.run" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"></td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.protein"> +<span id="aria-conbox-protein-module"></span><h2>aria.conbox.protein module<a class="headerlink" href="#module-aria.conbox.protein" title="Permalink to this headline">¶</a></h2> +<p>Secondary structure list</p> +<dl class="class"> +<dt id="aria.conbox.protein.AminoAcidSequence"> +<em class="property">class </em><code class="descclassname">aria.conbox.protein.</code><code class="descname">AminoAcidSequence</code><span class="sig-paren">(</span><em>topologyfile</em>, <em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#AminoAcidSequence"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.AminoAcidSequence" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">aria.core.legacy.SequenceList.SequenceList</span></code>, <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Amino acid sequence</p> +<dl class="attribute"> +<dt id="aria.conbox.protein.AminoAcidSequence.end_reg"> +<code class="descname">end_reg</code><em class="property"> = <_sre.SRE_Pattern object></em><a class="headerlink" href="#aria.conbox.protein.AminoAcidSequence.end_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.AminoAcidSequence.humanidx"> +<code class="descname">humanidx</code><a class="headerlink" href="#aria.conbox.protein.AminoAcidSequence.humanidx" title="Permalink to this definition">¶</a></dt> +<dd><p><em>return</em></p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.AminoAcidSequence.read"> +<code class="descname">read</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#AminoAcidSequence.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.AminoAcidSequence.read" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.AminoAcidSequence.readtopo"> +<code class="descname">readtopo</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#AminoAcidSequence.readtopo"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.AminoAcidSequence.readtopo" title="Permalink to this definition">¶</a></dt> +<dd><p>Parse topology file for amino acids +:return:</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.AminoAcidSequence.restatement_reg"> +<code class="descname">restatement_reg</code><em class="property"> = {u'dihedral': <_sre.SRE_Pattern object at 0x4ced770>, u'acce': <_sre.SRE_Pattern object>, u'improper': <_sre.SRE_Pattern object at 0x4c62630>, u'atom': <_sre.SRE_Pattern object at 0x4d63060>, u'dono': <_sre.SRE_Pattern object>, u'bond': <_sre.SRE_Pattern object>}</em><a class="headerlink" href="#aria.conbox.protein.AminoAcidSequence.restatement_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.AminoAcidSequence.startres_reg"> +<code class="descname">startres_reg</code><em class="property"> = <_sre.SRE_Pattern object></em><a class="headerlink" href="#aria.conbox.protein.AminoAcidSequence.startres_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.AminoAcidSequence.topology"> +<code class="descname">topology</code><a class="headerlink" href="#aria.conbox.protein.AminoAcidSequence.topology" title="Permalink to this definition">¶</a></dt> +<dd><p>Topology dict with 3l code as dict key +:return:</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protein.Protein"> +<em class="property">class </em><code class="descclassname">aria.conbox.protein.</code><code class="descname">Protein</code><span class="sig-paren">(</span><em>sett</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#Protein"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.Protein" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Protein class</p> +<dl class="method"> +<dt id="aria.conbox.protein.Protein.set_aa_sequence"> +<code class="descname">set_aa_sequence</code><span class="sig-paren">(</span><em>filename</em>, <em>ssidx=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#Protein.set_aa_sequence"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.Protein.set_aa_sequence" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>filename</strong> – param ssidx:</li> +<li><strong>ssidx</strong> – (Default value = False)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.Protein.set_sec_struct"> +<code class="descname">set_sec_struct</code><span class="sig-paren">(</span><em>filename</em>, <em>ssdist_filename=u''</em>, <em>ssidx=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#Protein.set_sec_struct"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.Protein.set_sec_struct" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>filename</strong> – param ssdist_filename:</li> +<li><strong>ssidx</strong> – return: (Default value = False)</li> +<li><strong>ssdist_filename</strong> – (Default value = ‘’)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.protein.Protein.sync_index"> +<em class="property">static </em><code class="descname">sync_index</code><span class="sig-paren">(</span><em>index1</em>, <em>index2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#Protein.sync_index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.Protein.sync_index" title="Permalink to this definition">¶</a></dt> +<dd><p>Return humanidx with upper min from existing humanidx</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>index1</strong> – param index2:</li> +<li><strong>index2</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.Protein.topology"> +<code class="descname">topology</code><a class="headerlink" href="#aria.conbox.protein.Protein.topology" title="Permalink to this definition">¶</a></dt> +<dd><p><em>return</em></p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.Protein.write_seq"> +<code class="descname">write_seq</code><span class="sig-paren">(</span><em>outfile</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#Protein.write_seq"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.Protein.write_seq" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>outfile</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protein.SsList"> +<em class="property">class </em><code class="descclassname">aria.conbox.protein.</code><code class="descname">SsList</code><span class="sig-paren">(</span><em>sett</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#SsList"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.SsList" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Reader for secondary prediction structure files</p> +<dl class="method"> +<dt id="aria.conbox.protein.SsList.check_filetype"> +<code class="descname">check_filetype</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#SsList.check_filetype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.SsList.check_filetype" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.SsList.index"> +<code class="descname">index</code><a class="headerlink" href="#aria.conbox.protein.SsList.index" title="Permalink to this definition">¶</a></dt> +<dd><p><em>return</em></p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.SsList.indxplus_reg"> +<code class="descname">indxplus_reg</code><em class="property"> = <_sre.SRE_Pattern object at 0x4d527b0></em><a class="headerlink" href="#aria.conbox.protein.SsList.indxplus_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.SsList.psipred2_reg"> +<code class="descname">psipred2_reg</code><em class="property"> = <_sre.SRE_Pattern object></em><a class="headerlink" href="#aria.conbox.protein.SsList.psipred2_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.SsList.psipred3_reg"> +<code class="descname">psipred3_reg</code><em class="property"> = <_sre.SRE_Pattern object at 0x4d52fd0></em><a class="headerlink" href="#aria.conbox.protein.SsList.psipred3_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.SsList.psipred_reg"> +<code class="descname">psipred_reg</code><em class="property"> = <_sre.SRE_Pattern object></em><a class="headerlink" href="#aria.conbox.protein.SsList.psipred_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.SsList.read"> +<code class="descname">read</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#SsList.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.SsList.read" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.SsList.read_indextableplus"> +<code class="descname">read_indextableplus</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#SsList.read_indextableplus"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.SsList.read_indextableplus" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.SsList.read_psipred"> +<code class="descname">read_psipred</code><span class="sig-paren">(</span><em>filename</em>, <em>ss2=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#SsList.read_psipred"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.SsList.read_psipred" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.SsList.read_ssdist"> +<code class="descname">read_ssdist</code><span class="sig-paren">(</span><em>ssdistpath=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#SsList.read_ssdist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.SsList.read_ssdist" title="Permalink to this definition">¶</a></dt> +<dd><p>Read average dist file generated using PDB</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>ssdistpath</strong> – return: (Default value = None)</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.SsList.seq_sublist"> +<code class="descname">seq_sublist</code><span class="sig-paren">(</span><em>sequence</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#SsList.seq_sublist"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.SsList.seq_sublist" title="Permalink to this definition">¶</a></dt> +<dd><p>Check and adjust sslist with given sequence</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>sequence</strong> – input amino acid sequence (one letter format)</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.SsList.sequence"> +<code class="descname">sequence</code><a class="headerlink" href="#aria.conbox.protein.SsList.sequence" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protein.SsList.ss_dist_reg"> +<code class="descname">ss_dist_reg</code><em class="property"> = <_sre.SRE_Pattern object></em><a class="headerlink" href="#aria.conbox.protein.SsList.ss_dist_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protein.SsList.write_ssfasta"> +<code class="descname">write_ssfasta</code><span class="sig-paren">(</span><em>filename</em>, <em>desc=u'pdbid'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protein.html#SsList.write_ssfasta"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protein.SsList.write_ssfasta" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>filename</strong> – param desc:</li> +<li><strong>desc</strong> – (Default value = “pdbidâ€)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.protmap"> +<span id="aria-conbox-protmap-module"></span><h2>aria.conbox.protmap module<a class="headerlink" href="#module-aria.conbox.protmap" title="Permalink to this headline">¶</a></h2> +<p>ARIA Evolutionary Constraints Tools</p> +<dl class="class"> +<dt id="aria.conbox.protmap.AaAtmMap"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">AaAtmMap</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaAtmMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaAtmMap" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.protmap.AaMap" title="aria.conbox.protmap.AaMap"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.protmap.AaMap</span></code></a></p> +<p>Amino acid map with atom levels</p> +<dl class="method"> +<dt id="aria.conbox.protmap.AaAtmMap.contact_map"> +<code class="descname">contact_map</code><span class="sig-paren">(</span><em>contactdef</em>, <em>scsc_min=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaAtmMap.contact_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaAtmMap.contact_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>contactdef</strong> – </li> +<li><strong>scsc_min</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AaAtmMap.copy"> +<code class="descname">copy</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaAtmMap.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaAtmMap.copy" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>kwargs</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AaAtmMap.create_heatmap"> +<code class="descname">create_heatmap</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaAtmMap.create_heatmap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaAtmMap.create_heatmap" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AaAtmMap.create_index"> +<code class="descname">create_index</code><span class="sig-paren">(</span><em>sequence</em>, <em>atom_types='min'</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaAtmMap.create_index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaAtmMap.create_index" title="Permalink to this definition">¶</a></dt> +<dd><p>Update Aa index with atoms</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.AaMap"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">AaMap</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaMap" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.protmap.ProteinMap" title="aria.conbox.protmap.ProteinMap"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.protmap.ProteinMap</span></code></a></p> +<p>Amino Acid Distance Matrix</p> +<dl class="method"> +<dt id="aria.conbox.protmap.AaMap.contact_map"> +<code class="descname">contact_map</code><span class="sig-paren">(</span><em>contactdef</em>, <em>scsc_min=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaMap.contact_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaMap.contact_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>contactdef</strong> – </li> +<li><strong>scsc_min</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AaMap.copy"> +<code class="descname">copy</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaMap.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaMap.copy" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>kwargs</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AaMap.create_heatmap"> +<code class="descname">create_heatmap</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaMap.create_heatmap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaMap.create_heatmap" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AaMap.create_index"> +<code class="descname">create_index</code><span class="sig-paren">(</span><em>sequence</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaMap.create_index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaMap.create_index" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AaMap.reduce"> +<code class="descname">reduce</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AaMap.reduce"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AaMap.reduce" title="Permalink to this definition">¶</a></dt> +<dd><p>Reduce level of the contactmap</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.AaMap.sequence"> +<code class="descname">sequence</code><a class="headerlink" href="#aria.conbox.protmap.AaMap.sequence" title="Permalink to this definition">¶</a></dt> +<dd><p>returns: String containing all amino acid 1L code +:rtype: str</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.AtmMap"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">AtmMap</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AtmMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AtmMap" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.protmap.Map" title="aria.conbox.protmap.Map"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.protmap.Map</span></code></a></p> +<p>Atom Distance Matrix</p> +<dl class="method"> +<dt id="aria.conbox.protmap.AtmMap.copy"> +<code class="descname">copy</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AtmMap.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AtmMap.copy" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>kwargs</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AtmMap.create_index"> +<code class="descname">create_index</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AtmMap.create_index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AtmMap.create_index" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"></td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.AtmMap.reduce"> +<code class="descname">reduce</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#AtmMap.reduce"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.AtmMap.reduce" title="Permalink to this definition">¶</a></dt> +<dd><p>Reduce level of the contactmap</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.Map"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">Map</code><span class="sig-paren">(</span><em>index=None</em>, <em>columns=None</em>, <em>mtype='distance'</em>, <em>duplicate_levels=False</em>, <em>data=None</em>, <em>dtype=None</em>, <em>sym=True</em>, <em>desc=''</em>, <em>path=''</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">pandas.core.frame.DataFrame</span></code></p> +<p>Distance/contact matrix</p> +<dl class="method"> +<dt id="aria.conbox.protmap.Map.check_type"> +<code class="descname">check_type</code><span class="sig-paren">(</span><em>mtype</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.check_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.check_type" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mtype</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.copy"> +<code class="descname">copy</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.copy" title="Permalink to this definition">¶</a></dt> +<dd><p>Copy the current map</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>**kwargs</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.Map.mtype_choices"> +<code class="descname">mtype_choices</code><em class="property"> = {'distance': <type 'float'>, 'contact': <type 'bool'>, 'score': <type 'float'>}</em><a class="headerlink" href="#aria.conbox.protmap.Map.mtype_choices" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.reduce"> +<code class="descname">reduce</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.reduce"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.reduce" title="Permalink to this definition">¶</a></dt> +<dd><p>Low complexcity dataframe</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.remove"> +<code class="descname">remove</code><span class="sig-paren">(</span><em>rm_list</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.remove" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>rm_list</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.set_value"> +<code class="descname">set_value</code><span class="sig-paren">(</span><em>index</em>, <em>col</em>, <em>value</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.set_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.set_value" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>index</strong> – param col:</li> +<li><strong>value</strong> – param kwargs:</li> +<li><strong>col</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.sortedset"> +<code class="descname">sortedset</code><span class="sig-paren">(</span><em>human_idx=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.sortedset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.sortedset" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>human_idx</strong> – (Default value = False)</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.subfill"> +<code class="descname">subfill</code><span class="sig-paren">(</span><em>pairdict</em>, <em>level=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.subfill"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.subfill" title="Permalink to this definition">¶</a></dt> +<dd><p>Fill map with dict giving</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>pairdict</strong> – param level:</li> +<li><strong>level</strong> – (Default value = 0)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.to_series"> +<code class="descname">to_series</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.to_series"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.to_series" title="Permalink to this definition">¶</a></dt> +<dd><p>Return panda series related to lower triangle values</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.topmap"> +<code class="descname">topmap</code><span class="sig-paren">(</span><em>scoremap</em>, <em>nb_topcontact</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.topmap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.topmap" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>scoremap</strong> – param nb_topcontact:</li> +<li><strong>nb_topcontact</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.Map.update"> +<code class="descname">update</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#Map.update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.Map.update" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>args</strong> – param kwargs:</li> +<li><strong>*args</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.MapFilter"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">MapFilter</code><span class="sig-paren">(</span><em>settings</em>, <em>nofilter=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#MapFilter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.MapFilter" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<dl class="docutils"> +<dt>Filter maplot/distancemap</dt> +<dd>nd : Network deconvolution +pos : remove close contacts +cons : remove contacts with highly conservated residues +cys-cys : unicity of ss contacts +ssclash : secondary structure conflict</dd> +</dl> +<dl class="attribute"> +<dt id="aria.conbox.protmap.MapFilter.clash_dict"> +<code class="descname">clash_dict</code><em class="property"> = {'cys': {'clash': '222', 'desc': 'disulfide bond unicity'}, 'cons': {'clash': '888', 'desc': 'high conservation'}, 'pos': {'clash': 'physical proximity', 'desc': 'sequence position'}, 'ssclash': {'clash': '999', 'desc': 'secondary structure prediction conflict'}}</em><a class="headerlink" href="#aria.conbox.protmap.MapFilter.clash_dict" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.MapFilter.cons_filter"> +<code class="descname">cons_filter</code><span class="sig-paren">(</span><em>mapdict</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#MapFilter.cons_filter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.MapFilter.cons_filter" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>mapdict</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.protmap.MapFilter.cys_filter"> +<em class="property">static </em><code class="descname">cys_filter</code><span class="sig-paren">(</span><em>mapdict</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#MapFilter.cys_filter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.MapFilter.cys_filter" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>mapdict</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.MapFilter.filter_types"> +<code class="descname">filter_types</code><em class="property"> = ('pos', 'cons', 'ssclash', 'cys')</em><a class="headerlink" href="#aria.conbox.protmap.MapFilter.filter_types" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.MapFilter.nd_filter"> +<code class="descname">nd_filter</code><span class="sig-paren">(</span><em>mapdict</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#MapFilter.nd_filter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.MapFilter.nd_filter" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>mapdict</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.MapFilter.pos_filter"> +<code class="descname">pos_filter</code><span class="sig-paren">(</span><em>mapdict</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#MapFilter.pos_filter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.MapFilter.pos_filter" title="Permalink to this definition">¶</a></dt> +<dd><p>Position filter on maplot</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>kwargs</strong> – param mapdict: dict with maplot key</li> +<li><strong>mapdict</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.protmap.MapFilter.ssclash_filter"> +<em class="property">static </em><code class="descname">ssclash_filter</code><span class="sig-paren">(</span><em>mapdict</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#MapFilter.ssclash_filter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.MapFilter.ssclash_filter" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>mapdict</strong> – param kwargs:</li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.protmap.MapFilter.write_filtout"> +<em class="property">static </em><code class="descname">write_filtout</code><span class="sig-paren">(</span><em>clash_dict</em>, <em>desc_dict</em>, <em>contactlist</em>, <em>outdir=''</em>, <em>outprefix='protein'</em>, <em>clashlist=None</em>, <em>human_idx=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#MapFilter.write_filtout"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.MapFilter.write_filtout" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>clash_dict</strong> – </li> +<li><strong>desc_dict</strong> – </li> +<li><strong>contactlist</strong> – </li> +<li><strong>outdir</strong> – (Default value = “â€)</li> +<li><strong>outprefix</strong> – (Default value = “proteinâ€)</li> +<li><strong>clashlist</strong> – (Default value = None)</li> +<li><strong>human_idx</strong> – (Default value = True)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.ProtMapCollection"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">ProtMapCollection</code><span class="sig-paren">(</span><em>settings</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProtMapCollection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProtMapCollection" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Group all protein maps</p> +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProtMapCollection.allcontactmap"> +<code class="descname">allcontactmap</code><a class="headerlink" href="#aria.conbox.protmap.ProtMapCollection.allcontactmap" title="Permalink to this definition">¶</a></dt> +<dd><p>Atom level contact map. If alldistmap exists, return the maplot +form +:return:</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProtMapCollection.alldistmap"> +<code class="descname">alldistmap</code><a class="headerlink" href="#aria.conbox.protmap.ProtMapCollection.alldistmap" title="Permalink to this definition">¶</a></dt> +<dd><p>Atom level distance map. +:return:</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProtMapCollection.allscoremap"> +<code class="descname">allscoremap</code><a class="headerlink" href="#aria.conbox.protmap.ProtMapCollection.allscoremap" title="Permalink to this definition">¶</a></dt> +<dd><p>Atom level score map +:return:</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProtMapCollection.distmap"> +<code class="descname">distmap</code><a class="headerlink" href="#aria.conbox.protmap.ProtMapCollection.distmap" title="Permalink to this definition">¶</a></dt> +<dd><p><em>return</em></p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.ProteinMap"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">ProteinMap</code><span class="sig-paren">(</span><em>sequence</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.protmap.Map" title="aria.conbox.protmap.Map"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.protmap.Map</span></code></a></p> +<p>Abstract class for protein contact map objects</p> +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProteinMap.all_reg"> +<code class="descname">all_reg</code><em class="property"> = <_sre.SRE_Pattern object></em><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.all_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="staticmethod"> +<dt id="aria.conbox.protmap.ProteinMap.classification_metrics"> +<em class="property">static </em><code class="descname">classification_metrics</code><span class="sig-paren">(</span><em>y_true</em>, <em>y_pred</em>, <em>y_scores=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.classification_metrics"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.classification_metrics" title="Permalink to this definition">¶</a></dt> +<dd><p>Compute classification metrics</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>y_true</strong> (<em>numpy array of true values</em>) – </li> +<li><strong>y_pred</strong> (<em>numpy array of predicted values</em>) – </li> +<li><strong>y_scores</strong> (<em>numpy array of prediction scores</em>) – (Default value = None)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.compare_contactmap"> +<code class="descname">compare_contactmap</code><span class="sig-paren">(</span><em>cmpmap</em>, <em>contactlist</em>, <em>outprefix</em>, <em>outdir=''</em>, <em>distmap=None</em>, <em>human_idx=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.compare_contactmap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.compare_contactmap" title="Permalink to this definition">¶</a></dt> +<dd><p>Compare 2 contact map and plot differences</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>cmpmap</strong> – param contactlist:</li> +<li><strong>outprefix</strong> – param outdir:</li> +<li><strong>distmap</strong> – param human_idx: (Default value = None)</li> +<li><strong>contactlist</strong> – </li> +<li><strong>outdir</strong> – (Default value = “â€)</li> +<li><strong>human_idx</strong> – (Default value = True)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.compareplot"> +<code class="descname">compareplot</code><span class="sig-paren">(</span><em>protmap</em>, <em>save_fig=True</em>, <em>alpha=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.compareplot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.compareplot" title="Permalink to this definition">¶</a></dt> +<dd><p>Compare 2 contact map and plot differences</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>protmap</strong> – param save_fig:</li> +<li><strong>alpha</strong> – param kwargs: (Default value = None)</li> +<li><strong>save_fig</strong> – (Default value = True)</li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.contact_list"> +<code class="descname">contact_list</code><span class="sig-paren">(</span><em>human_idx=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.contact_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.contact_list" title="Permalink to this definition">¶</a></dt> +<dd><p>Return contact list</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>human_idx</strong> – return: (Default value = False)</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.contact_map"> +<code class="descname">contact_map</code><span class="sig-paren">(</span><em>contactdef</em>, <em>scsc_min=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.contact_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.contact_map" title="Permalink to this definition">¶</a></dt> +<dd><p>Generate contact map</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>contactdef</strong> – param scsc_min:</li> +<li><strong>scsc_min</strong> – (Default value = None)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.contactset"> +<code class="descname">contactset</code><span class="sig-paren">(</span><em>human_idx=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.contactset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.contactset" title="Permalink to this definition">¶</a></dt> +<dd><p>Remove duplicate in contact_list</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>human_idx</strong> – return: (Default value = False)</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"></td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">list</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.copy"> +<code class="descname">copy</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.copy" title="Permalink to this definition">¶</a></dt> +<dd><p>Copy dataframe and related attributes of the map</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>**kwargs</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.create_heatmap"> +<code class="descname">create_heatmap</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.create_heatmap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.create_heatmap" title="Permalink to this definition">¶</a></dt> +<dd><p>Generate heatmap</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.create_index"> +<code class="descname">create_index</code><span class="sig-paren">(</span><em>sequence</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.create_index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.create_index" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>sequence</strong> – </li> +<li><strong>kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProteinMap.distance_method"> +<code class="descname">distance_method</code><em class="property"> = 'euclidean'</em><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.distance_method" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProteinMap.heavy_reg"> +<code class="descname">heavy_reg</code><em class="property"> = <_sre.SRE_Pattern object></em><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.heavy_reg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProteinMap.maplot"> +<code class="descname">maplot</code><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.maplot" title="Permalink to this definition">¶</a></dt> +<dd><p>Contact map plot +:return:</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>linewidths</strong> – (Default value = 0.0)</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.plotflush"> +<code class="descname">plotflush</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.plotflush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.plotflush" title="Permalink to this definition">¶</a></dt> +<dd><p>Flush contact map plot</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.reduce"> +<code class="descname">reduce</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.reduce"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.reduce" title="Permalink to this definition">¶</a></dt> +<dd><p>Lower index level if multi index</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.report"> +<code class="descname">report</code><span class="sig-paren">(</span><em>cmpmap</em>, <em>scoremap=None</em>, <em>outprefix=''</em>, <em>outdir=''</em>, <em>plotdir=''</em>, <em>plot_ext='pdf'</em>, <em>plotag=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.report"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.report" title="Permalink to this definition">¶</a></dt> +<dd><p>Generate contact map report file</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>cmpmap</strong> – </li> +<li><strong>scoremap</strong> – (Default value = None)</li> +<li><strong>outprefix</strong> – (Default value = “â€)</li> +<li><strong>outdir</strong> – (Default value = “â€)</li> +<li><strong>plotdir</strong> – (Default value = “â€)</li> +<li><strong>plot_ext</strong> – (Default value = “pdfâ€)</li> +<li><strong>plotag</strong> – (Default value = True)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.saveplot"> +<code class="descname">saveplot</code><span class="sig-paren">(</span><em>outdir=''</em>, <em>outprefix='protein'</em>, <em>size_fig=10</em>, <em>plot_ext='pdf'</em>, <em>plot_dpi=200</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.saveplot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.saveplot" title="Permalink to this definition">¶</a></dt> +<dd><p>Save plot</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>outdir</strong> – param outprefix: (Default value = ‘’)</li> +<li><strong>size_fig</strong> – param plot_ext: (Default value = 10)</li> +<li><strong>plot_dpi</strong> – (Default value = 200)</li> +<li><strong>outprefix</strong> – (Default value = “proteinâ€)</li> +<li><strong>plot_ext</strong> – (Default value = “pdfâ€)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ProteinMap.sequence"> +<code class="descname">sequence</code><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.sequence" title="Permalink to this definition">¶</a></dt> +<dd><p>Specific sequence related to the map in a string +:returns: +:rtype: str</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ProteinMap.write_contacts"> +<code class="descname">write_contacts</code><span class="sig-paren">(</span><em>filename</em>, <em>outdir=''</em>, <em>prefix=''</em>, <em>human_idx=True</em>, <em>scoremap=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ProteinMap.write_contacts"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ProteinMap.write_contacts" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>prefix</strong> – </li> +<li><strong>filename</strong> – param outdir:</li> +<li><strong>human_idx</strong> – param scoremap: (Default value = True)</li> +<li><strong>outdir</strong> – (Default value = “â€)</li> +<li><strong>scoremap</strong> – (Default value = None)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.ResAtmMap"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">ResAtmMap</code><span class="sig-paren">(</span><em>sequence</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResAtmMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResAtmMap" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.protmap.ProteinMap" title="aria.conbox.protmap.ProteinMap"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.protmap.ProteinMap</span></code></a></p> +<p>Protein distance/contact matrix for all atom pairs. If no sequence given, +protein distance/contact matrix for all amino acids +Ex: +residue PHE1 atom CD1 CD2 CB CA CG CZ +residue atom +PHE1 CD1 0.000000 2.394145 2.455440 3.269219 1.391024 2.421148</p> +<blockquote> +<div>CD2 2.394145 0.000000 2.509243 3.407996 1.379875 2.401098 +CB 2.455440 2.509243 0.000000 1.507025 1.478053 4.267602 +CA 3.269219 3.407996 1.507025 0.000000 2.505414 5.085997 +CG 1.391024 1.379875 1.478053 2.505414 0.000000 2.790403</div></blockquote> +<dl class="method"> +<dt id="aria.conbox.protmap.ResAtmMap.contact_map"> +<code class="descname">contact_map</code><span class="sig-paren">(</span><em>contactdef</em>, <em>scsc_min=None</em>, <em>def_cut=5.0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResAtmMap.contact_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResAtmMap.contact_map" title="Permalink to this definition">¶</a></dt> +<dd><p>Contact map generator from all atoms distance map. There’s a contact +with 2 residues iff dist between 2 atoms are below the given treshold</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>def_cut</strong> – (Default value = 5.0)</li> +<li><strong>contactdef</strong> – for all atom pair</li> +<li><strong>scsc_min</strong> – (Default value = None)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ResAtmMap.copy"> +<code class="descname">copy</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResAtmMap.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResAtmMap.copy" title="Permalink to this definition">¶</a></dt> +<dd><p>Copy dataframe and related attributes of the map</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>**kwargs</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ResAtmMap.create_heatmap"> +<code class="descname">create_heatmap</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResAtmMap.create_heatmap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResAtmMap.create_heatmap" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"></td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ResAtmMap.create_index"> +<code class="descname">create_index</code><span class="sig-paren">(</span><em>sequence</em>, <em>seq_pos=True</em>, <em>seqidx=None</em>, <em>idxnames=None</em>, <em>colnames=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResAtmMap.create_index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResAtmMap.create_index" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple"> +<li><strong>sequence</strong> – </li> +<li><strong>seq_pos</strong> – </li> +<li><strong>seqidx</strong> (<em>pandas.MultiIndex</em><em>, </em><em>optional</em>) – </li> +<li><strong>idxnames</strong> – </li> +<li><strong>colnames</strong> – </li> +</ul> +</td> +</tr> +<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first"></p> +</td> +</tr> +<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last">tuple of pandas.MultiIndex objects</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ResAtmMap.reduce"> +<code class="descname">reduce</code><span class="sig-paren">(</span><em>groupby='min'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResAtmMap.reduce"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResAtmMap.reduce" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>groupby</strong> – return: (Default value = “minâ€)</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ResAtmMap.sequence"> +<code class="descname">sequence</code><a class="headerlink" href="#aria.conbox.protmap.ResAtmMap.sequence" title="Permalink to this definition">¶</a></dt> +<dd><p>Amino Acid sequence string in humanidx</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.ResMap"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">ResMap</code><span class="sig-paren">(</span><em>sequence</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResMap" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.protmap.ResAtmMap" title="aria.conbox.protmap.ResAtmMap"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.protmap.ResAtmMap</span></code></a></p> +<p>Res - res distance/contact matrix</p> +<dl class="method"> +<dt id="aria.conbox.protmap.ResMap.contact_map"> +<code class="descname">contact_map</code><span class="sig-paren">(</span><em>contactdef</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResMap.contact_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResMap.contact_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>contactdef</strong> – param kwargs:</li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ResMap.copy"> +<code class="descname">copy</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResMap.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResMap.copy" title="Permalink to this definition">¶</a></dt> +<dd><p>Copy dataframe and related attributes of the map</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>**kwargs</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ResMap.create_heatmap"> +<code class="descname">create_heatmap</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResMap.create_heatmap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResMap.create_heatmap" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"></td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.ResMap.create_index"> +<code class="descname">create_index</code><span class="sig-paren">(</span><em>sequence</em>, <em>seqidx=None</em>, <em>idxnames=None</em>, <em>colnames=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#ResMap.create_index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.ResMap.create_index" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>sequence</strong> – </li> +<li><strong>seqidx</strong> (<em>pandas.Index</em>) – </li> +<li><strong>idxnames</strong> – </li> +<li><strong>colnames</strong> – </li> +<li><strong>kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.ResMap.sequence"> +<code class="descname">sequence</code><a class="headerlink" href="#aria.conbox.protmap.ResMap.sequence" title="Permalink to this definition">¶</a></dt> +<dd><p>Amino Acid sequence string in humanidx</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.protmap.SsAaAtmMap"> +<em class="property">class </em><code class="descclassname">aria.conbox.protmap.</code><code class="descname">SsAaAtmMap</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#SsAaAtmMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.SsAaAtmMap" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.protmap.AaAtmMap" title="aria.conbox.protmap.AaAtmMap"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.protmap.AaAtmMap</span></code></a></p> +<p>Amino acid map with atom and secondary structure levels</p> +<dl class="method"> +<dt id="aria.conbox.protmap.SsAaAtmMap.contact_map"> +<code class="descname">contact_map</code><span class="sig-paren">(</span><em>contactdef</em>, <em>scsc_min=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#SsAaAtmMap.contact_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.SsAaAtmMap.contact_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>contactdef</strong> – </li> +<li><strong>scsc_min</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.SsAaAtmMap.copy"> +<code class="descname">copy</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#SsAaAtmMap.copy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.SsAaAtmMap.copy" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>kwargs</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.SsAaAtmMap.create_heatmap"> +<code class="descname">create_heatmap</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#SsAaAtmMap.create_heatmap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.SsAaAtmMap.create_heatmap" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.SsAaAtmMap.create_index"> +<code class="descname">create_index</code><span class="sig-paren">(</span><em>sequence</em>, <em>atom_types='min'</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#SsAaAtmMap.create_index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.SsAaAtmMap.create_index" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>atom_types</strong> – </li> +<li><strong>sequence</strong> – </li> +<li><strong>kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.protmap.SsAaAtmMap.reduce"> +<code class="descname">reduce</code><span class="sig-paren">(</span><em>groupby='min'</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/protmap.html#SsAaAtmMap.reduce"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.protmap.SsAaAtmMap.reduce" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>groupby</strong> – return: (Default value = “minâ€)</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.protmap.SsAaAtmMap.ss_types"> +<code class="descname">ss_types</code><em class="property"> = ('H', 'E', 'X')</em><a class="headerlink" href="#aria.conbox.protmap.SsAaAtmMap.ss_types" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.reader"> +<span id="aria-conbox-reader-module"></span><h2>aria.conbox.reader module<a class="headerlink" href="#module-aria.conbox.reader" title="Permalink to this headline">¶</a></h2> +<p>Reader objects</p> +<dl class="class"> +<dt id="aria.conbox.reader.Atom"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">Atom</code><span class="sig-paren">(</span><em>name</em>, <em>coords</em><span class="sig-paren">)</span><a class="headerlink" href="#aria.conbox.reader.Atom" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></p> +<dl class="attribute"> +<dt id="aria.conbox.reader.Atom.coords"> +<code class="descname">coords</code><a class="headerlink" href="#aria.conbox.reader.Atom.coords" title="Permalink to this definition">¶</a></dt> +<dd><p>Alias for field number 1</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.reader.Atom.name"> +<code class="descname">name</code><a class="headerlink" href="#aria.conbox.reader.Atom.name" title="Permalink to this definition">¶</a></dt> +<dd><p>Alias for field number 0</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.reader.ContactMapFile"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">ContactMapFile</code><span class="sig-paren">(</span><em>filepath</em>, <em>filetype</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#ContactMapFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.ContactMapFile" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.reader.MapFile" title="aria.conbox.reader.MapFile"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.reader.MapFile</span></code></a></p> +<p>Contact map file</p> +<dl class="method"> +<dt id="aria.conbox.reader.ContactMapFile.create_map"> +<code class="descname">create_map</code><span class="sig-paren">(</span><em>protein</em>, <em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#ContactMapFile.create_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.ContactMapFile.create_map" title="Permalink to this definition">¶</a></dt> +<dd><p>Initialize and fill Res - Res maps based on contactlist</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>protein</strong> – </li> +<li><strong>args</strong> – </li> +<li><strong>kwargs</strong> – </li> +<li><strong>*args</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.reader.ContactMapFile.update_map"> +<code class="descname">update_map</code><span class="sig-paren">(</span><em>resmap</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#ContactMapFile.update_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.ContactMapFile.update_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>resmap</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.reader.CulledPdbFile"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">CulledPdbFile</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#CulledPdbFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.CulledPdbFile" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.reader.RegexFile" title="aria.conbox.reader.RegexFile"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.reader.RegexFile</span></code></a></p> +<p>Reader class for culled pdb list</p> +<dl class="attribute"> +<dt id="aria.conbox.reader.CulledPdbFile.default"> +<code class="descname">default</code><em class="property"> = 'data/cullpdb/160427/cullpdb_pc25_res1.6_R0.25_d160427_chains3743'</em><a class="headerlink" href="#aria.conbox.reader.CulledPdbFile.default" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.reader.CulledPdbFile.filetype"> +<code class="descname">filetype</code><em class="property"> = 'cullpdb'</em><a class="headerlink" href="#aria.conbox.reader.CulledPdbFile.filetype" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.reader.CulledPdbFile.regex"> +<code class="descname">regex</code><em class="property"> = <_sre.SRE_Pattern object at 0x4d7b8a0></em><a class="headerlink" href="#aria.conbox.reader.CulledPdbFile.regex" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.reader.DistanceMapFile"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">DistanceMapFile</code><span class="sig-paren">(</span><em>filepath</em>, <em>filetype</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#DistanceMapFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.DistanceMapFile" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.reader.MapFile" title="aria.conbox.reader.MapFile"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.reader.MapFile</span></code></a></p> +<p>Distance matrix file</p> +<dl class="method"> +<dt id="aria.conbox.reader.DistanceMapFile.create_map"> +<code class="descname">create_map</code><span class="sig-paren">(</span><em>aa_seq</em>, <em>contactdef</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#DistanceMapFile.create_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.DistanceMapFile.create_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>aa_seq</strong> – param contactdef:</li> +<li><strong>kwargs</strong> – return:</li> +<li><strong>contactdef</strong> – </li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.reader.DistanceMapFile.update_map"> +<code class="descname">update_map</code><span class="sig-paren">(</span><em>resmap</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#DistanceMapFile.update_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.DistanceMapFile.update_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>resmap</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.reader.MapFile"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">MapFile</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#MapFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.MapFile" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.reader.RegexFile" title="aria.conbox.reader.RegexFile"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.reader.RegexFile</span></code></a></p> +<p>Abstract class related to all kind of protein maps</p> +<dl class="method"> +<dt id="aria.conbox.reader.MapFile.check_maptype"> +<code class="descname">check_maptype</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#MapFile.check_maptype"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.MapFile.check_maptype" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"></td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.reader.MapFile.check_type"> +<code class="descname">check_type</code><em class="property"> = True</em><a class="headerlink" href="#aria.conbox.reader.MapFile.check_type" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.reader.MapFile.create_map"> +<code class="descname">create_map</code><span class="sig-paren">(</span><em>protein</em>, <em>contactdef</em>, <em>flaglist=None</em>, <em>offset=0</em>, <em>sym=True</em>, <em>path=''</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#MapFile.create_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.MapFile.create_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>path</strong> – param protein: (Default value = “â€)</li> +<li><strong>contactdef</strong> – param flaglist:</li> +<li><strong>offset</strong> – param sym: (Default value = 0)</li> +<li><strong>kwargs</strong> – return:</li> +<li><strong>protein</strong> – </li> +<li><strong>flaglist</strong> – (Default value = None)</li> +<li><strong>sym</strong> – (Default value = True)</li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.reader.MapFile.read"> +<code class="descname">read</code><span class="sig-paren">(</span><em>protein</em>, <em>contactdef=5.0</em>, <em>groupby_method='min'</em>, <em>scsc=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#MapFile.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.MapFile.read" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>protein</strong> – param contactdef: (Default value = None)</li> +<li><strong>groupby_method</strong> – param scsc: (Default value = “minâ€)</li> +<li><strong>contactdef</strong> – (Default value = 5.0)</li> +<li><strong>scsc</strong> – (Default value = None)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.reader.MapFile.types"> +<code class="descname">types</code><em class="property"> = {'pconsc1': {'regex': <_sre.SRE_Pattern object>, 'score_field': 'ec_score'}, 'pconsc2': {'regex': <_sre.SRE_Pattern object>, 'score_field': 'ec_score'}, 'plmc': {'regex': <_sre.SRE_Pattern object at 0x4d72420>, 'score_field': 'plm_score'}, 'metapsicovhb': {'regex': <_sre.SRE_Pattern object at 0x4d7ec70>, 'score_field': 'hbscore'}, 'evfold': {'regex': <_sre.SRE_Pattern object at 0x4d74780>, 'score_field': 'ec_score'}, 'native': {'regex': <_sre.SRE_Pattern object at 0x4d7d8d0>, 'score_field': None}, 'psicov': {'regex': <_sre.SRE_Pattern object at 0x4d75410>, 'score_field': 'ec_score'}, 'metapsicov_stg1': {'regex': <_sre.SRE_Pattern object at 0x4d75410>, 'score_field': 'ec_score'}, 'metapsicov_stg2': {'regex': <_sre.SRE_Pattern object at 0x4d75410>, 'score_field': 'ec_score'}, 'empty': {'regex': <_sre.SRE_Pattern object>, 'score_field': None}, 'gremlin': {'regex': <_sre.SRE_Pattern object at 0x4d7de60>, 'score_field': 'scale_score'}, 'bbcontacts': {'regex': <_sre.SRE_Pattern object at 0x4d7f140>, 'score_field': None}, 'default_4': {'regex': <_sre.SRE_Pattern object>, 'score_field': None}, 'default_3': {'regex': <_sre.SRE_Pattern object at 0x4d76640>, 'score_field': None}, 'default_2': {'regex': <_sre.SRE_Pattern object>, 'score_field': 'score'}, 'default_1': {'regex': <_sre.SRE_Pattern object at 0x4d74500>, 'score_field': 'score'}, 'plm': {'regex': <_sre.SRE_Pattern object at 0x4d72420>, 'score_field': 'plm_score'}, 'pconsc': {'regex': <_sre.SRE_Pattern object>, 'score_field': 'ec_score'}, 'plmdca': {'regex': <_sre.SRE_Pattern object at 0x4d72420>, 'score_field': 'plm_score'}, 'native_full': {'regex': <_sre.SRE_Pattern object at 0x4d7d8d0>, 'score_field': None}, 'contactlist': {'regex': <_sre.SRE_Pattern object>, 'score_field': None}, 'plmev': {'regex': <_sre.SRE_Pattern object at 0x4d72420>, 'score_field': 'plm_score'}}</em><a class="headerlink" href="#aria.conbox.reader.MapFile.types" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.reader.MapFile.update_map"> +<code class="descname">update_map</code><span class="sig-paren">(</span><em>resmap</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#MapFile.update_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.MapFile.update_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>resmap</strong> – return:</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.reader.MapFileListReader"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">MapFileListReader</code><span class="sig-paren">(</span><em>cont_def=5.0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#MapFileListReader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.MapFileListReader" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Reader class for Map files</p> +<dl class="method"> +<dt id="aria.conbox.reader.MapFileListReader.clear"> +<code class="descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#MapFileListReader.clear"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.MapFileListReader.clear" title="Permalink to this definition">¶</a></dt> +<dd><p>Initiatize object from scratch object</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.reader.MapFileListReader.read"> +<code class="descname">read</code><span class="sig-paren">(</span><em>maps</em>, <em>maptypes=None</em>, <em>protein=None</em>, <em>scsc=None</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#MapFileListReader.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.MapFileListReader.read" title="Permalink to this definition">¶</a></dt> +<dd><p>Read contact map files. The generated maps will be accessible in +<cite>self.maps</cite></p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>maps</strong> – List of Map file paths</li> +<li><strong>maptypes</strong> – List of Map file types (Default value = None)</li> +<li><strong>protein</strong> (<em>ariaec.protein.Protein object</em><em> or </em><em>None</em><em>, </em><em>optional</em>) – (Default value = None)</li> +<li><strong>scsc</strong> (<em>dict</em><em>, </em><em>optional</em>) – Optional dictionary used for Atom Map reduction by selecting only +one atom in the side chain. (Default value = None)</li> +<li><strong>kwargs</strong> – Optional arguments used for MapFile readers</li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.reader.PDBFile"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">PDBFile</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#PDBFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.PDBFile" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.reader.MapFile" title="aria.conbox.reader.MapFile"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.reader.MapFile</span></code></a></p> +<p>PDB file</p> +<dl class="method"> +<dt id="aria.conbox.reader.PDBFile.create_map"> +<code class="descname">create_map</code><span class="sig-paren">(</span><em>protein</em>, <em>contactdef</em>, <em>groupby_method='min'</em>, <em>scsc=None</em>, <em>flaglist=None</em>, <em>sym=True</em>, <em>path=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#PDBFile.create_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.PDBFile.create_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>protein</strong> – </li> +<li><strong>contactdef</strong> – </li> +<li><strong>groupby_method</strong> – (Default value = “minâ€)</li> +<li><strong>scsc</strong> – (Default value = None)</li> +<li><strong>flaglist</strong> – (Default value = None)</li> +<li><strong>sym</strong> – (Default value = True)</li> +<li><strong>path</strong> – (Default value = “â€)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.reader.PDBFile.pdbreg"> +<code class="descname">pdbreg</code><em class="property"> = <_sre.SRE_Pattern object at 0x4d817b0></em><a class="headerlink" href="#aria.conbox.reader.PDBFile.pdbreg" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="method"> +<dt id="aria.conbox.reader.PDBFile.update_map"> +<code class="descname">update_map</code><span class="sig-paren">(</span><em>resmap</em>, <em>sym=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#PDBFile.update_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.PDBFile.update_map" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>resmap</strong> – param sym:</li> +<li><strong>sym</strong> – (Default value = True)</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.reader.RegexFile"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">RegexFile</code><span class="sig-paren">(</span><em>filepath</em>, <em>filetype=''</em>, <em>regex=''</em>, <em>sort=''</em>, <em>default=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#RegexFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.RegexFile" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>File which can be parsed with a regex</p> +<dl class="attribute"> +<dt id="aria.conbox.reader.RegexFile.filename"> +<code class="descname">filename</code><a class="headerlink" href="#aria.conbox.reader.RegexFile.filename" title="Permalink to this definition">¶</a></dt> +<dd><p>Get basename of filepath</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.reader.RegexFile.filepath"> +<code class="descname">filepath</code><a class="headerlink" href="#aria.conbox.reader.RegexFile.filepath" title="Permalink to this definition">¶</a></dt> +<dd><p>File path</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.reader.RegexFile.load"> +<code class="descname">load</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#RegexFile.load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.RegexFile.load" title="Permalink to this definition">¶</a></dt> +<dd><p>Fill lines with dictionary. Each key is a line number in the given file +:return: None</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.reader.TblDistFile"> +<em class="property">class </em><code class="descclassname">aria.conbox.reader.</code><code class="descname">TblDistFile</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/reader.html#TblDistFile"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.reader.TblDistFile" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.reader.RegexFile" title="aria.conbox.reader.RegexFile"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.reader.RegexFile</span></code></a></p> +<p>Reader class for TBL Distance restraint file</p> +<dl class="attribute"> +<dt id="aria.conbox.reader.TblDistFile.filetype"> +<code class="descname">filetype</code><em class="property"> = 'tbldist'</em><a class="headerlink" href="#aria.conbox.reader.TblDistFile.filetype" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.reader.TblDistFile.regex"> +<code class="descname">regex</code><em class="property"> = <_sre.SRE_Pattern object at 0x4d7c8b0></em><a class="headerlink" href="#aria.conbox.reader.TblDistFile.regex" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.settings"> +<span id="aria-conbox-settings-module"></span><h2>aria.conbox.settings module<a class="headerlink" href="#module-aria.conbox.settings" title="Permalink to this headline">¶</a></h2> +<p>Settings section</p> +<dl class="class"> +<dt id="aria.conbox.settings.AriaEcSettings"> +<em class="property">class </em><code class="descclassname">aria.conbox.settings.</code><code class="descname">AriaEcSettings</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/settings.html#AriaEcSettings"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <a class="reference internal" href="#aria.conbox.settings.Settings" title="aria.conbox.settings.Settings"><code class="xref py py-class docutils literal"><span class="pre">aria.conbox.settings.Settings</span></code></a></p> +<p>Settings object for ariaec +@DynamicAttrs</p> +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.ARIAPROJ_TEMPLATE"> +<code class="descname">ARIAPROJ_TEMPLATE</code><em class="property"> = 'templates/aria_project_v2.3.0.xml'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.ARIAPROJ_TEMPLATE" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.INTERLOWERBOUNDS"> +<code class="descname">INTERLOWERBOUNDS</code><em class="property"> = 'data/pdbdists/lowerbounds.inter.p'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.INTERLOWERBOUNDS" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.INTERTARGET"> +<code class="descname">INTERTARGET</code><em class="property"> = 'data/pdbdists/targetdists.inter.p'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.INTERTARGET" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.INTERUPPERBOUNDS"> +<code class="descname">INTERUPPERBOUNDS</code><em class="property"> = 'data/pdbdists/upperbounds.inter.p'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.INTERUPPERBOUNDS" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.INTRALOWERBOUNDS"> +<code class="descname">INTRALOWERBOUNDS</code><em class="property"> = 'data/pdbdists/lowerbounds.intra.p'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.INTRALOWERBOUNDS" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.INTRATARGET"> +<code class="descname">INTRATARGET</code><em class="property"> = 'data/pdbdists/targetdists.intra.p'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.INTRATARGET" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.INTRAUPPERBOUNDS"> +<code class="descname">INTRAUPPERBOUNDS</code><em class="property"> = 'data/pdbdists/upperbounds.intra.p'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.INTRAUPPERBOUNDS" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.SCSC_MIN"> +<code class="descname">SCSC_MIN</code><em class="property"> = 'data/scsc_min.p'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.SCSC_MIN" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.SECTIONS"> +<code class="descname">SECTIONS</code><em class="property"> = ('main', 'setup', 'maplot', 'bbconv', 'contactdef', 'pdbqual', 'pdbdist', 'analysis', 'tbl2xml', 'pdbstat')</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.SECTIONS" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.SS_DIST"> +<code class="descname">SS_DIST</code><em class="property"> = 'data/ss_dist.txt'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.SS_DIST" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.TOPO"> +<code class="descname">TOPO</code><em class="property"> = 'data/topallhdg5.3.pro'</em><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.TOPO" title="Permalink to this definition">¶</a></dt> +<dd></dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.infra"> +<code class="descname">infra</code><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.infra" title="Permalink to this definition">¶</a></dt> +<dd><p>Infrastructure for a specific command +:return:</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.settings.AriaEcSettings.load_config"> +<code class="descname">load_config</code><span class="sig-paren">(</span><em>configpath</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/settings.html#AriaEcSettings.load_config"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.load_config" title="Permalink to this definition">¶</a></dt> +<dd><table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>configpath</strong> – param kwargs:</li> +<li><strong>**kwargs</strong> – </li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.settings.AriaEcSettings.make_infra"> +<code class="descname">make_infra</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/settings.html#AriaEcSettings.make_infra"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.make_infra" title="Permalink to this definition">¶</a></dt> +<dd><p>Generate infrastructure</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.scsc_min"> +<code class="descname">scsc_min</code><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.scsc_min" title="Permalink to this definition">¶</a></dt> +<dd><p>Get contact index for side chains in package or config file +:return:</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.ssdist"> +<code class="descname">ssdist</code><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.ssdist" title="Permalink to this definition">¶</a></dt> +<dd><p>Get distance file for secondary structures in the package or in config +file +:return:</p> +</dd></dl> + +<dl class="attribute"> +<dt id="aria.conbox.settings.AriaEcSettings.template"> +<code class="descname">template</code><a class="headerlink" href="#aria.conbox.settings.AriaEcSettings.template" title="Permalink to this definition">¶</a></dt> +<dd><p>Get template files in config file or in the package +:return:</p> +</dd></dl> + +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.settings.Setting"> +<em class="property">class </em><code class="descclassname">aria.conbox.settings.</code><code class="descname">Setting</code><a class="reference internal" href="_modules/aria/conbox/settings.html#Setting"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.settings.Setting" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Main setting object with args and config section</p> +</dd></dl> + +<dl class="class"> +<dt id="aria.conbox.settings.Settings"> +<em class="property">class </em><code class="descclassname">aria.conbox.settings.</code><code class="descname">Settings</code><span class="sig-paren">(</span><em>sections</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/settings.html#Settings"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.settings.Settings" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Group settings with each section corresponding to a Setting object</p> +<dl class="method"> +<dt id="aria.conbox.settings.Settings.load_config"> +<code class="descname">load_config</code><span class="sig-paren">(</span><em>configpath</em>, <em>pkg=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/settings.html#Settings.load_config"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.settings.Settings.load_config" title="Permalink to this definition">¶</a></dt> +<dd><p>Use ConfigParser module to load config sections</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> +<li><strong>pkg</strong> – file is inside the package (Default value = False)</li> +<li><strong>configpath</strong> – return:</li> +</ul> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.settings.Settings.write_config"> +<code class="descname">write_config</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/settings.html#Settings.write_config"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.settings.Settings.write_config" title="Permalink to this definition">¶</a></dt> +<dd><p>Write config of all sections into another file</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> – </td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox.setup"> +<span id="aria-conbox-setup-module"></span><h2>aria.conbox.setup module<a class="headerlink" href="#module-aria.conbox.setup" title="Permalink to this headline">¶</a></h2> +<p>Input/Output aria_ec scripts</p> +<dl class="class"> +<dt id="aria.conbox.setup.AriaEcSetup"> +<em class="property">class </em><code class="descclassname">aria.conbox.setup.</code><code class="descname">AriaEcSetup</code><span class="sig-paren">(</span><em>settings</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/setup.html#AriaEcSetup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.setup.AriaEcSetup" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p> +<p>Aria Ec Setup protocol</p> +<dl class="method"> +<dt id="aria.conbox.setup.AriaEcSetup.run"> +<code class="descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/setup.html#AriaEcSetup.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.setup.AriaEcSetup.run" title="Permalink to this definition">¶</a></dt> +<dd><p>main method +:return:</p> +</dd></dl> + +<dl class="method"> +<dt id="aria.conbox.setup.AriaEcSetup.write_optional_files"> +<code class="descname">write_optional_files</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/aria/conbox/setup.html#AriaEcSetup.write_optional_files"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#aria.conbox.setup.AriaEcSetup.write_optional_files" title="Permalink to this definition">¶</a></dt> +<dd><p>Write filtered contacts & distance maps (.csv)</p> +</dd></dl> + +</dd></dl> + +</div> +<div class="section" id="module-aria.conbox"> +<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-aria.conbox" title="Permalink to this headline">¶</a></h2> +<p>ARIA Evolutive Contact toolbox</p> +</div> +</div> + + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'./', + VERSION:'0.3', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/docs/_build/html/glossary.html b/examples-dev/olds/_build/html/ariaec.test.html similarity index 77% rename from docs/_build/html/glossary.html rename to examples-dev/olds/_build/html/ariaec.test.html index fc38f6c..b22619c 100644 --- a/docs/_build/html/glossary.html +++ b/examples-dev/olds/_build/html/ariaec.test.html @@ -8,7 +8,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title><no title> — ARIA 4 documentation</title> + <title>ariaec.test package — Aria-EC 0.3 documentation</title> @@ -35,8 +35,7 @@ <link rel="index" title="Index" href="genindex.html"/> <link rel="search" title="Search" href="search.html"/> - <link rel="copyright" title="Copyright" href="copyright.html"/> - <link rel="top" title="ARIA 4 documentation" href="index.html"/> + <link rel="top" title="Aria-EC 0.3 documentation" href="index.html"/> <script src="_static/js/modernizr.min.js"></script> @@ -55,7 +54,7 @@ - <a href="index.html" class="icon icon-home"> ARIA + <a href="index.html" class="icon icon-home"> Aria-EC @@ -65,7 +64,7 @@ <div class="version"> - 2 + 0.3 </div> @@ -90,7 +89,11 @@ <!-- Local TOC --> - <div class="local-toc"><ul class="simple"> + <div class="local-toc"><ul> +<li><a class="reference internal" href="#">ariaec.test package</a><ul> +<li><a class="reference internal" href="#module-contents">Module contents</a></li> +</ul> +</li> </ul> </div> @@ -105,7 +108,7 @@ <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="index.html">ARIA</a> + <a href="index.html">Aria-EC</a> </nav> @@ -135,13 +138,13 @@ <li><a href="index.html">Docs</a> »</li> - <li><no title></li> + <li>ariaec.test package</li> <li class="wy-breadcrumbs-aside"> - <a href="_sources/glossary.rst.txt" rel="nofollow"> View page source</a> + <a href="_sources/ariaec.test.rst.txt" rel="nofollow"> View page source</a> </li> @@ -154,7 +157,13 @@ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> - + <div class="section" id="ariaec-test-package"> +<h1>ariaec.test package<a class="headerlink" href="#ariaec-test-package" title="Permalink to this headline">¶</a></h1> +<div class="section" id="module-contents"> +<h2>Module contents<a class="headerlink" href="#module-contents" title="Permalink to this headline">¶</a></h2> +</div> +</div> + </div> <div class="articleComments"> @@ -168,7 +177,7 @@ <div role="contentinfo"> <p> - © <a href="copyright.html">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. + © Copyright 2017, Fabrice Allain, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. </p> </div> @@ -190,7 +199,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT:'./', - VERSION:'4', + VERSION:'0.3', COLLAPSE_INDEX:false, FILE_SUFFIX:'.html', HAS_SOURCE: true, diff --git a/examples-dev/olds/_build/html/genindex.html b/examples-dev/olds/_build/html/genindex.html new file mode 100644 index 0000000..7dab38f --- /dev/null +++ b/examples-dev/olds/_build/html/genindex.html @@ -0,0 +1,905 @@ + + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Index — Aria-EC 0.3 documentation</title> + + + + + + + + + + + + + + + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + + + + + + <link rel="index" title="Index" + href="#"/> + <link rel="search" title="Search" href="search.html"/> + <link rel="top" title="Aria-EC 0.3 documentation" href="index.html"/> + + + <script src="_static/js/modernizr.min.js"></script> + +</head> + +<body class="wy-body-for-nav" role="document"> + + + <div class="wy-grid-for-nav"> + + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search"> + + + + <a href="index.html" class="icon icon-home"> Aria-EC + + + + </a> + + + + + <div class="version"> + 0.3 + </div> + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <!-- Local TOC --> + <div class="local-toc"></div> + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">Aria-EC</a> + + </nav> + + + + <div class="wy-nav-content"> + <div class="rst-content"> + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html">Docs</a> »</li> + + <li>Index</li> + + + <li class="wy-breadcrumbs-aside"> + + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + +<h1 id="index">Index</h1> + +<div class="genindex-jumpbox"> + <a href="#A"><strong>A</strong></a> + | <a href="#B"><strong>B</strong></a> + | <a href="#C"><strong>C</strong></a> + | <a href="#D"><strong>D</strong></a> + | <a href="#E"><strong>E</strong></a> + | <a href="#F"><strong>F</strong></a> + | <a href="#G"><strong>G</strong></a> + | <a href="#H"><strong>H</strong></a> + | <a href="#I"><strong>I</strong></a> + | <a href="#L"><strong>L</strong></a> + | <a href="#M"><strong>M</strong></a> + | <a href="#N"><strong>N</strong></a> + | <a href="#P"><strong>P</strong></a> + | <a href="#R"><strong>R</strong></a> + | <a href="#S"><strong>S</strong></a> + | <a href="#T"><strong>T</strong></a> + | <a href="#U"><strong>U</strong></a> + | <a href="#V"><strong>V</strong></a> + | <a href="#W"><strong>W</strong></a> + +</div> +<h2 id="A">A</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protmap.AaAtmMap">AaAtmMap (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.AaMap">AaMap (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.all_reg">all_reg (aria.conbox.protmap.ProteinMap attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProtMapCollection.allcontactmap">allcontactmap (aria.conbox.protmap.ProtMapCollection attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProtMapCollection.alldistmap">alldistmap (aria.conbox.protmap.ProtMapCollection attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProtMapCollection.allscoremap">allscoremap (aria.conbox.protmap.ProtMapCollection attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.AminoAcidSequence">AminoAcidSequence (class in aria.conbox.protein)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.analysis">analysis() (aria.conbox.commands.AriaEcCommands method)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox">aria.conbox (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.analysis">aria.conbox.analysis (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.commands">aria.conbox.commands (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.converter">aria.conbox.converter (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.maplot">aria.conbox.maplot (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.ndconv">aria.conbox.ndconv (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.pdbdist">aria.conbox.pdbdist (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.pdbqual">aria.conbox.pdbqual (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.protein">aria.conbox.protein (module)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#module-aria.conbox.protmap">aria.conbox.protmap (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.reader">aria.conbox.reader (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.settings">aria.conbox.settings (module)</a> +</li> + <li><a href="ariaec.html#module-aria.conbox.setup">aria.conbox.setup (module)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcBbConverter">AriaEcBbConverter (class in aria.conbox.converter)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands">AriaEcCommands (class in aria.conbox.commands)</a> +</li> + <li><a href="ariaec.html#aria.conbox.maplot.AriaEcContactMap">AriaEcContactMap (class in aria.conbox.maplot)</a> +</li> + <li><a href="ariaec.html#aria.conbox.pdbqual.AriaEcPdbqual">AriaEcPdbqual (class in aria.conbox.pdbqual)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings">AriaEcSettings (class in aria.conbox.settings)</a> +</li> + <li><a href="ariaec.html#aria.conbox.setup.AriaEcSetup">AriaEcSetup (class in aria.conbox.setup)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter">AriaEcXMLConverter (class in aria.conbox.converter)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.ARIAPROJ_TEMPLATE">ARIAPROJ_TEMPLATE (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter">AriaXMLConverter (class in aria.conbox.converter)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.atm_list">atm_list() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.atm_product">atm_product() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.AtmMap">AtmMap (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.Atom">Atom (class in aria.conbox.reader)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="B">B</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.bbconv">bbconv() (aria.conbox.commands.AriaEcCommands method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="C">C</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.commands.check_file">check_file() (in module aria.conbox.commands)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.check_filetype">check_filetype() (aria.conbox.protein.SsList method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFile.check_maptype">check_maptype() (aria.conbox.reader.MapFile method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFile.check_type">check_type (aria.conbox.reader.MapFile attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.check_type">check_type() (aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter.clash_dict">clash_dict (aria.conbox.protmap.MapFilter attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.classification_metrics">classification_metrics() (aria.conbox.protmap.ProteinMap static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFileListReader.clear">clear() (aria.conbox.reader.MapFileListReader method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.analysis.colscatter">colscatter() (in module aria.conbox.analysis)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.command_list">command_list (aria.conbox.commands.AriaEcCommands attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.compare_contactmap">compare_contactmap() (aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.compareplot">compareplot() (aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcBbConverter.compute_diversityvalue">compute_diversityvalue() (aria.conbox.converter.AriaEcBbConverter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter.cons_filter">cons_filter() (aria.conbox.protmap.MapFilter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.contact_list">contact_list() (aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.AaAtmMap.contact_map">contact_map() (aria.conbox.protmap.AaAtmMap method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.protmap.AaMap.contact_map">(aria.conbox.protmap.AaMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.contact_map">(aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResAtmMap.contact_map">(aria.conbox.protmap.ResAtmMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResMap.contact_map">(aria.conbox.protmap.ResMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.SsAaAtmMap.contact_map">(aria.conbox.protmap.SsAaAtmMap method)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.contact_types">contact_types (aria.conbox.commands.AriaEcCommands attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.ContactMapFile">ContactMapFile (class in aria.conbox.reader)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.contactset">contactset() (aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.Atom.coords">coords (aria.conbox.reader.Atom attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.AaAtmMap.copy">copy() (aria.conbox.protmap.AaAtmMap method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.protmap.AaMap.copy">(aria.conbox.protmap.AaMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.AtmMap.copy">(aria.conbox.protmap.AtmMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.copy">(aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.copy">(aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResAtmMap.copy">(aria.conbox.protmap.ResAtmMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResMap.copy">(aria.conbox.protmap.ResMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.SsAaAtmMap.copy">(aria.conbox.protmap.SsAaAtmMap method)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protmap.AaAtmMap.create_heatmap">create_heatmap() (aria.conbox.protmap.AaAtmMap method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.protmap.AaMap.create_heatmap">(aria.conbox.protmap.AaMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.create_heatmap">(aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResAtmMap.create_heatmap">(aria.conbox.protmap.ResAtmMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResMap.create_heatmap">(aria.conbox.protmap.ResMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.SsAaAtmMap.create_heatmap">(aria.conbox.protmap.SsAaAtmMap method)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.protmap.AaAtmMap.create_index">create_index() (aria.conbox.protmap.AaAtmMap method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.protmap.AaMap.create_index">(aria.conbox.protmap.AaMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.AtmMap.create_index">(aria.conbox.protmap.AtmMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.create_index">(aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResAtmMap.create_index">(aria.conbox.protmap.ResAtmMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResMap.create_index">(aria.conbox.protmap.ResMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.SsAaAtmMap.create_index">(aria.conbox.protmap.SsAaAtmMap method)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.reader.ContactMapFile.create_map">create_map() (aria.conbox.reader.ContactMapFile method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.reader.DistanceMapFile.create_map">(aria.conbox.reader.DistanceMapFile method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFile.create_map">(aria.conbox.reader.MapFile method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.PDBFile.create_map">(aria.conbox.reader.PDBFile method)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.create_settings">create_settings() (aria.conbox.commands.AriaEcCommands method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.CulledPdbFile">CulledPdbFile (class in aria.conbox.reader)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter.cys_filter">cys_filter() (aria.conbox.protmap.MapFilter static method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="D">D</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.reader.CulledPdbFile.default">default (aria.conbox.reader.CulledPdbFile attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.default_confile">default_confile (aria.conbox.commands.AriaEcCommands attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.deff">deff() (aria.conbox.converter.AriaXMLConverter static method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.desc_list">desc_list (aria.conbox.commands.AriaEcCommands attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.distance_method">distance_method (aria.conbox.protmap.ProteinMap attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.DistanceMapFile">DistanceMapFile (class in aria.conbox.reader)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProtMapCollection.distmap">distmap (aria.conbox.protmap.ProtMapCollection attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="E">E</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protein.AminoAcidSequence.end_reg">end_reg (aria.conbox.protein.AminoAcidSequence attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.analysis.EnsembleAnalysis">EnsembleAnalysis (class in aria.conbox.analysis)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="F">F</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.reader.RegexFile.filename">filename (aria.conbox.reader.RegexFile attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.RegexFile.filepath">filepath (aria.conbox.reader.RegexFile attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.reader.CulledPdbFile.filetype">filetype (aria.conbox.reader.CulledPdbFile attribute)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.reader.TblDistFile.filetype">(aria.conbox.reader.TblDistFile attribute)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter.filter_types">filter_types (aria.conbox.protmap.MapFilter attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="G">G</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.get_dist">get_dist() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.pdbdist.PDBDist.get_proteinblocks">get_proteinblocks() (aria.conbox.pdbdist.PDBDist static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.pdbdist.PDBDist.get_secstructs">get_secstructs() (aria.conbox.pdbdist.PDBDist static method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="H">H</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.heavy_reg">heavy_reg (aria.conbox.protmap.ProteinMap attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protein.AminoAcidSequence.humanidx">humanidx (aria.conbox.protein.AminoAcidSequence attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="I">I</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protein.SsList.index">index (aria.conbox.protein.SsList attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.indxplus_reg">indxplus_reg (aria.conbox.protein.SsList attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.infra">infra (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.INTERLOWERBOUNDS">INTERLOWERBOUNDS (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.INTERTARGET">INTERTARGET (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.INTERUPPERBOUNDS">INTERUPPERBOUNDS (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.INTRALOWERBOUNDS">INTRALOWERBOUNDS (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.INTRATARGET">INTRATARGET (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.INTRAUPPERBOUNDS">INTRAUPPERBOUNDS (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="L">L</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.reader.RegexFile.load">load() (aria.conbox.reader.RegexFile method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.load_config">load_config() (aria.conbox.settings.AriaEcSettings method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.settings.Settings.load_config">(aria.conbox.settings.Settings method)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="M">M</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.commands.main">main() (in module aria.conbox.commands)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.make_infra">make_infra() (aria.conbox.settings.AriaEcSettings method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map">Map (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFile">MapFile (class in aria.conbox.reader)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFileListReader">MapFileListReader (class in aria.conbox.reader)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter">MapFilter (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.maplot">maplot (aria.conbox.protmap.ProteinMap attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.maplot">maplot() (aria.conbox.commands.AriaEcCommands method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.molecule">molecule (aria.conbox.converter.AriaXMLConverter attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.mtype_choices">mtype_choices (aria.conbox.protmap.Map attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="N">N</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.reader.Atom.name">name (aria.conbox.reader.Atom attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter.nd_filter">nd_filter() (aria.conbox.protmap.MapFilter method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.neighcontact">neighcontact() (aria.conbox.converter.AriaEcXMLConverter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.neighcontacts">neighcontacts() (aria.conbox.converter.AriaEcXMLConverter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.ndconv.net_deconv">net_deconv() (in module aria.conbox.ndconv)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="P">P</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.analysis.EnsembleAnalysis.pca_projection">pca_projection() (aria.conbox.analysis.EnsembleAnalysis static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.pdbdist.PDBDist">PDBDist (class in aria.conbox.pdbdist)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.pdbdist">pdbdist() (aria.conbox.commands.AriaEcCommands method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.pdbdist.PDBDist.pdbdists">pdbdists() (aria.conbox.pdbdist.PDBDist method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.PDBFile">PDBFile (class in aria.conbox.reader)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.pdbqual">pdbqual() (aria.conbox.commands.AriaEcCommands method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.PDBFile.pdbreg">pdbreg (aria.conbox.reader.PDBFile attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.pdbstat">pdbstat() (aria.conbox.commands.AriaEcCommands method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.plotflush">plotflush() (aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter.pos_filter">pos_filter() (aria.conbox.protmap.MapFilter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.Protein">Protein (class in aria.conbox.protein)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap">ProteinMap (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProtMapCollection">ProtMapCollection (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.psipred2_reg">psipred2_reg (aria.conbox.protein.SsList attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.psipred3_reg">psipred3_reg (aria.conbox.protein.SsList attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.psipred_reg">psipred_reg (aria.conbox.protein.SsList attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="R">R</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protein.AminoAcidSequence.read">read() (aria.conbox.protein.AminoAcidSequence method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.protein.SsList.read">(aria.conbox.protein.SsList method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFile.read">(aria.conbox.reader.MapFile method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFileListReader.read">(aria.conbox.reader.MapFileListReader method)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.read_indextableplus">read_indextableplus() (aria.conbox.protein.SsList method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.read_pdb">read_pdb() (aria.conbox.converter.AriaXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.read_psipred">read_psipred() (aria.conbox.protein.SsList method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.read_seq">read_seq() (aria.conbox.converter.AriaXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.read_ssdist">read_ssdist() (aria.conbox.protein.SsList method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.ReadableFile">ReadableFile (class in aria.conbox.commands)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.AminoAcidSequence.readtopo">readtopo() (aria.conbox.protein.AminoAcidSequence method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.AaMap.reduce">reduce() (aria.conbox.protmap.AaMap method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.protmap.AtmMap.reduce">(aria.conbox.protmap.AtmMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.reduce">(aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.reduce">(aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResAtmMap.reduce">(aria.conbox.protmap.ResAtmMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.SsAaAtmMap.reduce">(aria.conbox.protmap.SsAaAtmMap method)</a> +</li> + </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.reader.CulledPdbFile.regex">regex (aria.conbox.reader.CulledPdbFile attribute)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.reader.TblDistFile.regex">(aria.conbox.reader.TblDistFile attribute)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.reader.RegexFile">RegexFile (class in aria.conbox.reader)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.remove">remove() (aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.report">report() (aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResAtmMap">ResAtmMap (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResMap">ResMap (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.AminoAcidSequence.restatement_reg">restatement_reg (aria.conbox.protein.AminoAcidSequence attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.analysis.EnsembleAnalysis.run">run() (aria.conbox.analysis.EnsembleAnalysis method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.run">(aria.conbox.commands.AriaEcCommands method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcBbConverter.run">(aria.conbox.converter.AriaEcBbConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.maplot.AriaEcContactMap.run">(aria.conbox.maplot.AriaEcContactMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.pdbdist.PDBDist.run">(aria.conbox.pdbdist.PDBDist method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.pdbqual.AriaEcPdbqual.run">(aria.conbox.pdbqual.AriaEcPdbqual method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.setup.AriaEcSetup.run">(aria.conbox.setup.AriaEcSetup method)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.run_tbl2xml">run_tbl2xml() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="S">S</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.saveplot">saveplot() (aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.SCSC_MIN">SCSC_MIN (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.scsc_min">scsc_min (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.SECTIONS">SECTIONS (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.seq_sublist">seq_sublist() (aria.conbox.protein.SsList method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.sequence">sequence (aria.conbox.protein.SsList attribute)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.protmap.AaMap.sequence">(aria.conbox.protmap.AaMap attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.sequence">(aria.conbox.protmap.ProteinMap attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResAtmMap.sequence">(aria.conbox.protmap.ResAtmMap attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ResMap.sequence">(aria.conbox.protmap.ResMap attribute)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.protein.Protein.set_aa_sequence">set_aa_sequence() (aria.conbox.protein.Protein method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.Protein.set_sec_struct">set_sec_struct() (aria.conbox.protein.Protein method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.set_value">set_value() (aria.conbox.protmap.Map method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.settings.Setting">Setting (class in aria.conbox.settings)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.Settings">Settings (class in aria.conbox.settings)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.setup">setup() (aria.conbox.commands.AriaEcCommands method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.sortedset">sortedset() (aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.SS_DIST">SS_DIST (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.ss_dist_reg">ss_dist_reg (aria.conbox.protein.SsList attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.SsAaAtmMap.ss_types">ss_types (aria.conbox.protmap.SsAaAtmMap attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.SsAaAtmMap">SsAaAtmMap (class in aria.conbox.protmap)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter.ssclash_filter">ssclash_filter() (aria.conbox.protmap.MapFilter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.ssdist">ssdist (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList">SsList (class in aria.conbox.protein)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.AminoAcidSequence.startres_reg">startres_reg (aria.conbox.protein.AminoAcidSequence attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.subfill">subfill() (aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.Protein.sync_index">sync_index() (aria.conbox.protein.Protein static method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="T">T</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.targetdistmaps">targetdistmaps() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.commands.AriaEcCommands.tbl2xml">tbl2xml() (aria.conbox.commands.AriaEcCommands method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.tbl2xml">(aria.conbox.converter.AriaEcXMLConverter static method)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.reader.TblDistFile">TblDistFile (class in aria.conbox.reader)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.template">template (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.protmap.Map.to_series">to_series() (aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.topmap">topmap() (aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.AriaEcSettings.TOPO">TOPO (aria.conbox.settings.AriaEcSettings attribute)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.AminoAcidSequence.topology">topology (aria.conbox.protein.AminoAcidSequence attribute)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.protein.Protein.topology">(aria.conbox.protein.Protein attribute)</a> +</li> + </ul></li> + <li><a href="ariaec.html#aria.conbox.reader.MapFile.types">types (aria.conbox.reader.MapFile attribute)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="U">U</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.upd_mol">upd_mol() (aria.conbox.converter.AriaXMLConverter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.Map.update">update() (aria.conbox.protmap.Map method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.ContactMapFile.update_map">update_map() (aria.conbox.reader.ContactMapFile method)</a> + + <ul> + <li><a href="ariaec.html#aria.conbox.reader.DistanceMapFile.update_map">(aria.conbox.reader.DistanceMapFile method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.MapFile.update_map">(aria.conbox.reader.MapFile method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.reader.PDBFile.update_map">(aria.conbox.reader.PDBFile method)</a> +</li> + </ul></li> + </ul></td> +</tr></table> + +<h2 id="V">V</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.analysis.EnsembleAnalysis.violation_analysis">violation_analysis() (aria.conbox.analysis.EnsembleAnalysis static method)</a> +</li> + </ul></td> +</tr></table> + +<h2 id="W">W</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.write_ariaproject">write_ariaproject() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.settings.Settings.write_config">write_config() (aria.conbox.settings.Settings method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.ProteinMap.write_contacts">write_contacts() (aria.conbox.protmap.ProteinMap method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.write_dihedral_tbl">write_dihedral_tbl() (aria.conbox.converter.AriaXMLConverter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.write_dist_xml">write_dist_xml() (aria.conbox.converter.AriaXMLConverter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protmap.MapFilter.write_filtout">write_filtout() (aria.conbox.protmap.MapFilter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.write_hb_tbl">write_hb_tbl() (aria.conbox.converter.AriaXMLConverter method)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.write_map_restraint">write_map_restraint() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.write_maplist_restraints">write_maplist_restraints() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.setup.AriaEcSetup.write_optional_files">write_optional_files() (aria.conbox.setup.AriaEcSetup method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.Protein.write_seq">write_seq() (aria.conbox.protein.Protein method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.write_ssdist_tbl">write_ssdist_tbl() (aria.conbox.converter.AriaXMLConverter static method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.protein.SsList.write_ssfasta">write_ssfasta() (aria.conbox.protein.SsList method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaEcXMLConverter.write_tbl_restraints">write_tbl_restraints() (aria.conbox.converter.AriaEcXMLConverter method)</a> +</li> + <li><a href="ariaec.html#aria.conbox.converter.AriaXMLConverter.write_xmlseq">write_xmlseq() (aria.conbox.converter.AriaXMLConverter method)</a> +</li> + </ul></td> +</tr></table> + + + + </div> + <div class="articleComments"> + + </div> + </div> + <footer> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2017, Fabrice Allain, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + + + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT:'./', + VERSION:'0.3', + COLLAPSE_INDEX:false, + FILE_SUFFIX:'.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' + }; + </script> + <script type="text/javascript" src="_static/jquery.js"></script> + <script type="text/javascript" src="_static/underscore.js"></script> + <script type="text/javascript" src="_static/doctools.js"></script> + <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + + + + + + <script type="text/javascript" src="_static/js/theme.js"></script> + + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.StickyNav.enable(); + }); + </script> + + +</body> +</html> \ No newline at end of file diff --git a/docs/_build/html/index.html b/examples-dev/olds/_build/html/index.html similarity index 84% rename from docs/_build/html/index.html rename to examples-dev/olds/_build/html/index.html index 4dc4239..775a39d 100644 --- a/docs/_build/html/index.html +++ b/examples-dev/olds/_build/html/index.html @@ -8,7 +8,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Welcome to ARIAEC’s documentation! — ARIA 4 documentation</title> + <title>Welcome to Aria-EC’s documentation! — Aria-EC 0.3 documentation</title> @@ -35,8 +35,7 @@ <link rel="index" title="Index" href="genindex.html"/> <link rel="search" title="Search" href="search.html"/> - <link rel="copyright" title="Copyright" href="copyright.html"/> - <link rel="top" title="ARIA 4 documentation" href="#"/> + <link rel="top" title="Aria-EC 0.3 documentation" href="#"/> <script src="_static/js/modernizr.min.js"></script> @@ -55,7 +54,7 @@ - <a href="#" class="icon icon-home"> ARIA + <a href="#" class="icon icon-home"> Aria-EC @@ -65,7 +64,7 @@ <div class="version"> - 2 + 0.3 </div> @@ -91,7 +90,7 @@ <!-- Local TOC --> <div class="local-toc"><ul> -<li><a class="reference internal" href="#">Welcome to ARIAEC’s documentation!</a></li> +<li><a class="reference internal" href="#">Welcome to Aria-EC’s documentation!</a></li> <li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li> </ul> </div> @@ -107,7 +106,7 @@ <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="#">ARIA</a> + <a href="#">Aria-EC</a> </nav> @@ -137,7 +136,7 @@ <li><a href="#">Docs</a> »</li> - <li>Welcome to ARIAEC’s documentation!</li> + <li>Welcome to Aria-EC’s documentation!</li> <li class="wy-breadcrumbs-aside"> @@ -156,8 +155,8 @@ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> - <div class="section" id="welcome-to-ariaec-s-documentation"> -<h1>Welcome to ARIAEC’s documentation!<a class="headerlink" href="#welcome-to-ariaec-s-documentation" title="Permalink to this headline">¶</a></h1> + <div class="section" id="welcome-to-aria-ec-s-documentation"> +<h1>Welcome to Aria-EC’s documentation!<a class="headerlink" href="#welcome-to-aria-ec-s-documentation" title="Permalink to this headline">¶</a></h1> <div class="toctree-wrapper compound"> </div> </div> @@ -183,7 +182,7 @@ <div role="contentinfo"> <p> - © <a href="copyright.html">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. + © Copyright 2017, Fabrice Allain, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. </p> </div> @@ -205,7 +204,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT:'./', - VERSION:'4', + VERSION:'0.3', COLLAPSE_INDEX:false, FILE_SUFFIX:'.html', HAS_SOURCE: true, diff --git a/docs/_build/html/modules.html b/examples-dev/olds/_build/html/modules.html similarity index 89% rename from docs/_build/html/modules.html rename to examples-dev/olds/_build/html/modules.html index 931ee32..215b78d 100644 --- a/docs/_build/html/modules.html +++ b/examples-dev/olds/_build/html/modules.html @@ -8,7 +8,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>ariaec — ARIA 4 documentation</title> + <title>ariaec — Aria-EC 0.3 documentation</title> @@ -35,8 +35,7 @@ <link rel="index" title="Index" href="genindex.html"/> <link rel="search" title="Search" href="search.html"/> - <link rel="copyright" title="Copyright" href="copyright.html"/> - <link rel="top" title="ARIA 4 documentation" href="index.html"/> + <link rel="top" title="Aria-EC 0.3 documentation" href="index.html"/> <script src="_static/js/modernizr.min.js"></script> @@ -55,7 +54,7 @@ - <a href="index.html" class="icon icon-home"> ARIA + <a href="index.html" class="icon icon-home"> Aria-EC @@ -65,7 +64,7 @@ <div class="version"> - 2 + 0.3 </div> @@ -106,7 +105,7 @@ <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="index.html">ARIA</a> + <a href="index.html">Aria-EC</a> </nav> @@ -174,7 +173,7 @@ <div role="contentinfo"> <p> - © <a href="copyright.html">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. + © Copyright 2017, Fabrice Allain, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. </p> </div> @@ -196,7 +195,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT:'./', - VERSION:'4', + VERSION:'0.3', COLLAPSE_INDEX:false, FILE_SUFFIX:'.html', HAS_SOURCE: true, diff --git a/examples-dev/olds/_build/html/objects.inv b/examples-dev/olds/_build/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..c900d64e5731d3f63b395fad172e6a70709faee8 GIT binary patch literal 1991 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 ZK4|Fu`SuX(uDRQm?&ouB^1n2T?veVp*#Q6m literal 0 HcmV?d00001 diff --git a/docs/_build/html/copyright.html b/examples-dev/olds/_build/html/py-modindex.html similarity index 50% rename from docs/_build/html/copyright.html rename to examples-dev/olds/_build/html/py-modindex.html index fe1f0a9..83c1145 100644 --- a/docs/_build/html/copyright.html +++ b/examples-dev/olds/_build/html/py-modindex.html @@ -8,7 +8,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Sphinx authors — ARIA 4 documentation</title> + <title>Python Module Index — Aria-EC 0.3 documentation</title> @@ -35,8 +35,10 @@ <link rel="index" title="Index" href="genindex.html"/> <link rel="search" title="Search" href="search.html"/> - <link rel="copyright" title="Copyright" href="#"/> - <link rel="top" title="ARIA 4 documentation" href="index.html"/> + <link rel="top" title="Aria-EC 0.3 documentation" href="index.html"/> + + + <script src="_static/js/modernizr.min.js"></script> @@ -55,7 +57,7 @@ - <a href="index.html" class="icon icon-home"> ARIA + <a href="index.html" class="icon icon-home"> Aria-EC @@ -65,7 +67,7 @@ <div class="version"> - 2 + 0.3 </div> @@ -90,10 +92,7 @@ <!-- Local TOC --> - <div class="local-toc"><ul> -<li><a class="reference internal" href="#">Sphinx authors</a></li> -</ul> -</div> + <div class="local-toc"></div> </div> @@ -106,7 +105,7 @@ <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="index.html">ARIA</a> + <a href="index.html">Aria-EC</a> </nav> @@ -136,14 +135,12 @@ <li><a href="index.html">Docs</a> »</li> - <li>Sphinx authors</li> + <li>Python Module Index</li> <li class="wy-breadcrumbs-aside"> - <a href="_sources/copyright.rst.txt" rel="nofollow"> View page source</a> - </li> @@ -155,32 +152,89 @@ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> - <div class="section" id="sphinx-authors"> -<span id="copyright"></span><h1>Sphinx authors<a class="headerlink" href="#sphinx-authors" title="Permalink to this headline">¶</a></h1> -<dl class="docutils"> -<dt>“â€â€œ</dt> -<dd><p class="first">ARIA – Ambiguous Restraints for Iterative Assignment</p> -<blockquote class="last"> -<div><p>A software for automated NOE assignment</p> -<blockquote> -<div>Version 2.3</div></blockquote> -</div></blockquote> -</dd> -<dt>Copyright (C) Benjamin Bardiaux, Michael Habeck, Therese Malliavin,</dt> -<dd>Wolfgang Rieping, and Michael Nilges</dd> -</dl> -<p>All rights reserved.</p> -<p>NO WARRANTY. This software package is provided ‘as is’ without warranty of -any kind, expressed or implied, including, but not limited to the implied -warranties of merchantability and fitness for a particular purpose or -a warranty of non-infringement.</p> -<p>Distribution of substantively modified versions of this module is -prohibited without the explicit permission of the copyright holders.</p> -<p>$Author: bardiaux $ -$Revision: 1.1.1.1 $ -$Date: 2010/03/23 15:27:16 $ -“â€â€œ</p> -</div> + + <h1>Python Module Index</h1> + + <div class="modindex-jumpbox"> + <a href="#cap-a"><strong>a</strong></a> + </div> + + <table class="indextable modindextable"> + <tr class="pcap"><td></td><td> </td><td></td></tr> + <tr class="cap" id="cap-a"><td></td><td> + <strong>a</strong></td><td></td></tr> + <tr> + <td><img src="_static/minus.png" class="toggler" + id="toggle-1" style="display: none" alt="-" /></td> + <td> + <code class="xref">aria</code></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox"><code class="xref">aria.conbox</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.analysis"><code class="xref">aria.conbox.analysis</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.commands"><code class="xref">aria.conbox.commands</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.converter"><code class="xref">aria.conbox.converter</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.maplot"><code class="xref">aria.conbox.maplot</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.ndconv"><code class="xref">aria.conbox.ndconv</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.pdbdist"><code class="xref">aria.conbox.pdbdist</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.pdbqual"><code class="xref">aria.conbox.pdbqual</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.protein"><code class="xref">aria.conbox.protein</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.protmap"><code class="xref">aria.conbox.protmap</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.reader"><code class="xref">aria.conbox.reader</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.settings"><code class="xref">aria.conbox.settings</code></a></td><td> + <em></em></td></tr> + <tr class="cg-1"> + <td></td> + <td>    + <a href="ariaec.html#module-aria.conbox.setup"><code class="xref">aria.conbox.setup</code></a></td><td> + <em></em></td></tr> + </table> </div> @@ -195,7 +249,7 @@ $Date: 2010/03/23 15:27:16 $ <div role="contentinfo"> <p> - © <a href="#">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. + © Copyright 2017, Fabrice Allain, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. </p> </div> @@ -217,7 +271,7 @@ $Date: 2010/03/23 15:27:16 $ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT:'./', - VERSION:'4', + VERSION:'0.3', COLLAPSE_INDEX:false, FILE_SUFFIX:'.html', HAS_SOURCE: true, diff --git a/docs/_build/html/search.html b/examples-dev/olds/_build/html/search.html similarity index 89% rename from docs/_build/html/search.html rename to examples-dev/olds/_build/html/search.html index f650546..392f0e7 100644 --- a/docs/_build/html/search.html +++ b/examples-dev/olds/_build/html/search.html @@ -8,7 +8,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Search — ARIA 4 documentation</title> + <title>Search — Aria-EC 0.3 documentation</title> @@ -35,8 +35,7 @@ <link rel="index" title="Index" href="genindex.html"/> <link rel="search" title="Search" href="#"/> - <link rel="copyright" title="Copyright" href="copyright.html"/> - <link rel="top" title="ARIA 4 documentation" href="index.html"/> + <link rel="top" title="Aria-EC 0.3 documentation" href="index.html"/> <script src="_static/js/modernizr.min.js"></script> @@ -55,7 +54,7 @@ - <a href="index.html" class="icon icon-home"> ARIA + <a href="index.html" class="icon icon-home"> Aria-EC @@ -65,7 +64,7 @@ <div class="version"> - 2 + 0.3 </div> @@ -103,7 +102,7 @@ <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> <i data-toggle="wy-nav-top" class="fa fa-bars"></i> - <a href="index.html">ARIA</a> + <a href="index.html">Aria-EC</a> </nav> @@ -174,7 +173,7 @@ <div role="contentinfo"> <p> - © <a href="copyright.html">Copyright</a> 2017, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. + © Copyright 2017, Fabrice Allain, Benjamin Bardiaux, Michael Habeck, Therese Malliavin, Wolfgang Rieping, and Michael Nilges. </p> </div> @@ -196,7 +195,7 @@ <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT:'./', - VERSION:'4', + VERSION:'0.3', COLLAPSE_INDEX:false, FILE_SUFFIX:'.html', HAS_SOURCE: true, diff --git a/examples-dev/olds/_build/html/searchindex.js b/examples-dev/olds/_build/html/searchindex.js new file mode 100644 index 0000000..f7428e4 --- /dev/null +++ b/examples-dev/olds/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["ariaec","ariaec.test","index","modules"],envversion:52,filenames:["ariaec.rst","ariaec.test.rst","index.rst","modules.rst"],objects:{"aria.conbox":{analysis:[0,0,0,"-"],commands:[0,0,0,"-"],converter:[0,0,0,"-"],maplot:[0,0,0,"-"],ndconv:[0,0,0,"-"],pdbdist:[0,0,0,"-"],pdbqual:[0,0,0,"-"],protein:[0,0,0,"-"],protmap:[0,0,0,"-"],reader:[0,0,0,"-"],settings:[0,0,0,"-"],setup:[0,0,0,"-"]},"aria.conbox.analysis":{EnsembleAnalysis:[0,1,1,""],colscatter:[0,4,1,""]},"aria.conbox.analysis.EnsembleAnalysis":{pca_projection:[0,2,1,""],run:[0,3,1,""],violation_analysis:[0,2,1,""]},"aria.conbox.commands":{AriaEcCommands:[0,1,1,""],ReadableFile:[0,1,1,""],check_file:[0,4,1,""],main:[0,4,1,""]},"aria.conbox.commands.AriaEcCommands":{analysis:[0,3,1,""],bbconv:[0,3,1,""],command_list:[0,5,1,""],contact_types:[0,5,1,""],create_settings:[0,3,1,""],default_confile:[0,5,1,""],desc_list:[0,5,1,""],maplot:[0,3,1,""],pdbdist:[0,3,1,""],pdbqual:[0,3,1,""],pdbstat:[0,3,1,""],run:[0,3,1,""],setup:[0,3,1,""],tbl2xml:[0,3,1,""]},"aria.conbox.converter":{AriaEcBbConverter:[0,1,1,""],AriaEcXMLConverter:[0,1,1,""],AriaXMLConverter:[0,1,1,""]},"aria.conbox.converter.AriaEcBbConverter":{compute_diversityvalue:[0,2,1,""],run:[0,3,1,""]},"aria.conbox.converter.AriaEcXMLConverter":{atm_list:[0,3,1,""],atm_product:[0,3,1,""],get_dist:[0,3,1,""],neighcontact:[0,2,1,""],neighcontacts:[0,2,1,""],run_tbl2xml:[0,3,1,""],targetdistmaps:[0,3,1,""],tbl2xml:[0,2,1,""],write_ariaproject:[0,3,1,""],write_map_restraint:[0,3,1,""],write_maplist_restraints:[0,3,1,""],write_tbl_restraints:[0,3,1,""]},"aria.conbox.converter.AriaXMLConverter":{deff:[0,2,1,""],molecule:[0,5,1,""],read_pdb:[0,3,1,""],read_seq:[0,3,1,""],upd_mol:[0,2,1,""],write_dihedral_tbl:[0,2,1,""],write_dist_xml:[0,2,1,""],write_hb_tbl:[0,3,1,""],write_ssdist_tbl:[0,2,1,""],write_xmlseq:[0,3,1,""]},"aria.conbox.maplot":{AriaEcContactMap:[0,1,1,""]},"aria.conbox.maplot.AriaEcContactMap":{run:[0,3,1,""]},"aria.conbox.ndconv":{net_deconv:[0,4,1,""]},"aria.conbox.pdbdist":{PDBDist:[0,1,1,""]},"aria.conbox.pdbdist.PDBDist":{get_proteinblocks:[0,2,1,""],get_secstructs:[0,2,1,""],pdbdists:[0,3,1,""],run:[0,3,1,""]},"aria.conbox.pdbqual":{AriaEcPdbqual:[0,1,1,""]},"aria.conbox.pdbqual.AriaEcPdbqual":{run:[0,3,1,""]},"aria.conbox.protein":{AminoAcidSequence:[0,1,1,""],Protein:[0,1,1,""],SsList:[0,1,1,""]},"aria.conbox.protein.AminoAcidSequence":{end_reg:[0,5,1,""],humanidx:[0,5,1,""],read:[0,3,1,""],readtopo:[0,3,1,""],restatement_reg:[0,5,1,""],startres_reg:[0,5,1,""],topology:[0,5,1,""]},"aria.conbox.protein.Protein":{set_aa_sequence:[0,3,1,""],set_sec_struct:[0,3,1,""],sync_index:[0,2,1,""],topology:[0,5,1,""],write_seq:[0,3,1,""]},"aria.conbox.protein.SsList":{check_filetype:[0,3,1,""],index:[0,5,1,""],indxplus_reg:[0,5,1,""],psipred2_reg:[0,5,1,""],psipred3_reg:[0,5,1,""],psipred_reg:[0,5,1,""],read:[0,3,1,""],read_indextableplus:[0,3,1,""],read_psipred:[0,3,1,""],read_ssdist:[0,3,1,""],seq_sublist:[0,3,1,""],sequence:[0,5,1,""],ss_dist_reg:[0,5,1,""],write_ssfasta:[0,3,1,""]},"aria.conbox.protmap":{AaAtmMap:[0,1,1,""],AaMap:[0,1,1,""],AtmMap:[0,1,1,""],Map:[0,1,1,""],MapFilter:[0,1,1,""],ProtMapCollection:[0,1,1,""],ProteinMap:[0,1,1,""],ResAtmMap:[0,1,1,""],ResMap:[0,1,1,""],SsAaAtmMap:[0,1,1,""]},"aria.conbox.protmap.AaAtmMap":{contact_map:[0,3,1,""],copy:[0,3,1,""],create_heatmap:[0,3,1,""],create_index:[0,3,1,""]},"aria.conbox.protmap.AaMap":{contact_map:[0,3,1,""],copy:[0,3,1,""],create_heatmap:[0,3,1,""],create_index:[0,3,1,""],reduce:[0,3,1,""],sequence:[0,5,1,""]},"aria.conbox.protmap.AtmMap":{copy:[0,3,1,""],create_index:[0,3,1,""],reduce:[0,3,1,""]},"aria.conbox.protmap.Map":{check_type:[0,3,1,""],copy:[0,3,1,""],mtype_choices:[0,5,1,""],reduce:[0,3,1,""],remove:[0,3,1,""],set_value:[0,3,1,""],sortedset:[0,3,1,""],subfill:[0,3,1,""],to_series:[0,3,1,""],topmap:[0,3,1,""],update:[0,3,1,""]},"aria.conbox.protmap.MapFilter":{clash_dict:[0,5,1,""],cons_filter:[0,3,1,""],cys_filter:[0,2,1,""],filter_types:[0,5,1,""],nd_filter:[0,3,1,""],pos_filter:[0,3,1,""],ssclash_filter:[0,2,1,""],write_filtout:[0,2,1,""]},"aria.conbox.protmap.ProtMapCollection":{allcontactmap:[0,5,1,""],alldistmap:[0,5,1,""],allscoremap:[0,5,1,""],distmap:[0,5,1,""]},"aria.conbox.protmap.ProteinMap":{all_reg:[0,5,1,""],classification_metrics:[0,2,1,""],compare_contactmap:[0,3,1,""],compareplot:[0,3,1,""],contact_list:[0,3,1,""],contact_map:[0,3,1,""],contactset:[0,3,1,""],copy:[0,3,1,""],create_heatmap:[0,3,1,""],create_index:[0,3,1,""],distance_method:[0,5,1,""],heavy_reg:[0,5,1,""],maplot:[0,5,1,""],plotflush:[0,3,1,""],reduce:[0,3,1,""],report:[0,3,1,""],saveplot:[0,3,1,""],sequence:[0,5,1,""],write_contacts:[0,3,1,""]},"aria.conbox.protmap.ResAtmMap":{contact_map:[0,3,1,""],copy:[0,3,1,""],create_heatmap:[0,3,1,""],create_index:[0,3,1,""],reduce:[0,3,1,""],sequence:[0,5,1,""]},"aria.conbox.protmap.ResMap":{contact_map:[0,3,1,""],copy:[0,3,1,""],create_heatmap:[0,3,1,""],create_index:[0,3,1,""],sequence:[0,5,1,""]},"aria.conbox.protmap.SsAaAtmMap":{contact_map:[0,3,1,""],copy:[0,3,1,""],create_heatmap:[0,3,1,""],create_index:[0,3,1,""],reduce:[0,3,1,""],ss_types:[0,5,1,""]},"aria.conbox.reader":{Atom:[0,1,1,""],ContactMapFile:[0,1,1,""],CulledPdbFile:[0,1,1,""],DistanceMapFile:[0,1,1,""],MapFile:[0,1,1,""],MapFileListReader:[0,1,1,""],PDBFile:[0,1,1,""],RegexFile:[0,1,1,""],TblDistFile:[0,1,1,""]},"aria.conbox.reader.Atom":{coords:[0,5,1,""],name:[0,5,1,""]},"aria.conbox.reader.ContactMapFile":{create_map:[0,3,1,""],update_map:[0,3,1,""]},"aria.conbox.reader.CulledPdbFile":{"default":[0,5,1,""],filetype:[0,5,1,""],regex:[0,5,1,""]},"aria.conbox.reader.DistanceMapFile":{create_map:[0,3,1,""],update_map:[0,3,1,""]},"aria.conbox.reader.MapFile":{check_maptype:[0,3,1,""],check_type:[0,5,1,""],create_map:[0,3,1,""],read:[0,3,1,""],types:[0,5,1,""],update_map:[0,3,1,""]},"aria.conbox.reader.MapFileListReader":{clear:[0,3,1,""],read:[0,3,1,""]},"aria.conbox.reader.PDBFile":{create_map:[0,3,1,""],pdbreg:[0,5,1,""],update_map:[0,3,1,""]},"aria.conbox.reader.RegexFile":{filename:[0,5,1,""],filepath:[0,5,1,""],load:[0,3,1,""]},"aria.conbox.reader.TblDistFile":{filetype:[0,5,1,""],regex:[0,5,1,""]},"aria.conbox.settings":{AriaEcSettings:[0,1,1,""],Setting:[0,1,1,""],Settings:[0,1,1,""]},"aria.conbox.settings.AriaEcSettings":{ARIAPROJ_TEMPLATE:[0,5,1,""],INTERLOWERBOUNDS:[0,5,1,""],INTERTARGET:[0,5,1,""],INTERUPPERBOUNDS:[0,5,1,""],INTRALOWERBOUNDS:[0,5,1,""],INTRATARGET:[0,5,1,""],INTRAUPPERBOUNDS:[0,5,1,""],SCSC_MIN:[0,5,1,""],SECTIONS:[0,5,1,""],SS_DIST:[0,5,1,""],TOPO:[0,5,1,""],infra:[0,5,1,""],load_config:[0,3,1,""],make_infra:[0,3,1,""],scsc_min:[0,5,1,""],ssdist:[0,5,1,""],template:[0,5,1,""]},"aria.conbox.settings.Settings":{load_config:[0,3,1,""],write_config:[0,3,1,""]},"aria.conbox.setup":{AriaEcSetup:[0,1,1,""]},"aria.conbox.setup.AriaEcSetup":{run:[0,3,1,""],write_optional_files:[0,3,1,""]},aria:{conbox:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","staticmethod","Python static method"],"3":["py","method","Python method"],"4":["py","function","Python function"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:staticmethod","3":"py:method","4":"py:function","5":"py:attribute"},terms:{"0x343ad80":[],"0x3453a20":[],"0x34d2270":[],"0x34d2610":[],"0x34d33c0":[],"0x34e23d0":[],"0x34f2340":[],"0x34f3f90":[],"0x34fa210":[],"0x34fb6d0":[],"0x34fba90":[],"0x34fc1f0":[],"0x34fc7b0":[],"0x34fd5c0":[],"0x34fda90":[],"0x34fdff0":[],"0x35002a0":[],"0x4c62630":0,"0x4ced770":0,"0x4d527b0":0,"0x4d52fd0":0,"0x4d63060":0,"0x4d72420":0,"0x4d74500":0,"0x4d74780":0,"0x4d75410":0,"0x4d76640":0,"0x4d7b8a0":0,"0x4d7c8b0":0,"0x4d7d8d0":0,"0x4d7de60":0,"0x4d7ec70":0,"0x4d7f140":0,"0x4d817b0":0,"25_d160427_chains3743":0,"6_r0":0,"abstract":0,"class":0,"default":0,"float":0,"int":0,"return":0,"static":0,"true":0,CNS:0,For:0,Its:0,Res:0,The:0,There:0,Use:0,_sre:0,aa_seq:0,aaatmmap:0,aamap:0,absolut:0,acc:0,access:0,accord:0,acid:0,action:0,actual:0,adjust:0,adr_flag:0,algorithm:0,alia:0,align:0,all:0,all_reg:0,allcontactmap:0,alldistmap:0,allscoremap:0,allvsal:0,alpha:0,amino:0,aminoacidsequ:0,analys:0,analyz:0,angl:0,anoth:0,appli:0,applic:0,arg:0,argpars:0,argument:0,aria_ec:0,aria_project_v2:0,aria_templ:0,ariaec:0,ariaecbbconvert:0,ariaeccommand:0,ariaeccontactmap:0,ariaecpdbqu:0,ariaecset:0,ariaecsetup:0,ariaecxmlconvert:0,ariaproj_templ:0,ariaproject:0,ariaset:0,ariaxmlconvert:0,arrai:0,assign:0,assum:0,atm:0,atm_dist:0,atm_list:0,atm_product:0,atmask:0,atmmap:0,atom:0,atom_typ:0,attribut:0,author:0,averag:0,axe:0,axtitl:0,bacbkon:0,backbon:0,bardiaux:0,basenam:0,bbcontact:0,bbconv:0,bbconvert:0,been:0,below:0,benjamin:0,beta:0,between:0,bio:0,bioinformat:0,biotechnolog:0,block:0,bond:0,bool:0,both:0,build:0,call:0,can:0,cd1:0,cd2:0,chain:0,check:0,check_fil:0,check_filetyp:0,check_maptyp:0,check_typ:0,choos:0,clash:0,clash_dict:0,clashlist:0,classif:0,classification_metr:0,clear:0,close:0,clusteridx:0,cmpmap:0,cns:0,code:0,col:0,colnam:0,color:0,colscatt:0,column:0,command_list:0,commandprotocol:0,common:0,compar:0,compare_contactmap:0,compareplot:0,complexc:0,compon:0,comput:0,compute_diversityvalu:0,con:0,conf:0,config:0,configpars:0,configpath:0,conflict:0,cons_filt:0,conserv:0,constraint:0,cont_def:0,contact:0,contact_list:0,contact_map:0,contact_typ:0,contactdef:0,contactlist:0,contactmap:0,contactmapfil:0,contactset:0,contain:0,contrib:0,control:0,convers:0,coord:0,coordin:0,copi:0,core:0,correspond:0,creat:0,create_heatmap:0,create_index:0,create_map:0,create_set:0,csv:0,cull:0,culledpdbfil:0,cullpdb:0,cullpdb_pc25_res1:0,current:0,custom_log:0,cut:0,cys:0,cys_filt:0,daniel:0,data:0,datafram:0,deconvolut:0,deconvolv:0,def_cut:0,default_1:0,default_2:0,default_3:0,default_4:0,default_confil:0,defaultdist:0,deff:0,defin:0,depend:0,deriv:0,desc:0,desc_dict:0,desc_list:0,desclist:0,descript:0,descriptor:0,detail:0,dict:0,dictionari:0,differ:0,dihe:0,dihed_fil:0,dihedr:0,direct:0,displai:0,dist:0,dist_fil:0,dist_restraint:0,distanc:0,distance_method:0,distancemap:0,distancemapfil:0,distfil:0,distinguish:0,distmap:0,distribut:0,dists_ref:0,disulfid:0,divers:0,diversity_scor:0,dminu:0,dono:0,dplu:0,dpow:0,dssp_dict:0,dtype:0,dunbrack:0,duplic:0,duplicate_level:0,dynamicattr:0,each:0,ec_scor:0,edg:0,effect:0,eigenvalu:0,element:0,empti:0,end_reg:0,ensembl:0,ensembleanalysi:0,euclidean:0,evfold:0,evolut:0,evolutionari:0,execut:0,exist:0,exp:0,explain:0,expon:0,extend:0,extra:0,extract:0,fallain:0,fals:0,feizi:0,field:0,file:0,filenam:0,filepath:0,filetyp:0,fill:0,filter:0,filter_typ:0,flaglist:0,flush:0,follow:0,form:0,format:0,fraction:0,frame:0,from:0,gener:0,get:0,get_dist:0,get_proteinblock:0,get_secstruct:0,gideon:0,give:0,given:0,gmm:0,gremlin:0,group:0,groupbi:0,groupby_method:0,hamelryck:0,has:0,hb_file:0,hbmap:0,hbond:0,hbscore:0,headerflag:0,heatmap:0,heavi:0,heavy_reg:0,high:0,highli:0,human_idx:0,humanidx:0,idx1:0,idx2:0,idxnam:0,iff:0,implement:0,improp:0,index1:0,index2:0,index:[0,2],indxplus_reg:0,info:0,infra:0,infrastructur:0,ini:0,initi:0,initiat:0,input:0,insid:0,instanti:0,inter:0,interact:0,interfac:0,interlowerbound:0,intertarget:0,interupperbound:0,intra:0,intralowerbound:0,intratarget:0,intraupperbound:0,iter:0,iteration_id:0,kei:0,kelli:0,kept:0,kind:0,knrj:0,kwarg:0,lab:0,largest:0,launch:0,legaci:0,legend_prefix:0,length:0,letter:0,level:0,licens:0,line:0,linewidth:0,list:0,list_nam:0,list_typ:0,listnam:0,load:0,load_config:0,low:0,lower:0,lowerbound:0,lr_type:0,made:0,main:0,make_infra:0,manderick:0,manoli:0,map:0,mapdict:0,mapfil:0,mapfilelistread:0,mapfilt:0,maplist:0,maptyp:0,marbach:0,mat_nd:0,matric:0,matrix:0,maxidx:0,maximum:0,medard:0,metapsicov:0,metapsicov_stg1:0,metapsicov_stg2:0,metapsicovhb:0,method:0,metric:0,min:0,minim:0,mit:0,modul:2,molecul:0,molecule_path:0,more:0,msa:0,mtype:0,mtype_choic:0,multi:0,multiindex:0,multipl:0,muriel:0,n_hb:0,name:0,nativ:0,native_ful:0,natur:0,nb_c:0,nb_topcontact:0,nd_filter:0,ndim:0,neg:0,neighcontact:0,net_deconv:0,network:0,node:0,nofilt:0,non:0,none:0,note:0,npmat:0,number:0,numpi:0,obj:0,object:0,observ:0,off:0,offset:0,one:0,onli:0,option:0,ordereddict:0,other:0,out_fil:0,outdir:0,outdir_path:0,outfil:0,outprefix:0,output:0,over:0,page:2,pair:0,pair_list:0,pairdict:0,palett:0,panda:0,paper:0,param:0,paramet:0,pars:0,path:0,pbxplore:0,pca:0,pca_project:0,pconsc1:0,pconsc2:0,pconsc:0,pdb:0,pdbfile:0,pdbid:0,pdbparser:0,pdbpath:0,pdbreg:0,pdbstat:0,pdf:0,phe1:0,phi:0,physic:0,pickler:0,pics:0,pisc:0,pkg:0,plm:0,plm_score:0,plmc:0,plmdca:0,plmev:0,plot:0,plot_dpi:0,plot_ext:0,plotag:0,plotdir:0,plotflush:0,pos:0,pos_filt:0,posit:0,predict:0,prefix:0,pro:0,process:0,product:0,product_typ:0,program:0,project:0,prospective_fil:0,proteinmap:0,protmapcollect:0,protocol:0,provid:0,proxim:0,psi:0,psicov:0,psipred2_reg:0,psipred3_reg:0,psipred_reg:0,python:0,qual:0,qualiti:0,rac:0,read:0,read_indextableplu:0,read_pdb:0,read_psipr:0,read_seq:0,read_ssdist:0,readabl:0,readablefil:0,readtopo:0,reduc:0,reduct:0,refer:0,regex:0,regexfil:0,regulatori:0,rel:0,relat:0,relev:0,remov:0,report:0,repres:0,res1:0,res2:0,res:0,resatmmap:0,residu:0,resmap:0,restatement_reg:0,restraint:0,rm_list:0,root:0,rosenth:0,rtype:0,run:0,run_tbl2xml:0,save:0,save_fig:0,saveplot:0,scale:0,scale_scor:0,scatter:0,score:0,score_field:0,scoremap:0,scratch:0,script:0,scsc:0,scsc_min:0,search:2,sec_struct:0,secondari:0,secstruct:0,section:0,see:0,select:0,self:0,seq:0,seq_po:0,seq_sublist:0,seqfil:0,seqidx:0,seqlen:0,seqpath:0,sequenc:0,sequencelist:0,seri:0,server:0,set_aa_sequ:0,set_sec_struct:0,set_valu:0,sett:0,should:0,side:0,similar:0,size_fig:0,soheil:0,sort:0,sortedset:0,sourc:0,spec:0,specif:0,sqrt:0,squar:0,sre_pattern:0,ss2:0,ss_dist:0,ss_dist_reg:0,ss_type:0,ssaaatmmap:0,ssclash:0,ssclash_filt:0,ssdist:0,ssdist_fil:0,ssdist_filenam:0,ssdistpath:0,ssidx:0,sslist:0,start:0,startres_reg:0,step:0,str:0,string:0,structur:0,subcommand:0,subfil:0,supplementari:0,sym:0,symmetr:0,sync_index:0,target:0,targetdist:0,targetdistmap:0,targetmap:0,tbl2xml:0,tbl:0,tbl_file:0,tbl_path:0,tbldist:0,tbldistfil:0,templat:0,test:[],them:0,thi:0,threshold:0,titl:0,to_seri:0,tool:0,toolbox:0,top:0,topallhdg5:0,topmap:0,topo:0,topolog:0,topologyfil:0,translat:0,treshold:0,triangl:0,tupl:0,txt:0,type:0,unic:0,upd_mol:0,updat:0,update_map:0,upper:0,upperbound:0,usag:0,use:0,used:0,using:0,valu:0,violation_analysi:0,visual:0,wang:0,weight:0,where:0,which:0,write:0,write_ariaproject:0,write_config:0,write_contact:0,write_dihedral_tbl:0,write_dist_xml:0,write_filtout:0,write_hb_tbl:0,write_map_restraint:0,write_maplist_restraint:0,write_optional_fil:0,write_seq:0,write_ssdist_tbl:0,write_ssfasta:0,write_tbl_restraint:0,write_xmlseq:0,xlabel:0,xml:0,xml_path:0,y_pred:0,y_score:0,y_true:0,ylabel:0,zlabel:0},titles:["aria.conbox package","ariaec.test package","Welcome to Aria-EC\u2019s documentation!","ariaec"],titleterms:{analysi:0,aria:[0,2],ariaec:[1,3],base:0,command:0,conbox:0,content:[0,1],convert:0,document:2,indic:2,maplot:0,modul:[0,1],ndconv:0,packag:[0,1],pdbdist:0,pdbqual:0,protein:0,protmap:0,reader:0,set:0,setup:0,submodul:0,subpackag:0,tabl:2,test:1,welcom:2}}) \ No newline at end of file diff --git a/examples-dev/olds/ariaec.rst b/examples-dev/olds/ariaec.rst new file mode 100644 index 0000000..36ab6ad --- /dev/null +++ b/examples-dev/olds/ariaec.rst @@ -0,0 +1,114 @@ +Conbox module +============ + +.. toctree:: + +.. automodule:: aria.conbox + :members: + :undoc-members: + :show-inheritance: + +Analysis +-------- + +.. automodule:: aria.conbox.analysis + :members: + :undoc-members: + :show-inheritance: + +Base +---- + +.. automodule:: aria.conbox.base + :members: + :undoc-members: + :show-inheritance: + +Commands +-------- + +.. automodule:: aria.conbox.commands + :members: + :undoc-members: + :show-inheritance: + +Converter +--------- + +.. automodule:: aria.conbox.converter + :members: + :undoc-members: + :show-inheritance: + +Maplot +------ + +.. automodule:: aria.conbox.maplot + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.ndconv module +------------------------- + +.. automodule:: aria.conbox.ndconv + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.pdbdist module +-------------------------- + +.. automodule:: aria.conbox.pdbdist + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.pdbqual module +-------------------------- + +.. automodule:: aria.conbox.pdbqual + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.protein module +-------------------------- + +.. automodule:: aria.conbox.protein + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.protmap module +-------------------------- + +.. automodule:: aria.conbox.protmap + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.reader module +------------------------- + +.. automodule:: aria.conbox.reader + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.settings module +--------------------------- + +.. automodule:: aria.conbox.settings + :members: + :undoc-members: + :show-inheritance: + +aria.conbox.setup module +------------------------ + +.. automodule:: aria.conbox.setup + :members: + :undoc-members: + :show-inheritance: + diff --git a/examples-dev/olds/ariaec.test.rst b/examples-dev/olds/ariaec.test.rst new file mode 100644 index 0000000..8813337 --- /dev/null +++ b/examples-dev/olds/ariaec.test.rst @@ -0,0 +1,10 @@ +ariaec.test package +=================== + +Module contents +--------------- + +.. automodule:: ariaec.test + :members: + :undoc-members: + :show-inheritance: diff --git a/examples-dev/olds/index.rst b/examples-dev/olds/index.rst new file mode 100644 index 0000000..c213df6 --- /dev/null +++ b/examples-dev/olds/index.rst @@ -0,0 +1,20 @@ +.. AriaEc documentation master file, created by + sphinx-quickstart on Fri Apr 21 16:27:42 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Aria-EC's documentation! +=================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/examples-dev/olds/make.bat b/examples-dev/olds/make.bat new file mode 100644 index 0000000..b024aea --- /dev/null +++ b/examples-dev/olds/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=AriaEc + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/docs/modules.rst b/examples-dev/olds/modules.rst similarity index 100% rename from docs/modules.rst rename to examples-dev/olds/modules.rst diff --git a/setup.py b/setup.py index a9c1973..e49af7d 100644 --- a/setup.py +++ b/setup.py @@ -111,7 +111,7 @@ class CleanCommand(Command): './*.egg-info ./*.egg') -def get_version(): +def get_version(full=True): """ Returns @@ -119,7 +119,7 @@ def get_version(): """ d = dirname(__file__) - + # TODO: actually no warning when git command is not available !! if isdir(join(d, '.git')): # Get the version using "git describe". cmd = 'git describe --tags'.split() @@ -130,8 +130,11 @@ def get_version(): sys.exit(1) # PEP 386 compatibility - if '-' in version: + + if '-' in version and full: version = '.post'.join(version.split('-')[:2]) + else: + version = version.split('-')[0] # Don't declare a version "dirty" merely because a time stamp has # changed. If it is dirty, append a ".dev1" suffix to indicate a @@ -147,7 +150,7 @@ def get_version(): print('Unable to get git index status') sys.exit(1) - if dirty != '': + if dirty != '' and full: version += '.dev1' else: @@ -206,6 +209,7 @@ def setup_package(): 'six>=1.10', 'Sphinx', 'sphinx_rtd_theme', + # 'sphinx_bootstrap_theme', 'sphinxcontrib-napoleon', 'configparser', 'mako', -- GitLab