Skip to content

Commit

Permalink
Release 3.1.0 (#68)
Browse files Browse the repository at this point in the history
* Version bump 3.0.0rc2

* Fix master / main branch naming in GH action

* Fix typos in README file

* Add pypi GH action

* Fix PyPI linting errors

* Reduce version to 3.0.0rc1

* Add a changelog

* Install changelog with package

* Change PyPI CD trigger to published release

* Add rank metric #15 (#42)

* Push all changes made on fork

* Set Setuptools version also for external yml

* Fixed erroneous variable names in matrix files

* deleted A_2601_9 matrix for now. Caused troubles

* Add A2601_9 syf matrix for debugging

* Fixed bug in test caused by addition of A*26:01 matrix

* Change solver from cbc to glpk to investigate if macOS dependant env problems in github actions can be solved

* Corrected after review

* Adjust tutorials to new structure

* Change filter_result as discussed

* Adjusted filter method and tutorials according to #12

* Fixed a bug occuring for netMHCfamily tools when peptide input has multiple lengths

* remove logging

* Alter filter_result method as discussed

* Fixed issues #38, #44 and #45 (#46)

* Fixed issues #44 and #45

* Fix #48, include review suggestions

* Improve/update documentation (#50)

* Update CHANGELOG

* Extend README

* Change framework name in code comment

* Remove logging warning

* Change file ending in tutorial

* Add docstrings, minor formatting

* Update CHANGELOG version and setup.py

* Update date

* Fix #52 (#53)

* add check if transcript sequence available from BioMart, cleanup (#58)

* Add interface for netMHCpan 4.1 (#59)

* add interface for netmhcpan 4.1

* remove duplicate alleles from list

* Update supportedAlleles of syfpeithi (#62)

Co-authored-by: Christopher Mohr <christopher.mohr@qbic.uni-tuebingen.de>

* Fix protobuf version for tests, prepare docs for 3.1.0 release (#64)

* Prepare docs for new release

* minor changes/additions docs

* check if fixing protobuf version resolves testing errors

* check if changing github actions workflow resolves testing issue

* allow lower versions of protobuf

* Update epytope/doc/conf.py

Co-authored-by: Gisela Gabernet <gisela.gabernet@gmail.com>

Co-authored-by: Christopher Mohr <christopher.mohr@uni-tuebingen.de>
Co-authored-by: Jonas Scheid <jonas@u-081-c204.eap.uni-tuebingen.de>
Co-authored-by: Gisela Gabernet <gisela.gabernet@gmail.com>

* Add netMHCIIpan 4.1 interface (#66)

* add netmhciipan 4.1 interface

* remove logging

* remove __name method

* update changelog

* Update CHANGELOG.md

Co-authored-by: Christopher Mohr <christopher.mohr@qbic.uni-tuebingen.de>

Co-authored-by: Christopher Mohr <christopher.mohr@uni-tuebingen.de>
Co-authored-by: Christopher Mohr <christopher.mohr@qbic.uni-tuebingen.de>

* minor doc improvements, cleanup setup.py

* bump version

Co-authored-by: Leon Kuchenbecker <leon.kuchenbecker@uni-tuebingen.de>
Co-authored-by: Jonas Scheid <43858870+jonasscheid@users.noreply.github.com>
Co-authored-by: Jonas Scheid <jonas@u-081-c204.eap.uni-tuebingen.de>
Co-authored-by: Gisela Gabernet <gisela.gabernet@gmail.com>
  • Loading branch information
5 people authored Jun 15, 2022
1 parent 8ac9fe5 commit 86586c9
Show file tree
Hide file tree
Showing 13 changed files with 145 additions and 65 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/python-test-conda-external.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
echo "PATH=$PATH"
- name: Set up Python ${{ matrix.python-version }}
run: |
$CONDA/bin/conda create -p /tmp/condaenv python==${{ matrix.python-version }}'.*' setuptools"==52.0"
$CONDA/bin/conda create -p /tmp/condaenv python==${{ matrix.python-version }}'.*' setuptools"==52.0" protobuf"<=3.20.1"
- name: Activate conda environment
run: |
echo "/tmp/condaenv/bin" >> $GITHUB_PATH
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/python-test-conda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
echo "CONDA_PKGS_DIRS=/tmp/condapkgs" >> $GITHUB_ENV
- name: Set up Python ${{ matrix.python-version }}
run: |
$CONDA/bin/conda create -p /tmp/condaenv python==${{ matrix.python-version }}'.*' setuptools"==52.0"
$CONDA/bin/conda create -p /tmp/condaenv python==${{ matrix.python-version }}'.*' setuptools"==52.0" protobuf"<=3.20.1"
- name: Activate conda environment
run: |
echo "/tmp/condaenv/bin" >> $GITHUB_PATH
Expand Down
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,22 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## v3.1.0 - 2022-06-15

### `Added`

- [#58](https://github.com/KohlbacherLab/epytope/pull/58) - Add check for `BioMart` transcript sequence availability [#55](https://github.com/KohlbacherLab/epytope/issues/55)
- [#59](https://github.com/KohlbacherLab/epytope/pull/59) - Add interface for `NetMHCpan 4.1` [#56](https://github.com/KohlbacherLab/epytope/issues/56)
- [#66](https://github.com/KohlbacherLab/epytope/pull/66) - Add interface for `NetMHCIIpan 4.1` [#65](https://github.com/KohlbacherLab/epytope/issues/65)

### `Changed`

- [#62](https://github.com/KohlbacherLab/epytope/pull/62) - Update the supported alleles of `syfpeithi` [#60](https://github.com/KohlbacherLab/epytope/issues/60)

### `Fixed`

- [#53](https://github.com/KohlbacherLab/epytope/pull/53) - Fix `ANN` predictor results [#52](https://github.com/KohlbacherLab/epytope/issues/52)

## v3.0.0 - 2022-01-26

Initial release of `epytope`. `epytope` is the successor project of [`FRED2`](https://github.com/FRED-2/Fred2), which was renamed to a more versioning friendly base name.
Expand Down
20 changes: 12 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,19 @@
![PyPi](https://github.com/KohlbacherLab/epytope/actions/workflows/pypi-publish.yml/badge.svg)
![Tests](https://github.com/KohlbacherLab/epytope/actions/workflows/python-test-conda.yml/badge.svg)
![Tests external](https://github.com/KohlbacherLab/epytope/actions/workflows/python-test-conda-external.yml/badge.svg)
[![Anaconda-Server Badge](https://anaconda.org/bioconda/epytope/badges/version.svg)](https://anaconda.org/bioconda/epytope)
[![Anaconda-Server Badge](https://anaconda.org/bioconda/epytope/badges/latest_release_date.svg)](https://anaconda.org/bioconda/epytope)
[![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
[![Anaconda-Server Badge](https://anaconda.org/bioconda/fred2/badges/installer/conda.svg)](https://conda.anaconda.org/bioconda)
[![Anaconda-Server Badge](https://anaconda.org/bioconda/epytope/badges/installer/conda.svg)](https://conda.anaconda.org/bioconda)
[![Anaconda-Server Badge](https://anaconda.org/bioconda/epytope/badges/downloads.svg)](https://anaconda.org/bioconda/epytope)

Copyright 2014 by Benjamin Schuber, Mathias Walzer, Philipp Brachvogel, Andras Szolek, Christopher Mohr, and Oliver Kohlbacher
Copyright 2014 by Benjamin Schuber, Mathias Walzer, Philipp Brachvogel, Andras Szolek, Christopher Mohr, and Oliver Kohlbacher

**epytope** is a framework for T-cell epitope detection, and vaccine design. It offers consistent, easy, and simultaneous access to well established prediction methods of computational immunology. **epytope** can handle polymorphic proteins and offers analysis tools to select, assemble, and design linker sequences for string-of-beads epitope-based vaccines. It is implemented in Python in a modular way and can easily be extended by user defined methods.

## Copyright

epytope is released under the three clause BSD licence.
epytope is released under the three clause BSD license.

## Installation

Expand All @@ -27,9 +30,10 @@ use the following commands:
- pandas
- pyomo>=4.0
- svmlight
- MySQL-python>=1.2.4
- Biopython
- PyMySQL
- biopython
- pyVCF
- h5py<=2.10.0

### Third-Party Software (not installed through pip)

Expand Down Expand Up @@ -57,8 +61,8 @@ Currently **epytope** provides implementations of several prediction methods or
- [MHCflurry](https://pubmed.ncbi.nlm.nih.gov/29960884/) 1.2.2, 1.4.3
- [NetMHC](https://pubmed.ncbi.nlm.nih.gov/26515819/) 3.0, 3.4, 4.0
- [NetMHCII](https://pubmed.ncbi.nlm.nih.gov/29315598/) 2.2, 2.3
- [NetMHCpan](https://pubmed.ncbi.nlm.nih.gov/28978689/) 2.4, 2.8, 3.0, 4.0
- [NetMHCIIpan](https://pubmed.ncbi.nlm.nih.gov/32406916/) 3.0, 3.1, 4.0
- [NetMHCpan](https://pubmed.ncbi.nlm.nih.gov/28978689/) 2.4, 2.8, 3.0, 4.0, 4.1
- [NetMHCIIpan](https://pubmed.ncbi.nlm.nih.gov/32406916/) 3.0, 3.1, 4.0, 4.1
- [PickPocket](https://pubmed.ncbi.nlm.nih.gov/19297351/) 1.1
- [NetCTLpan](https://pubmed.ncbi.nlm.nih.gov/20379710/) 1.1
- Epitope Selection
Expand All @@ -71,7 +75,7 @@ Currently **epytope** provides implementations of several prediction methods or

## Getting Started

Users and developers should start by reading our [wiki](https://github.com/KohlbacherLab/epytope/wiki) and [IPython tutorials](https://github.com/KohlbacherLab/epytope/tree/master/epytope/tutorials). A reference documentation is also available [online](http://fred2.readthedocs.org/en/latest/).
Users and developers should start by reading our [wiki](https://github.com/KohlbacherLab/epytope/wiki) and [IPython tutorials](https://github.com/KohlbacherLab/epytope/tree/master/epytope/tutorials). A reference documentation is also available [online](http://epytope.readthedocs.org/en/latest/).

## How to Cite

Expand Down
5 changes: 3 additions & 2 deletions epytope/Core/Generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"""

import logging
import warnings
from itertools import chain

Expand Down Expand Up @@ -243,7 +244,7 @@ def _generate_combinations(tId, vs, seq, usedVs, offset, isReverse):
#print tId
query = dbadapter.get_transcript_information(tId, type=id_type, _db=db)
if query is None:
warnings.warn("Transcript with ID %s not found in DB"%tId)
logging.warning("Transcript with ID %s not found in DB or sequence unavailable"%tId)
continue

tSeq = query[EAdapterFields.SEQ]
Expand Down Expand Up @@ -349,7 +350,7 @@ def _generate_combinations(tId, vs, seq, usedVs, offset, isReverse=False):
for tId, vs in transToVar.items():
query = dbadapter.get_transcript_information(tId, type=id_type, _db=db)
if query is None:
warnings.warn("Transcript with ID %s not found in DB"%tId)
logging.warning("Transcript with ID %s not found in DB or sequence unavailable"%tId)
continue

tSeq = query[EAdapterFields.SEQ]
Expand Down
1 change: 0 additions & 1 deletion epytope/Data/pssms/syfpeithi/mat/A_0300_9.py

This file was deleted.

6 changes: 3 additions & 3 deletions epytope/EpitopePrediction/ANN.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ def predict(self, peptides, alleles=None, binary=False, **kwargs):

# create EpitopePredictionResult object. This is a multi-indexed DataFrame
# with Allele, Method and Score type as multi-columns and peptides as rows
df_result = EpitopePredictionResult.from_dict(result, pep_groups, self.name)
df_result = EpitopePredictionResult.from_dict(result, peptide_objects.values(), self.name)

return df_result

Expand Down Expand Up @@ -534,7 +534,7 @@ def predict(self, peptides, alleles=None, binary=False, **kwargs):

# create EpitopePredictionResult object. This is a multi-indexed DataFrame
# with Allele, Method and Score type as multi-columns and peptides as rows
df_result = EpitopePredictionResult.from_dict(result, pep_groups, self.name)
df_result = EpitopePredictionResult.from_dict(result, peptide_objects.values(), self.name)
return df_result

except BadSignatureException:
Expand Down Expand Up @@ -804,7 +804,7 @@ def predict(self, peptides, alleles=None, binary=False, **kwargs):

# create EpitopePredictionResult object. This is a multi-indexed DataFrame
# with Allele, Method and Score type as multi-columns and peptides as rows
df_result = EpitopePredictionResult.from_dict(result, pep_groups, self.name)
df_result = EpitopePredictionResult.from_dict(result, peptide_objects.values(), self.name)
return df_result

except BadSignatureException:
Expand Down
98 changes: 95 additions & 3 deletions epytope/EpitopePrediction/External.py

Large diffs are not rendered by default.

8 changes: 2 additions & 6 deletions epytope/EpitopePrediction/PSSM.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,8 @@ class Syfpeithi(APSSMEpitopePrediction):
SYFPEITHI: database for MHC ligands and peptide motifs. Immunogenetics, 50(3-4), 213-219.
"""
__alleles = frozenset(
['HLA-B*15:10', 'HLA-B*41:01', 'HLA-B*37:01', 'HLA-B*27:05', 'HLA-B*38:01', 'HLA-A*02:01', 'HLA-B*47:01',
'HLA-A*26:01', 'HLA-B*37:01', 'HLA-DRB1*11:01', 'HLA-B*50:01', 'HLA-B*07:02', 'HLA-A*68:01', 'HLA-A*24:02',
'HLA-DRB1*15:01', 'HLA-B*15:01', 'HLA-B*45:01', 'HLA-A*11:01', 'HLA-A*03:01', 'HLA-B*40:01', 'HLA-DRB1*03:01',
'HLA-B*39:01', 'HLA-DRB1*01:01', 'HLA-B*51:01', 'HLA-B*39:02', 'HLA-B*08:01', 'HLA-B*18:01', 'HLA-B*44:02',
'HLA-B*49:01', 'HLA-DRB1*07:01', 'HLA-B*14:02', 'HLA-A*01:01'])
__supported_length = frozenset([8, 9, 10, 11])
['HLA-A*01:01','HLA-A*02:01','HLA-A*03:01','HLA-A*11:01','HLA-A*24:02','HLA-A*26:01','HLA-A*31:01','HLA-A*32:01','HLA-A*33:01','HLA-A*66:01','HLA-A*68:01','HLA-B*07:02','HLA-B*08:01','HLA-B*13:02','HLA-B*14:02','HLA-B*15:01','HLA-B*15:16','HLA-B*18:01','HLA-B*27:05','HLA-B*27:09','HLA-B*35:01','HLA-B*37:01','HLA-B*38:01','HLA-B*39:01','HLA-B*39:02','HLA-B*40:01','HLA-B*40:02','HLA-B*41:01','HLA-B*44:02','HLA-B*45:01','HLA-B*47:01','HLA-B*49:01','HLA-B*50:01','HLA-B*51:01','HLA-B*53:01','HLA-B*57:01','HLA-B*58:01','HLA-B*58:02','HLA-C*01:02','HLA-C*02:02','HLA-C*03:03','HLA-C*03:04','HLA-C*04:01','HLA-C*05:01','HLA-C*06:01','HLA-C*06:02','HLA-C*07:01','HLA-C*07:02','HLA-C*08:02','HLA-C*12:03','HLA-C*14:02','HLA-C*15:02','HLA-C*16:01','HLA-C*17:01','HLA-DRB1*01:01','HLA-DRB1*03:01','HLA-DRB1*07:01','HLA-DRB1*11:01','HLA-DRB1*15:01','HLA-G*01:01','H-2-Db','H-2-Kb','H-2-Kd','H-2-Ld'])
__supported_length = frozenset([8, 9, 10, 11, 12, 13])
__name = "syfpeithi"
__version = "1.0"

Expand Down
13 changes: 7 additions & 6 deletions epytope/IO/MartsAdapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,11 @@ def get_product_sequence(self, product_id, **kwargs):
+ self.biomart_attribute%("external_gene_name") \
+ self.biomart_tail

# logging.warn(rq_n)
tsvreader = csv.DictReader((urllib.request.urlopen(self.biomart_url +
urllib.parse.quote(rq_n))).read().decode('utf-8').splitlines(), dialect='excel-tab')
tsvselect = [x for x in tsvreader]
if not tsvselect:
logging.warning("There seems to be no Proteinsequence for " + str(product_id))
#print self.biomart_url+rq_n
return None
self.sequence_proxy[product_id] = tsvselect[0]["Peptide"][:-1] if tsvselect[0]["Peptide"].endswith('*')\
else tsvselect[0]["Peptide"]
Expand Down Expand Up @@ -157,8 +155,10 @@ def get_transcript_sequence(self, transcript_id, **kwargs):
urllib.parse.quote(rq_n))).read().decode('utf-8').splitlines(), dialect='excel-tab')
tsvselect = [x for x in tsvreader]
if not tsvselect:
logging.warning("There seems to be no transcript sequence for " + str(transcript_id))
#print self.biomart_url+rq_n
logging.warning("No transcript sequence available for " + str(transcript_id))
return None
elif 'Sequence unavailable' in tsvselect[0]['Coding sequence']:
logging.warning("No transcript sequence available for " + str(transcript_id))
return None

self.sequence_proxy[transcript_id] = tsvselect[0]['Coding sequence']
Expand Down Expand Up @@ -210,6 +210,9 @@ def get_transcript_information(self, transcript_id, **kwargs):
if not tsvselect:
logging.warning("No Information on transcript %s"%transcript_id)
return None
elif 'Sequence unavailable' in tsvselect[0]['Coding sequence']:
logging.warning("No transcript sequence available for " + str(transcript_id))
return None

self.ids_proxy[transcript_id] = {EAdapterFields.SEQ: tsvselect[0]['Coding sequence'],
EAdapterFields.GENE: tsvselect[0].get('Associated Gene Name', ""),
Expand Down Expand Up @@ -596,8 +599,6 @@ def get_variant_ids(self, **kwargs):
+ self.biomart_attribute%("refseq_peptide")
rq_n += self.biomart_attribute%("uniprot_swissprot") + self.biomart_tail

# logging.warning(rq_n)

tsvreader = csv.DictReader((urllib.request.urlopen(self.biomart_url +
urllib.parse.quote(rq_n)).read()).decode('utf-8').splitlines(), dialect='excel-tab')
if ensemble_only:
Expand Down
2 changes: 1 addition & 1 deletion epytope/doc/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ def __getattr__(cls, name):
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'fred2', 'epytope Documentation',
(master_doc, 'epytope', 'epytope Documentation',
[author], 1)
]

Expand Down
4 changes: 2 additions & 2 deletions epytope/tutorials/GeneratorUsage.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/antonia/PycharmProjects/Kfred/epytope/Core/Generator.py:57: UserWarning: For NM_001190266 bp does not match ref of assigned variant Variant(g.234183368A>G). Pos 645, var ref A, seq ref C \n",
"epytope/Core/Generator.py:57: UserWarning: For NM_001190266 bp does not match ref of assigned variant Variant(g.234183368A>G). Pos 645, var ref A, seq ref C \n",
" seq[pos]))\n"
]
},
Expand Down Expand Up @@ -277,7 +277,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/antonia/opt/miniconda3/envs/epy/lib/python3.7/site-packages/Bio/Seq.py:2338: BiopythonWarning: Partial codon, len(sequence) not a multiple of three. Explicitly trim the sequence or add trailing N before translation. This may become an error in future.\n",
"/opt/miniconda3/envs/epy/lib/python3.7/site-packages/Bio/Seq.py:2338: BiopythonWarning: Partial codon, len(sequence) not a multiple of three. Explicitly trim the sequence or add trailing N before translation. This may become an error in future.\n",
" BiopythonWarning,\n"
]
}
Expand Down
33 changes: 2 additions & 31 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,9 @@

here = path.abspath(path.dirname(__file__))

#d2s_src_dir = path.join(path.join('epytope', 'Distance2Self'), 'src')
#d2s_module = Extension('epytope.d2s',
# define_macros=[('MAJOR_VERSION', '1'),
# ('MINOR_VERSION', '0')],
# include_dirs=[d2s_src_dir],
# libraries=['boost_serialization', 'boost_python'],
# #library_dirs = ['/usr/local/lib'],
# depends=[path.join(d2s_src_dir, 'distance2self.hpp')],
# sources=[path.join(d2s_src_dir, 'distance2self.cpp')])


#data_files = list()
# directories = glob.glob('epytope/Data/svms/*/')
# for directory in directories:
# files = glob.glob(directory + '*')
# data_files.append((directory, files))
#directories = glob.glob('epytope/Data/examples/')
#for directory in directories:
# files = glob.glob(directory + '*')
# data_files.append((directory, files))
#
# d2s_files = glob.glob(d2s_dir + "src/" + '*')
#data_files.append((d2s_dir + "src/", d2s_files))

#for packaging files must be in a package (with init) and listed in package_data
# package-externals can be included with data_files,
# and there is a bug in patternmatching http://bugs.python.org/issue19286
# and there is a bug in patter nmatching http://bugs.python.org/issue19286
# install unclear for data_files

# Read the contents of the README.md file for use as long_description
Expand All @@ -45,7 +21,7 @@
name='epytope',

# Version:
version='3.0.0',
version='3.1.0',

description='A Framework for Epitope Detection and Vaccine Design',
long_description=long_description,
Expand Down Expand Up @@ -89,7 +65,6 @@
# Specify packages via find_packages() and exclude the tests and
# documentation:
packages=find_packages(),
#packages=find_packages(exclude=['epytope.test', 'epytope.doc', 'epytope.tutorials']),

# If there are data files included in your packages that need to be
# installed, specify them here. If using Python 2.6 or less, then these
Expand All @@ -100,7 +75,6 @@
'epytope.Data.svms.svmtap': ['*'],
'epytope.Data.svms.svmhc': ['*'],
'epytope.Data.svms.unitope': ['*'],
#'epytope.Distance2Self': ['src/*'], #does not get installed, because the src folder is no package folder - compiles ok
},

data_files = [
Expand All @@ -124,9 +98,6 @@
# ],
#},

#ext_modules=[helloworld_module],
#ext_modules=[d2s_module],

# Run-time dependencies. (will be installed by pip when epytope is installed)
# TODO: find alternative for SMVlight scikitlearn
install_requires=[
Expand Down

0 comments on commit 86586c9

Please sign in to comment.