Skip to content

Commit

Permalink
broken
Browse files Browse the repository at this point in the history
  • Loading branch information
iskandr committed Oct 7, 2024
1 parent ce1ac5d commit 0229eff
Show file tree
Hide file tree
Showing 5 changed files with 225 additions and 110 deletions.
2 changes: 1 addition & 1 deletion develop.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
set -e

pip install -e .
uv pip install -e .
57 changes: 29 additions & 28 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
# limitations under the License.


from __future__ import (absolute_import,)
from __future__ import (
absolute_import,
)

import os
import logging
Expand All @@ -20,53 +22,52 @@
from setuptools import setup

readme_dir = os.path.dirname(__file__)
readme_path = os.path.join(readme_dir, 'README.md')
readme_path = os.path.join(readme_dir, "README.md")

try:
with open(readme_path, 'r') as f:
with open(readme_path, "r") as f:
readme_markdown = f.read()
except:
logging.warn("Failed to load %s" % readme_path)
readme_markdown = ""

with open('vaxrank/__init__.py', 'r') as f:
version = re.search(
r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]',
f.read(),
re.MULTILINE).group(1)

with open("requirements.txt") as f:
requirements = [req.strip() for req in f.read().splitlines() if req.strip()]
with open("vaxrank/version.py", "r") as f:
match = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE)
if not match:
raise RuntimeError("Cannot find version information")
else:
version = match.group(1)

if not version:
raise RuntimeError("Cannot find version information")

if __name__ == '__main__':

with open("requirements.txt") as f:
requirements = [req.strip() for req in f.read().splitlines() if req.strip()]


if __name__ == "__main__":
setup(
name='vaxrank',
name="vaxrank",
version=version,
description="Mutant peptide ranking for personalized cancer vaccines",
author="Alex Rubinsteyn, Julia Kodysh",
author_email="[email protected], [email protected]",
url="https://github.com/openvax/vaxrank",
license="http://www.apache.org/licenses/LICENSE-2.0.html",
classifiers=[
'Development Status :: 4 - Beta',
'Environment :: Console',
'Operating System :: OS Independent',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python',
'Topic :: Scientific/Engineering :: Bio-Informatics',
"Development Status :: 4 - Beta",
"Environment :: Console",
"Operating System :: OS Independent",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python",
"Topic :: Scientific/Engineering :: Bio-Informatics",
],
install_requires=requirements,
long_description=readme_markdown,
long_description_content_type='text/markdown',
packages=['vaxrank'],
package_data={'vaxrank': ['templates/*', 'data/*', 'logging.conf']},
entry_points={
'console_scripts': [
'vaxrank = vaxrank.cli.entry_point:main'
]
}
long_description_content_type="text/markdown",
packages=["vaxrank"],
package_data={"vaxrank": ["templates/*", "data/*", "logging.conf"]},
entry_points={"console_scripts": ["vaxrank = vaxrank.cli.entry_point:main"]},
)
128 changes: 68 additions & 60 deletions vaxrank/core_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,38 +27,40 @@

logger = logging.getLogger(__name__)


