Developed by: André Fonseca, PhD
devtools::install_github("antuneslab/crossdome", build_vignettes = TRUE)
Crossdome: An interactive R package to predict cross-reactivity risk using immunopeptidomics databases
Currently, several clinical protocols are leveraging on distinct immune mechanisms, such as adoptive T-cell therapy and peptide-based vaccines. However, multiple factors can impact the accuracy of these immune-based applications, such as expression heterogeneity, immunogenicity, and cross-reactivity (CR) risk. Crossdome was created to measure cross-reactivity potential based on biochemical properties. Our approach aims to rank potential CR candidates and measure cross-reactivity risk using mRNA expression, immunogenicity score (TCR binding), and MHC presentation probability. Additionally, we provide the expression profile related to each CR candidate.
Figure 1. Crossdome workflow and strategy. Crossdome summarises biochemical properties per amino acid into 12 principal components. In turn, the principal components are used to convert peptide sequences into biochemical profiles (matrices). Next, given a target peptide, Crossdome screens an immunopeptidomics dataset for a similar biochemical profiler, i.e., CR candidates. A relatedness score between the target and candidate off-targets is calculated based on weighted linear distance. Finally, Crossdome incorporates expression levels and immunogenicity predictions for each potential off-target.
cross_background
Peptide database spanning eluted candidates (experimentally validated) and custom (user-defined).cross_pair_summary
Calculates relatedness score between peptides.cross_compose
Predicts relatedness among peptides in a given database. Low values are associated with cross-reactive candidates.cross_browser
Opens an interactive shiny application.
cross_expression_matrix
Extracts gene donor mRNA expression based on CR candidates.cross_substitution_matrix
Calculates position-specific substitution across cross-reactive candidates.cross_peptide_properties
Converts a peptide to biochemical profile.cross_write
Exports Crossdome result slot for a tsv file.
cross_expression_plot
A heatmap presenting the gene donor expression profile.cross_tissues_plot
A bar plot summarizing the tissue-specificy groups.cross_prediction_plot
Plot a dot plot showing the immunogenic predictions [UNDER CONSTRUCTION].cross_pairwise_plot
Correlation plot based on two peptide / biochemical profiles [UNDER CONSTRUCTION].cross_substitution_plot
A heatmap combined with seqlogo displaying amino acid substitutions.
Examples of each function, including code, are available in the package
documentation. Please use: ?FUNCTION_NAME
. Additionally, two vignettes
are available through the command browseVignettes('crossdome')
.
hla_database
Immunopeptidomics spanning several MHC Class I alleles. Includes binding affinity, and immunogenicity score from MHC Flurry and DeepImmuno, respectively.hpa_database
Expression database derived from Human Protein Atlas.peptide_annotation
Database for mapping peptides to gene-donors derived from NCBI RefSeq Protein [UNDER CONSTRUCTION].mage_off_targets
Curated off-targets related to MAGEA3-specific TCR.
To inspect the data sets use: data(DATA_NAME)
library(crossdome)
database <- cross_background(off_targets = 'ESDPIVAQY', allele = "HLA-A*01:01")
result <- cross_compose(query = 'EVDPIGHLY', background = database)
#> ##------ Mon Mar 27 12:10:59 2023 ------##
View(result@result)
rank | query | subject | n_positive | n_mismatch | relatedness_score | pvalue | hla_allele |
---|---|---|---|---|---|---|---|
1 | EVDPIGHLY | EVDPIGHLY | 9 | 0 | 0.00 | 0.0000000 | HLA-A01:01 |
2 | EVDPIGHLY | EVDPIGHVY | 9 | 1 | 1.35 | 0.0000001 | HLA-A01:01 |
3 | EVDPIGHLY | EADPTGHSY | 6 | 3 | 8.72 | 0.0000336 | HLA-A01:01 |
4 | EVDPIGHLY | EVDPTSHSY | 6 | 3 | 10.43 | 0.0001107 | HLA-A01:01 |
5 | EVDPIGHLY | VSDPVGVLY | 6 | 4 | 10.95 | 0.0001567 | HLA-A01:01 |
6 | EVDPIGHLY | EMDPVTQLY | 8 | 4 | 11.23 | 0.0001889 | HLA-A01:01 |
7 | EVDPIGHLY | YTDPVGVLY | 6 | 4 | 11.53 | 0.0002293 | HLA-A01:01 |
8 | EVDPIGHLY | EHDPVGQMV | 7 | 5 | 11.69 | 0.0002542 | HLA-A01:01 |
9 | EVDPIGHLY | ESDPEGALW | 6 | 4 | 12.72 | 0.0004821 | HLA-A01:01 |
10 | EVDPIGHLY | EVAPAGASY | 5 | 4 | 12.95 | 0.0005563 | HLA-A01:01 |
11 | EVDPIGHLY | NVDPVQHTY | 6 | 4 | 12.97 | 0.0005612 | HLA-A01:01 |
12 | EVDPIGHLY | DSDPTGTAY | 5 | 5 | 13.04 | 0.0005853 | HLA-A01:01 |
13 | EVDPIGHLY | DVSPLMHLF | 7 | 5 | 13.49 | 0.0007682 | HLA-A01:01 |
14 | EVDPIGHLY | QIDPVLQVY | 8 | 6 | 13.55 | 0.0007944 | HLA-A01:01 |
15 | EVDPIGHLY | SLDPLAMLY | 6 | 5 | 13.58 | 0.0008085 | HLA-A01:01 |
16 | EVDPIGHLY | SVDPHGFIS | 5 | 5 | 13.60 | 0.0008169 | HLA-A01:01 |
17 | EVDPIGHLY | LLDPIKELY | 6 | 4 | 13.66 | 0.0008489 | HLA-A01:01 |
18 | EVDPIGHLY | FVEPVGLNY | 6 | 5 | 13.75 | 0.0008957 | HLA-A01:01 |
19 | EVDPIGHLY | FVNPISFVY | 6 | 5 | 13.88 | 0.0009614 | HLA-A01:01 |
20 | EVDPIGHLY | KFDPVGEIL | 6 | 6 | 14.04 | 0.0010592 | HLA-A01:01 |
21 | EVDPIGHLY | AVDPIKDMY | 6 | 4 | 14.06 | 0.0010678 | HLA-A01:01 |
22 | EVDPIGHLY | FLEPLGLAY | 6 | 6 | 14.08 | 0.0010839 | HLA-A01:01 |
23 | EVDPIGHLY | QLDPIYVAY | 6 | 5 | 14.15 | 0.0011284 | HLA-A01:01 |
24 | EVDPIGHLY | ELDPNNAVY | 6 | 5 | 14.18 | 0.0011473 | HLA-A01:01 |
25 | EVDPIGHLY | YVDSEGHLY | 6 | 3 | 14.20 | 0.0011600 | HLA-A01:01 |
26 | EVDPIGHLY | IISPVGDAY | 5 | 6 | 14.37 | 0.0012774 | HLA-A01:01 |
27 | EVDPIGHLY | ESDPIVAQY | 5 | 4 | 14.38 | 0.0012840 | HLA-A01:01 |
28 | EVDPIGHLY | NIDPITMAY | 5 | 5 | 14.38 | 0.0012849 | HLA-A01:01 |
29 | EVDPIGHLY | QVDPLSALK | 6 | 5 | 14.46 | 0.0013432 | HLA-A01:01 |
30 | EVDPIGHLY | KWDPTGHIL | 6 | 5 | 14.47 | 0.0013482 | HLA-A01:01 |
str(result)
#> Formal class 'xrResult' [package "crossdome"] with 7 slots
#> ..@ query : chr "EVDPIGHLY"
#> ..@ result :'data.frame': 37656 obs. of 10 variables:
#> .. ..$ rank : int [1:37656] 1 2 3 4 5 6 7 8 9 10 ...
#> .. ..$ query : chr [1:37656] "EVDPIGHLY" "EVDPIGHLY" "EVDPIGHLY" "EVDPIGHLY" ...
#> .. ..$ subject : chr [1:37656] "EVDPIGHLY" "EVDPIGHVY" "EADPTGHSY" "EVDPTSHSY" ...
#> .. ..$ n_positive : int [1:37656] 9 9 6 6 6 8 6 7 6 5 ...
#> .. ..$ n_mismatch : int [1:37656] 0 1 3 3 4 4 4 5 4 4 ...
#> .. ..$ relatedness_score: num [1:37656] 0 1.35 8.72 10.43 10.95 ...
#> .. ..$ zscore : num [1:37656] -5.48 -5.25 -3.99 -3.69 -3.6 ...
#> .. ..$ pvalue : num [1:37656] 2.12e-08 7.66e-08 3.36e-05 1.11e-04 1.57e-04 ...
#> .. ..$ hla_allele : chr [1:37656] "HLA-A*01:01" "HLA-A*01:01" "HLA-A*01:01" "HLA-A*01:01" ...
#> .. ..$ percentile_rank : num [1:37656] 0 0.00266 0.00531 0.00797 0.01062 ...
#> ..@ allele : chr "HLA-A*01:01"
#> ..@ expression : list()
#> ..@ analysis : list()
#> ..@ position_weight: num [1:9] 1 1 1 1 1 1 1 1 1
#> ..@ timestamp : chr "##------ Mon Mar 27 12:10:59 2023 ------##"