Author: Richel J.C. Bilderbeek
Date: 2023-11-08

# Binding strength prediction

#### Richel J.C. Bilderbeek

#### 2023-11-08

This demo shows how to predict the binding strength of peptides to different Major Histocompatibility Class II (MHC-II) haplotypes.

First load the library:

    library(netmhc2pan)

This demo assumes NetMHCIIpan is installed. Installation cannot be done `netmhc2pan`, as one needs to request a download link for version 3.2 at https://services.healthtech.dtu.dk/services/NetMHCIIpan-3.2/.

To install `netmhc2pan`, use `install_netmhc2pan` with the download link:

    install_netmhc2pan("https://www.cbs.dtu.dk/download/33A6B0AC-0F2E-11E9-B4D1-8ABCB9CD16B5/")
    install_netmhc2pan("https://richelbilderbeek.nl/tmp_netMHCIIpan-3.2.Linux.tar.gz")

The installation of `netmhc2pan` is checked, with the goal of producing a helpful error message:

    tryCatch(
      check_netmhc2pan_installation(),
      error = function(e) print(e)
    )
    #> <simpleError in check_netmhc2pan_installation(): NetMHCIIpan binary not found at
    #> ~/.local/share/netMHCIIpan-3.2/netMHCIIpan
    #>
    #> Tip 1: from R, run 'netmhc2pan::install_netmhc2pan()'
    #>   with a (non-expired) download URL
    #> Tip 2: request a download URL at the NetMHCIIpan download page at
    #>
    #> https://services.healthtech.dtu.dk/services/NetMHCIIpan-3.2/
    #> (under the Downloads tab, use version 3.2)>

Now, lets use the sequence of an example protein:

    sequence <- "FAMILYVWFAMILYV"
    message(sequence)
    #> FAMILYVWFAMILYV

Now, we need to select an MHC-II haplotype. There are many alleles, so first we count the number of haplotypes:

    if (is_netmhc2pan_installed()) {
      mhc_haplotypes <- get_netmhc2pan_alleles()
      length(mhc_haplotypes)
    }

Now, we simply pick the first haplotype:

    if (is_netmhc2pan_installed()) {
      mhc_haplotype <- mhc_haplotypes[1]
    }

Now, we can predict how strong our peptide binds to our allele, by obtaining the Inhibitory Concentration 50% (IC50) value in nanomolars (nM), of which lower values indicate stronger binders:

    if (is_netmhc2pan_installed()) {
      knitr::kable(
        predict_ic50(
          peptides = sequence,
          mhc_haplotype = mhc_haplotype
        )
      )

    }

To investigate if whole a protein is immunogenic, we need to obtain the IC50 values for all its cleaved products. As the MHC-II molecules prefers 13 amino acids residues, we can get the IC50 values for each residue as such:

    if (is_netmhc2pan_installed()) {
      knitr::kable(
        predict_ic50s(
          protein_sequence = "AVLWAGVAFLAFLQLTALVLNLL",
          peptide_length = 13,
          mhc_haplotype = mhc_haplotype
        )
      )

    }