def run_vaxrank(
isovar_results : list[IsovarResult],
mhc_predictor : BasePredictor,
vaccine_peptide_length : int = 25,
max_vaccine_peptides_per_variant : int = 1,
num_mutant_epitopes_to_keep : int = 10000,
epitope_config : EpitopeConfig = None,
vaccine_config : VaccineConfig = None):
isovar_results: list[IsovarResult],
mhc_predictor: BasePredictor,
vaccine_peptide_length: int = 25,
max_vaccine_peptides_per_variant: int = 1,
num_mutant_epitopes_to_keep: int = 10000,
epitope_config: EpitopeConfig = None,
vaccine_config: VaccineConfig = None,
):
"""
Parameters
----------
isovar_results
isovar_results
Each IsovarResult corresponds to one somatic variant and its collection
of protein sequences determined from RNA.
mhc_predictor
Object with predict_peptides method, used for making pMHC binding
predictions
vaccine_peptide_length
vaccine_peptide_length
Length of vaccine SLP to construct
max_vaccine_peptides_per_variant
Number of vaccine peptides to generate for each mutation.
num_mutant_epitopes_to_keep
num_mutant_epitopes_to_keep
Number of top-ranking epitopes for each vaccine peptide to include in
computation.
epitope_config
epitope_config
Configuration options for epitope scoring, using defaults if not provided
vaccine_config
Configuration options for vaccine peptide selection, using defaults if not provided
"""
Expand All @@ -69,46 +71,49 @@ def run_vaxrank(
max_vaccine_peptides_per_variant=max_vaccine_peptides_per_variant,
num_mutant_epitopes_to_keep=num_mutant_epitopes_to_keep,
epitope_config=epitope_config,
vaccine_config=vaccine_config)
vaccine_config=vaccine_config,
)
ranked_list = ranked_vaccine_peptides(variant_to_vaccine_peptides_dict)

return VaxrankResults(
isovar_results=isovar_results,
variant_to_vaccine_peptides_dict=variant_to_vaccine_peptides_dict,
ranked_vaccine_peptides=ranked_list)
ranked_vaccine_peptides=ranked_list,
)


def create_vaccine_peptides_dict(
isovar_results : list[IsovarResult],
mhc_predictor : BasePredictor,
vaccine_peptide_length : int = 25,
max_vaccine_peptides_per_variant : int = 1,
num_mutant_epitopes_to_keep : int = 10 ** 5,
epitope_config : EpitopeConfig = None,
vaccine_config : VaccineConfig = None):
isovar_results: list[IsovarResult],
mhc_predictor: BasePredictor,
vaccine_peptide_length: int = 25,
max_vaccine_peptides_per_variant: int = 1,
num_mutant_epitopes_to_keep: int = 10**5,
epitope_config: EpitopeConfig = None,
vaccine_config: VaccineConfig = None,
):
"""
Parameters
----------
isovar_results
isovar_results
List with one object per variant optionally containing protein sequences
mhc_predictor
Object with predict_peptides method, used for making pMHC binding
predictions
vaccine_peptide_length
vaccine_peptide_length
Length of vaccine SLP to construct
max_vaccine_peptides_per_variant
max_vaccine_peptides_per_variant
Number of vaccine peptides to generate for each mutation.
num_mutant_epitopes_to_keep
num_mutant_epitopes_to_keep
Number of top-ranking epitopes for each vaccine peptide to include in
computation.
epitope_config
epitope_config
Configuration options for epitope scoring, using defaults if not provided
vaccine_config
Configuration options for vaccine peptide selection, using defaults if not provided
Expand All @@ -127,38 +132,40 @@ def create_vaccine_peptides_dict(
max_vaccine_peptides_per_variant=max_vaccine_peptides_per_variant,
num_mutant_epitopes_to_keep=num_mutant_epitopes_to_keep,
epitope_config=epitope_config,
vaccine_config=vaccine_config)
vaccine_config=vaccine_config,
)

if any(x.contains_mutant_epitopes() for x in vaccine_peptides):
vaccine_peptides_dict[variant] = vaccine_peptides

return vaccine_peptides_dict


def vaccine_peptides_for_variant(
isovar_result : IsovarResult,
mhc_predictor : BasePredictor,
epitope_config : EpitopeConfig = None,
vaccine_config : VaccineConfig = None):
isovar_result: IsovarResult,
mhc_predictor: BasePredictor,
epitope_config: EpitopeConfig = None,
vaccine_config: VaccineConfig = None,
):
"""
Parameters
----------
isovar_result
mhc_predictor
mhc_predictor
Object with predict_peptides method, used for making pMHC binding
predictions
vaccine_peptide_length
vaccine_peptide_length
Length of vaccine SLP to construct
max_vaccine_peptides_per_variant
max_vaccine_peptides_per_variant
Number of vaccine peptides to generate for each mutation.
num_mutant_epitopes_to_keep
num_mutant_epitopes_to_keep
Number of top-ranking epitopes for each vaccine peptide to include in
computation.
Returns
-------
Sorted list of VaccinePeptide objects. If there are no suitable vaccine
Expand All @@ -172,54 +179,58 @@ def vaccine_peptides_for_variant(
variant = isovar_result.variant
long_protein_fragment = MutantProteinFragment.from_isovar_result(isovar_result)

logger.info(
"Mutant protein fragment for %s: %s",
variant,
long_protein_fragment)
logger.info("Mutant protein fragment for %s: %s", variant, long_protein_fragment)

epitope_predictions_dict = predict_epitopes(
mhc_predictor=mhc_predictor,
protein_fragment=long_protein_fragment,
epitope_config=epitope_config,
genome=variant.ensembl)
epitope_predictions : list[] = epitope_predictions_dict.values()
genome=variant.ensembl,
)
epitope_predictions = epitope_predictions_dict.values()
return vaccine_peptides_from_epitopes(
epitope_predictions,
vaccine_config=vaccine_config)
epitope_predictions, vaccine_config=vaccine_config
)


