├── .github
├── ISSUE_TEMPLATE
│ ├── bug-report.md
│ └── feature_request.md
├── dependabot.yml
└── workflows
│ ├── publish_pypi.yml
│ └── stale_issue_pr.yml
├── .gitignore
├── .zenodo.json
├── CITATION.cff
├── LICENSE
├── MANIFEST.in
├── README.md
├── makefile
├── pssmgen
├── __init__.py
├── __version__.py
├── map_pssm2pdb.py
└── pssm.py
├── setup.py
└── test
├── 7CEI
├── pdb
│ ├── 7CEI_1w.pdb
│ ├── 7CEI_2w.pdb
│ └── 7CEI_3w.pdb
└── pssm_raw
│ ├── 7CEI.A.pssm
│ └── 7CEI.B.pssm
└── test_pssm.py
/.github/ISSUE_TEMPLATE/bug-report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **Environment:**
14 | - OS system:
15 | - Version:
16 | - Branch commit ID:
17 | - Inputs:
18 |
19 | **To Reproduce**
20 | Steps/commands to reproduce the behaviour:
21 | 1.
22 | 2.
23 | 3.
24 |
25 | **Expected Results**
26 | A clear and concise description of what you expected to happen.
27 |
28 | **Actual Results or Error Info**
29 | If applicable, add screenshots to help explain your problem.
30 |
31 | **Additional Context**
32 | Add any other context about the problem here.
33 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: pip
4 | directory: "/"
5 | schedule:
6 | interval: daily
7 | open-pull-requests-limit: 10
8 |
--------------------------------------------------------------------------------
/.github/workflows/publish_pypi.yml:
--------------------------------------------------------------------------------
1 | name: Build and publish Python distributions to PyPI or TestPyPI
2 | on:
3 | workflow_dispatch:
4 | inputs:
5 | version:
6 | description: 'Version upload to pypi'
7 | required: true
8 | pypi_repo:
9 | description: 'Upload to testpypi or pypi'
10 | default: 'testpypi'
11 | required: true
12 |
13 | jobs:
14 | publish:
15 | runs-on: ubuntu-latest
16 | steps:
17 | - uses: actions/checkout@master
18 | with:
19 | ref: ${{ github.event.inputs.version }}
20 | - uses: actions/setup-python@v3
21 | with:
22 | python-version: '3.9'
23 | - name: Check distribution version
24 | run: |
25 | v=$(python setup.py --version)
26 | if [[ $v != ${{ github.event.inputs.version }} ]]; then
27 | echo "ERROR: Package version $v is not same as input version ${{ github.event.inputs.version }}."
28 | echo "Update package version, tag the commit and rerun this workflow."
29 | exit 1
30 | fi
31 | - name: Install pypa/build
32 | run: >-
33 | python -m
34 | pip install
35 | build
36 | --user
37 | - name: Build a binary wheel and a source tarball
38 | run: >-
39 | python -m
40 | build
41 | --sdist
42 | --wheel
43 | --outdir dist/
44 | .
45 | - name: Publish distribution to TestPyPI
46 | if: ${{ github.event.inputs.pypi_repo == 'testpypi' }}
47 | uses: pypa/gh-action-pypi-publish@master
48 | with:
49 | user: __token__
50 | password: ${{ secrets.TEST_PYPI_API_TOKEN }}
51 | repository_url: https://test.pypi.org/legacy/
52 | - name: Publish distribution to PyPI
53 | if: ${{ github.event.inputs.pypi_repo == 'pypi' }}
54 | uses: pypa/gh-action-pypi-publish@master
55 | with:
56 | user: __token__
57 | password: ${{ secrets.PYPI_API_TOKEN }}
58 |
--------------------------------------------------------------------------------
/.github/workflows/stale_issue_pr.yml:
--------------------------------------------------------------------------------
1 | name: Close inactive issues and pull requests
2 | on:
3 | schedule:
4 | - cron: "14 3 * * 1,3,5" # check at 03:14 on Monday, Wednesday, and Friday
5 |
6 | jobs:
7 | close-issues:
8 | runs-on: ubuntu-latest
9 | permissions:
10 | issues: write
11 | pull-requests: write
12 | steps:
13 | - uses: actions/stale@v5.0.0
14 | with:
15 | days-before-issue-stale: 30
16 | days-before-issue-close: 7
17 | stale-issue-label: "stale"
18 | stale-issue-message: "This issue is stale because it has been open for 30 days with no activity. Remove stale label or comment or this will be closed in 7 days."
19 | close-issue-message: "This issue was closed because it has been inactive for 7 days since being marked as stale."
20 | days-before-pr-stale: 14
21 | days-before-pr-close: 7
22 | stale-pr-message: "This PR is stale because it has been open for 14 days with no activity. Remove stale label or comment or this will be closed in 7 days."
23 | close-pr-message: "This PR was closed because it has been inactive for 7 days since being marked as stale."
24 | exempt-issue-labels: 'blocked'
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *__pycache__*
2 | *sublime.*
3 | *.egg-info
4 | .vscode/*
5 | .DS_Store
6 |
--------------------------------------------------------------------------------
/.zenodo.json:
--------------------------------------------------------------------------------
1 | {
2 | "creators": [
3 | {
4 | "affiliation": "Netherlands eScience Center",
5 | "name": "Renaud, Nicolas",
6 | "orcid": "0000-0001-9589-2694"
7 | },
8 | {
9 | "affiliation": "Netherlands eScience Center",
10 | "name": "Geng, Cunliang",
11 | "orcid": "0000-0002-1409-8358"
12 | }
13 | ],
14 | "description": "Generates consistent PSSM and/or PDB files for protein-protein complexes",
15 | "keywords": [
16 | "pssm",
17 | "pdb",
18 | "protein-protein complex",
19 | "docking",
20 | "bioinformatics",
21 | "CAPRI"
22 | ],
23 | "license": {
24 | "id": "Apache-2.0"
25 | },
26 | "title": "PSSMGen"
27 | }
28 |
--------------------------------------------------------------------------------
/CITATION.cff:
--------------------------------------------------------------------------------
1 | # YAML 1.2
2 | ---
3 | abstract: "Generates consistent PSSM and/or PDB files for protein-protein complexes"
4 |
5 | authors:
6 | -
7 | affiliation: "Netherlands eScience Center"
8 | family-names: Renaud
9 | given-names: Nicolas
10 | orcid: "https://orcid.org/0000-0001-9589-2694"
11 | -
12 | affiliation: "Netherlands eScience Center"
13 | family-names: Geng
14 | given-names: Cunliang
15 | orcid: "https://orcid.org/0000-0002-1409-8358"
16 | cff-version: "1.1.0"
17 |
18 | keywords:
19 | - pssm
20 | - pdb
21 | - "protein-protein complex"
22 | - docking
23 | - bioinformatics
24 | - CAPRI
25 | license: "Apache-2.0"
26 | message: "If you use this software, please cite it using these metadata."
27 | repository-code: "https://github.com/DeepRank/PSSMGen"
28 | title: PSSMGen
29 | ...
30 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "{}"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [yyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include LICENSE
2 | include README.md
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PSSMGen
2 |
3 |
4 | | Fair-software.nl Recommendations | Badges |
5 | |:-|:-:|
6 | | [1. Code Repository](https://fair-software.nl/recommendations/repository) | [](https://github.com/DeepRank/pssmgen) |
7 | | | [](https://github.com/DeepRank/pssmgen) |
8 | | [2. License](https://fair-software.nl/recommendations/license) | [](https://github.com/DeepRank/pssmgen) |
9 | | [3. Community Registry](https://fair-software.nl/recommendations/registry) | [](https://research-software.nl/software/pssmgen) |
10 | | | [](https://pypi.org/project/pssmgen/) |
11 | | [4. Enable Citation](https://fair-software.nl/recommendations/citation) | [](https://doi.org/10.5281/zenodo.3635711) |
12 | | [5. Code Quality Checklist](https://fair-software.nl/recommendations/checklist) | [](https://bestpractices.coreinfrastructure.org/projects/3759) |
13 | | Code Analysis | [](https://www.codacy.com/gh/DeepRank/PSSMGen/dashboard?utm_source=github.com&utm_medium=referral&utm_content=DeepRank/PSSMGen&utm_campaign=Badge_Grade)
14 |
15 |
33 | -----
34 |
35 | PSSMGen: Generates Consistent PSSM and/or PDB Files for Protein-Protein Complexes
36 |
37 | ## Install
38 |
39 | 1. Make sure BLAST is installed and its database is available on your machine. Otherwise, install BLAST and download its databases by following the [BLAST guide](https://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&PAGE_TYPE=BlastDocs&DOC_TYPE=Download). To calculate PSSM, the recommended database is the non-redundant protein sequences `nr` (i.e. `nr.*.tar.gz` files from the [ftp site](https://ftp.ncbi.nlm.nih.gov/blast/db/)).
40 | 2. Install the PSSMgen by `pip install PSSMGen`.
41 |
42 |
43 | ## Requirements for file structures and names
44 |
45 | `PSSMGen` is geared toward computing the pssm files for all models of a particular protein-protein complex.
46 |
47 | ### File structures
48 | This tool assumes your files have following structure:
49 |
50 | ```
51 | workdir
52 | |_ pdb
53 | |_ fasta
54 | |_ pssm_raw
55 | |_ pssm
56 | |_ pdb_nonmatch
57 | ```
58 |
59 | - `workdir` is your working directory for one specific protein-protein complex.
60 | - `pdb` folder contains the PDB files (consistent PDB files)
61 | - `fasta` folder contains the protein sequence [FASTA](https://en.wikipedia.org/wiki/FASTA_format) files. The code can generate the FASTA files by extracting sequences from the `pdb` file , or you can manually create this folder and put customised FASTA files there.
62 | - `pssm_raw` folder stores the PSSM files. The code can automatically generate them, or you can manually create this folder and put customised PSSM files there.
63 | - `pssm` folder stores consistent PSSM files, whose sequences are aligned with those of PDB files. This folder and its files are created automatically.
64 | - `pdb_nonmatch` folder stores the inconsistent PDB files, while the related consistent PDB files are in the `pdb` folder. This folder and its files are created automatically.
65 |
66 | ### File names
67 | The code assumes you follow the naming rules for different file types:
68 | - PDB files: caseID_*.chainID.pdb
69 | - FASTA files: caseID.chainID.fasta
70 | - PSSM files: caseID.chainID.pssm, caseID_*.chainID.pdb.pssm
71 |
72 |
73 | ## Examples
74 |
75 | Here are some examples for the complex `7CEI`.
76 | The file structure and input files should look like
77 | ```
78 | 7CEI
79 | ├── pdb
80 | │ ├── 7CEI_1w.pdb
81 | │ ├── 7CEI_2w.pdb
82 | │ └── 7CEI_3w.pdb
83 | └── fasta
84 | ├── 7CEI.A.fasta
85 | └── 7CEI.B.fasta
86 | ```
87 |
88 | ### Calculate PSSM with given FASTA files
89 |
90 | ```python
91 | from pssmgen import PSSM
92 |
93 | # initiate the PSSM object
94 | gen = PSSM(work_dir='7CEI')
95 |
96 | # set psiblast executable, database and other psiblast parameters (here shows the defaults)
97 | gen.configure(blast_exe='/home/software/blast/bin/psiblast',
98 | database='/data/DBs/blast_dbs/nr_v20180204/nr',
99 | num_threads = 4, evalue=0.0001, comp_based_stats='T',
100 | max_target_seqs=2000, num_iterations=3, outfmt=7,
101 | save_each_pssm=True, save_pssm_after_last_round=True)
102 |
103 | # generates raw PSSM files by running BLAST with fasta files
104 | gen.get_pssm(fasta_dir='fasta', out_dir='pssm_raw', run=True, save_all_psiblast_output=True)
105 | ```
106 |
107 | The code will automatically create `pssm_raw` folder to store the generated PSSM files.
108 |
109 |
110 | ### Map PSSM files to PDB files to get consistent PSSM and PDB files
111 |
112 | After getting the raw PSSMs from last example, we could map them to PDB files to
113 | get consistent PSSM and PDB files as following:
114 |
115 | ```python
116 | # map PSSM and PDB to get consisitent/mapped PSSM files
117 | gen.map_pssm(pssm_dir='pssm_raw', pdb_dir='pdb', out_dir='pssm', chain=('A','B'))
118 |
119 | # write consistent/mapped PDB files and move inconsistent ones to another folder for backup
120 | gen.get_mapped_pdb(pdbpssm_dir='pssm', pdb_dir='pdb', pdbnonmatch_dir='pdb_nonmatch')
121 | ```
122 |
123 | The code will automatically create `pssm` and `pdb_nonmatch` folders and related files.
124 |
125 |
126 | ### Extract FASTA files from PDB file
127 |
128 | If the FASTA files are not provided, you can also generate them from the PDB file.
129 |
130 | The file structure and input files should look like
131 | ```
132 | 7CEI
133 | └── pdb
134 | ├── 7CEI_1w.pdb
135 | ├── 7CEI_2w.pdb
136 | └── 7CEI_3w.pdb
137 | ```
138 |
139 | ```python
140 | # initiate the PSSM object
141 | gen = PSSM('7CEI')
142 |
143 | # extract FASTA file from the reference pdb file.
144 | # if `pdbref` is not set, the code will randomly select one pdb as reference.
145 | gen.get_fasta(pdb_dir='pdb', pdbref='7CEI_1w.pdb', chain=('A','B'), out_dir='fasta')
146 | ```
147 | The code will automatically create `fasta` and `pssm_raw` folders for fasta files and raw pssm files, repsectively.
148 |
149 |
150 | ### Use existing PSSM files to get consistent PSSM and PDB files
151 |
152 | You can provide raw PSSM files intead of calculating them.
153 |
154 | The file structure and input files should look like
155 | ```
156 | 7CEI
157 | ├── pdb
158 | │ ├── 7CEI_1w.pdb
159 | │ ├── 7CEI_2w.pdb
160 | │ └── 7CEI_3w.pdb
161 | └── pssm_raw
162 | ├── 7CEI.A.pssm
163 | └── 7CEI.B.pssm
164 | ```
165 |
166 | ```python
167 | from pssmgen import PSSM
168 |
169 | # initiate the PSSM object
170 | gen = PSSM('7CEI')
171 |
172 | # map PSSM and PDB to get consisitent files
173 | gen.map_pssm()
174 |
175 | # write consistent files and move
176 | gen.get_mapped_pdb()
177 | ```
--------------------------------------------------------------------------------
/makefile:
--------------------------------------------------------------------------------
1 | .PHONY: clean clean-build clean-pyc clean-test release dist
2 |
3 | help:
4 | @echo "clean - remove all build, test, coverage and Python artifacts"
5 | @echo "clean-build - remove build artifacts"
6 | @echo "clean-pyc - remove Python file artifacts"
7 | @echo "clean-test - remove test and coverage artifacts"
8 | @echo "release - package and upload a release"
9 | @echo "dist - package"
10 |
11 | clean: clean-build clean-pyc clean-test
12 |
13 | clean-build:
14 | rm -fr build/
15 | rm -fr dist/
16 | rm -fr .eggs/
17 | find . -name '*.egg-info' -exec rm -fr {} +
18 | find . -name '*.egg' -exec rm -f {} +
19 |
20 | clean-pyc:
21 | find . -name '*.pyc' -exec rm -f {} +
22 | find . -name '*.pyo' -exec rm -f {} +
23 | find . -name '*~' -exec rm -f {} +
24 | find . -name '__pycache__' -exec rm -fr {} +
25 | find . -name '*_cache' -exec rm -fr {} +
26 |
27 | clean-test:
28 | rm -f .coverage
29 |
30 | dist: clean
31 | python setup.py sdist bdist_wheel
32 | ls -l dist
33 |
34 | release:
35 | python -m twine upload dist/*
36 |
--------------------------------------------------------------------------------
/pssmgen/__init__.py:
--------------------------------------------------------------------------------
1 | from .pssm import PSSM
2 | from .__version__ import __version__
3 | import logging
4 |
5 | LOG_FORMAT = "%(message)s"
6 | logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)
--------------------------------------------------------------------------------
/pssmgen/__version__.py:
--------------------------------------------------------------------------------
1 | __version__ = '0.1.2'
--------------------------------------------------------------------------------
/pssmgen/map_pssm2pdb.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | """
4 | Map the the sequence of PDB file to that of PSSM file to get consistent sequence(no gap, no residue X),
5 | and output mapped PSSM file and/or PDB file with the consisitent sequence.
6 |
7 | Usage: python map_pssm2pdb.py