def vaccine_peptides_from_epitopes():
# TODO: make a function called vaccine_peptides_from_epitopes that
# takes vaccine_config as an option
candidate_vaccine_peptides = []

for offset, candidate_fragment in long_protein_fragment.sorted_subsequences(
subsequence_length=vaccine_peptide_length):
subsequence_length=vaccine_peptide_length
):

subsequence_epitope_predictions = slice_epitope_predictions(
epitope_predictions,
start_offset=offset,
end_offset=offset + len(candidate_fragment))
end_offset=offset + len(candidate_fragment),
)
# filter out peptides that have no epitopes
if not subsequence_epitope_predictions:
logger.info(
"No epitope predictions for mutant protein fragment %s",
candidate_fragment)
candidate_fragment,
)
continue

assert all(
p.source_sequence == candidate_fragment.amino_acids
for p in subsequence_epitope_predictions)
for p in subsequence_epitope_predictions
)

candidate_vaccine_peptide = VaccinePeptide(
mutant_protein_fragment=candidate_fragment,
epitope_predictions=subsequence_epitope_predictions,
num_mutant_epitopes_to_keep=vaccine_config.num_mutant_epitopes_to_keep)
num_mutant_epitopes_to_keep=vaccine_config.num_mutant_epitopes_to_keep,
)

logger.debug(
"%s, combined score: %0.4f",
candidate_vaccine_peptide,
candidate_vaccine_peptide.combined_score)
candidate_vaccine_peptide.combined_score,
)
candidate_vaccine_peptides.append(candidate_vaccine_peptide)

n_total_candidates = len(candidate_vaccine_peptides)
Expand All @@ -240,10 +251,8 @@ def vaccine_peptides_from_epitopes():
]
n_filtered = len(filtered_candidate_vaccine_peptides)
logger.info(
"Keeping %d/%d vaccine peptides for %s",
n_filtered,
n_total_candidates,
variant)
"Keeping %d/%d vaccine peptides for %s", n_filtered, n_total_candidates, variant
)

if n_filtered == 0:
return []
Expand All @@ -256,7 +265,8 @@ def vaccine_peptides_from_epitopes():
"%d) %s (combined score = %0.4f)",
i + 1,
vaccine_peptide,
vaccine_peptide.combined_score)
vaccine_peptide.combined_score,
)

return filtered_candidate_vaccine_peptides[:max_vaccine_peptides_per_variant]

Expand Down Expand Up @@ -286,5 +296,3 @@ def sort_key(variant_and_vaccine_peptides_pair):
# sort in descending order of combined (expression * mhc binding) scores
result_list.sort(key=sort_key, reverse=True)
return result_list


Loading

0 comments on commit 0229eff

Please sign in to comment.