{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Background\n",
    "\n",
    "An essential step in provoking adaptive immunity, delivered by the activated CD8+ or CD4+ T cells, is the recognition of epitopes by T cell receptors (TCR). During this process, short peptides processed from self or foreign proteins may be presented on the surface of the cell and bound to major histocompatibility complex (MHC) proteins for binding to T cell receptors. Those peptide-MHC combinations that bind and activate an immune response are called epitopes. This is the major determinant step and is computationally predictable. The most effective approach is to estimate the binding affinity of a given peptide fragment to MHC class I or II molecules. Algorithms that can identify MHC-class I or MHC-class II binding peptides rapidly and accurately are essential for vaccine development, neo-epitope discovery, and immunogenicity screening of protein therapeutics. Many MHC binding prediction methods exist for both class I and II and have been comprehensively reviewed @ref1⁠. Currently the most effective methods are machine learning (ML) based approaches, which are trained on existing binding affinity data for a given MHC molecule. To do this, the peptide sequence is encoded and these features fit against the known affinity. To date, artificial neural networks (ANN) perform better at this task than other models such as linear regression. This is likely because the hidden layers in such networks are better able to account for the contribution of intrapeptide residue-residue interactions to the binding affinity. All methods vary in accuracy over MHC alleles depending on the availability of quality datasets. Pan-allele tools have been developed to deal with this issue @ref2⁠. These approaches can impute affinities for unknown alleles on the basis of neighboring MHC alleles with the highest sequence similarity and which have sufficient training data.\n",
    "\n",
    "By convention, peptides are selected using an arbitrary score threshold. For affinities, a threshold value of 500 nM is considered a binder and 50 nM a strong binder. The algorithms perform best at this classification task rather than re-producing exact affinities. This problem is intrinsic to ML-based approaches: the effect of the most dominant features is penalized intentionally to achieve better generalization on blind test data @ref3⁠. Another source of the inaccuracy is the loss of sensitivity of experimental assays at either very high or low binding affinity regimes. As a consequence, epitope candidates for subsequent experimental validation selected by ranking the affinities may not necessarily be the best approach. Percentage ranking is now often the recommended method @ref4⁠. However, the exact approach probably depends on the study in question. For example, searching a small number of proteins might mean taking the top ranked percentile from each sequence regardless of score. Threshold selection is discussed later in the examples.\n",
    "\n",
    "## Strategies for epitope selection\n",
    "\n",
    "A typical approach to binder selection is to select the top n^th^ percentile per protein rather than using an absolute threshold value; however, for whole proteome studies, this is likely to introduce multiple false positives from peptides in proteins that would otherwise score very low globally. We therefore include in our method a global standardization of the score over the entire proteome, similar to that used by Bremel et al. @ref5⁠ and others, by setting a global cut-off based on the top percentage of scores from the entire proteome. In addition, some alleles have a significantly higher score distribution and will dominate the results if a uniform score cut-off is applied; this applies in general to MHC binding predictors. Thus, separating global cut-off per allele so that low scoring alleles would be better represented is also advisable. This approach is consistent with recent work by Paul et al. @ref6⁠ regarding allele-specific thresholds in MHC-I prediction. Three such alternative threshold strategies are provided in this library and discussed below.\n",
    "\n",
    "## Binding promiscuity\n",
    "\n",
    "Promiscuous MHC binders are defined in this context as those above the cutoffs in more than a given number of alleles. The rationale for this is that a peptide is more likely to be immunogenic in your target population if it is a binder in multiple alleles.\n",
    "\n",
    "## Tools for epitope selection\n",
    "\n",
    "Software for T cell vaccine development or neoepitope prediction currently concentrates on using the binding prediction or eluted ligand likelihood as the main selection methods. Typically, when a binding prediction tool is published, the authors will provide a binary that can be used on the command line or via a web interface. Some tools provide both. Command line tools offer better control and perhaps higher throughput but may be harder to use for a general user. Virtually, all of these tools require users to input each sequence and its allele separately. It is then difficult or impossible to integrate results from multiple sequences and alleles. The results are often in different formats and it is not possible to compare between algorithms, for example.\n",
    "\n",
    "There are several computational pipelines that help a researcher to predict epitopes \\[@ref7; @ref8]⁠⁠. Other commercial desktop software applications for epitope discovery are EpiMatrix @ref9⁠. Commercial tools may be of high quality but are neither free nor open source, raising issues of reproducibility for academics. There is therefore a limited choice for users in readily available and easy to use tools.\n",
    "\n",
    "# Implementation\n",
    "\n",
    "This software is implemented entirely in Python @ref10. To achieve some level of uniformity between prediction methods, a standardized programmatic interface for executing the binding prediction methods and processing the results was designed. The results from each method can then be processed and visualized in a consistent manner. Prediction methods are implemented by inheriting from a Predictor object. Each predictor may wrap methods from other Python packages or call command line predictors. For example the TepitopePredictor uses the epitopepredict.tepitope module provided with this package. This approach allows us to integrate a new prediction method in a relatively straightforward and consistent manner. The prediction methods always return a Pandas DataFrame (Pandas, RRID:SCR_018214)\\[11]⁠ in a standard format. The predict_sequences method is used for multiple protein sequences and can be run in parallel. This can take a GenBank or fasta file as input. For large numbers of sequences the prediction function   should be called with save=True so that the results are saved as each protein is completed to avoid memory issues, since many alleles might be called for each protein. Results are saved with one file per protein/sequence in csv format. More details on how to use the Python API are given in the online documentation and in the example notebooks referencing the examples below.\n",
    "\n",
    "The web application is implemented in Tornado @ref12⁠ using the Bokeh @ref13⁠ visualization library for making interactive plots.\n",
    "\n",
    "## Supported MHC binding prediction tools\n",
    "\n",
    "The following MHC binding prediction methods are supported through the API. This means they can be utilized via the command line tool. The first two are built into the package, the others require installation of external software by the user. NetMHC tools in particular have to be installed separately as they have a more restrictive academic license that does not allow them to be distributed by a third party or via a repository. Only the ‘pan specific’ versions of these tools are supported as they provide the best allelic coverage.\n",
    "\n",
    "-   TEPITOPEpan @ref14⁠ is a position specific scoring matrix (PSSM) based algorithm. It uses 11 scoring matrices derived from combinatorial competitive binding assays on 11 HLA-DR alleles @ref15⁠. This method is pan specific and covers 700 HLA-DR molecules with unknown binding specificities based on pocket similarity to the original set of 11 library sequences. We have implemented this algorithm as a Python module, thus it comes with the package. It is fast but not as accurate in benchmarks as netMHCIIpan with fewer alleles covered.\n",
    "-   The BasicMHC1 predictor is a built-in MHC-I prediction method further detailed below. It is implemented using the scikit-learn @ref16⁠ package. It only covers 103 MHC-I alleles and cannot currently be extrapolated for use with similar alleles (i.e. not pan specific) but provides a convenient alternative to the external tools.\n",
    "-   MHCflurry @ref17 is an MHC-I predictor also using ANNs trained on affinity measurements. It currently covers 112 human alleles. This is an open-source tool available via pip and thus easy to install. It is recommended for MHC-I predictions unless there are alleles not covered. The latest supported version is 2.0.1.\n",
    "-   NetMHCpan @ref18⁠ is an artificial neural network algorithm covering many human and animal MHC-I alleles. This is trained on both MS eluted ligand data and binding affinity data. It therefore returns two properties: either the likelihood of a peptide becoming a natural ligand, or the predicted binding affinity. Version 4.1 is currently supported.\n",
    "-   NetMHCIIpan @ref19⁠ is also an ANN, trained on binding data for multiple MHC-II alleles. Predictions are now extended to all HLA-DR, DQ and DP known sequences as from version 3.0 @ref20⁠. Both this tool and netMHCpan have the broadest species support of any algorithms. They both have good web interfaces but are covered by free non-commercial academic licenses and the local versions must be installed separately. Version 3.0 is supported.\n",
    "\n",
    "## Available threshold methods\n",
    "\n",
    "Thresholds for considering a peptide to be a binder are somewhat arbitrary. This tool provides three threshold methods. The results from each will overlap but will not be identical. These are applied per sequence/protein and per each allele using the currently loaded data. These three threshold methods are also available when calculating promiscuous binders. Ultimately, these are simply alternative methods of achieving the same result - reducing the set of predicted peptides.\n",
    "\n",
    "**rank** – Selects the top ranking peptides in each sequence above a rank cutoff. This is the most frequently recommended method of binder selection in general.\n",
    "\n",
    "**score** - Uses a single score cutoff for all peptides. Most binding predictors produce a binding affinity score (ic50) and a cutoff of 500 nM is common. There is no rule over which score cutoff is optimal, however. Some alleles will tend to produce higher scores. Also, unless some limit is placed on the number of peptides, large proteins will produce a lot of peptides compared to smaller sequences.\n",
    "\n",
    "**global** - Allele specific ‘global’ cutoffs, this uses a percentile cutoff to select peptides using pre-calculated quantile scores for each allele. The global quantile scores were calculated for each prediction method using a set of sequences from known human antigens such as apical membrane antigen, Tetanus toxin, thrombopoietin, and interferon beta. Therefore, peptides can be selected as measured against a standard scale as opposed to their ‘within protein’ ranking. A typical value would be using the top 5% in each allele across all sequences. This technique is designed for selection of a small set of candidates from very large numbers of proteins, such as across a bacterial proteome. There is limited evidence to suggest that this selection method is superior to the other methods but we have used it for selectiing a small set of candidates from large numbers of proteins, detailed in example 2 below.\n",
    "\n",
    "## A basic MHC-I predictor\n",
    "\n",
    "This section details the built-in method for MHC-I binding prediction. It is implemented in Python using scikit-learn. The typical method of building such an algorithm is to encode the peptide amino acid sequences numerically in a manner that captures the properties important for binding. Then these features can be fit against their known binding affinities (or eluted ligand data) using a regression model of some kind. Several peptide encoding schemes were tested, including the NLF encoding scheme @ref21⁠, OETMAP @ref22⁠, a Blosum62 matrix, and a simple ‘one hot’ encoding method. One hot encoding was found to be adequate and the more complex schemes did not appear to offer any significant advantage. This may require further testing. For now, it is possible to create and train the predictor with any of these encoders. The regression model used is the _MLPRegressor_ from sklearn, an implementation of a multilayer perceptron (MLP), a class of artificial neural networks. The data set used for training was primarily from the IEDB and was curated by the authors of MHCflurry @ref17⁠ from various sources. The regression model must be trained for each allele. When this is done, the model is persisted with the joblib module and can be re-loaded for new predictions for that allele. All of this functionality is encapsulated in the _BasicMHCIPredictor_ class in epitopepredict. The predictor only supports 103 alleles currently and is not pan specific as of yet.\n",
    "\n",
    "To test performance, a separate evaluation set of peptides originally created by Kim et al. @ref23⁠ was downloaded from the IEDB. The training set sequences were subtracted from this set leaving 25,948 9-mer peptides. Only alleles for which there were more than 200 peptides were evaluated to give a reasonable performance estimate. This left 40 HLA alleles for testing. Both the Pearson correlation coefficient and the ROC AUC metric (with a threshold of below 500 nM set as a positive binder) were used as metrics. The results in Figure 1 show that our predictor performs similarly to the others with this test set. It is not meant to provide a definitive benchmark since these other tools have been more comprehensively benchmarked elsewhere. In particular, it can be hard to obtain a benchmark set of peptides that has not been used for training in one or more of the models.\n",
    "\n",
    "In practical use, this predictor can be run directly from the API or command line without installing any other program. Models are trained once as needed for each allele/length combination using the current installed versions of scikit-learn and joblib. Once trained, each model is saved and can be re-used. Training only takes a matter of seconds for each model.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Code based on the following notebook with the following changes:\n",
    "# - pre-calculated benchmark.csv file is used if possible\n",
    "# - commented out code removed\n",
    "# https://github.com/dmnfarrell/epitopepredict/blob/v0.5.0/notebooks/benchmarking.ipynb\n",
    "\n",
    "import os, sys, math\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "import pandas as pd\n",
    "pd.set_option('display.width', 130)\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import seaborn as sns\n",
    "sns.set_context(\"notebook\", font_scale=1.4)\n",
    "\n",
    "import epitopepredict as ep\n",
    "from epitopepredict import sequtils, base, peptutils, mhclearn\n",
    "\n",
    "# Change into notebooks folder if not already in it\n",
    "if not os.getcwd().endswith('notebooks'):\n",
    "  os.chdir('notebooks')\n",
    "\n",
    "# If benchmark results are already available, then read them\n",
    "# in for plotting, otherwise generate them\n",
    "if os.path.exists('benchmarks.csv'):\n",
    "\n",
    "  c = pd.read_csv('benchmarks.csv')\n",
    "\n",
    "else:\n",
    "\n",
    "  def evaluate_predictor(P, allele):\n",
    "      data = mhclearn.get_evaluation_set1(allele, length=9)\n",
    "      print (len(data))\n",
    "      if len(data) < 200:\n",
    "          return None,None,None\n",
    "      P.predict_peptides(list(data.peptide), alleles=allele, cpus=14)\n",
    "      x = P.get_scores(allele)\n",
    "      x = data.merge(x,on='peptide') \n",
    "      auc = round(ep.auc_score(x.ic50,x.score,cutoff=500),3)\n",
    "      import scipy\n",
    "      pr = scipy.stats.pearsonr(x.ic50, x.score)[0]\n",
    "      return auc, pr, data\n",
    "\n",
    "  def run_tests():\n",
    "      preds = [base.get_predictor('basicmhc1'),\n",
    "              base.get_predictor('netmhcpan',scoring='affinity'),\n",
    "              ep.get_predictor('mhcflurry')]\n",
    "      comp=[]\n",
    "      test_alleles = mhclearn.get_allele_names()#[:20]\n",
    "      print (len(test_alleles))\n",
    "      for P in preds:\n",
    "          m=[]\n",
    "          for a in test_alleles:\n",
    "              print (a)\n",
    "              if not a.startswith('HLA'): continue\n",
    "              try:\n",
    "                  auc,pr,df = evaluate_predictor(P, a)\n",
    "                  if auc==None:\n",
    "                      continue\n",
    "                  m.append((a,auc,pr,len(df)))            \n",
    "              except Exception as e:\n",
    "                  print (a,e)\n",
    "                  pass\n",
    "              print (P, auc, pr)\n",
    "          m=pd.DataFrame(m,columns=['allele','auc','pearson r','size'])\n",
    "          m['name'] = P.name\n",
    "          comp.append(m)\n",
    "      return comp\n",
    "\n",
    "  comp = run_tests()\n",
    "  c = pd.concat(comp)\n",
    "  c.to_csv('benchmarks.csv')\n",
    "\n",
    "a = pd.pivot_table(c,index=['allele','size'],columns='name',values='auc')\n",
    "r = pd.pivot_table(c,index=['allele','size'],columns='name',values='pearson r')\n",
    "\n",
    "def highlight_max(s):\n",
    "    is_max = s == s.max()\n",
    "    return ['background-color: yellow' if v else '' for v in is_max]\n",
    "\n",
    "fig = plt.figure(constrained_layout=True,figsize=(15,6))\n",
    "gs = fig.add_gridspec(1, 2, hspace=1)\n",
    "ax = fig.add_subplot(gs[0])\n",
    "sns.barplot(data=c,y='pearson r',x='name',ax=ax)\n",
    "ax.set_title('pearson r')\n",
    "\n",
    "ax = fig.add_subplot(gs[1])\n",
    "sns.boxplot(data=c,y='auc',x='name',ax=ax)\n",
    "t=ax.set_title('AUC')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 1. Performance of the basicmhc1 predictor compared to netMHCpan and MHCflurry for 40 human alleles. (a) Mean Pearson r and (b) mean AUC scores over all alleles. Only alleles with evaluation data for over more than 200 peptides were used. This test dataset used 9-mer peptides only.**\n",
    "\n",
    "# Results\n",
    "\n",
    "In the following, we use several examples to illustrate the use of this package in practice with real data. These examples are available as Jupyter notebooks stored at <https://github.com/dmnfarrell/epitopepredict/tree/master/examples>. They are also archived permanently on Zenodo and the latest version is available there @ref24. Some of these notebooks are also reproducible using the epitopepredict examples Code Ocean capsule (see Figure 2 @ref25).\n",
    "\n",
    "![](figure2.png)\n",
    "\n",
    "**Figure 2. An executable Code Ocean compute capsule for epitopepredict that can be launched on a cloud workstation.**\n",
    "\n",
    "## Example 1: Predictions for selected antigens in _Mycobacterium Tuberculosis_ – comparison with experimental data\n",
    "\n",
    "A typical use of epitope prediction tools is to select a candidate list of peptides for testing from a large sequence space representing multiple potential antigens. This example provides a comparison of the three different selection methods in epitopepredict using a realistic example. It uses a set of known CD4 epitopes discovered in a study by measuring IFN-γ T cell responses to _M. tuberculosis_ (Mtb) antigens in a healthy South African cohort @ref26⁠. The test data is available as supplementary tables in that paper. It comprises 75 15-mer epitopes selected from a set of known Mtb antigens.\n",
    "\n",
    "Here, we performed a simple benchmark to find the percentage coverage of predicted MHC-II binders in two predictors, netMHCIIpan and Tepitope, using the three threshold methods for selecting promiscuous binders described above. These were then compared across a selection of cut-offs that each yielded a certain number of binders. Ideally we would want to produce as small a number of predicted binders as possible to reduce the number to be experimentally tested.\n",
    "\n",
    "The sequences of all 29 proteins represented in the target set were retrieved and split into 15-mers. Then predictions were made for each of the 27 alleles in the target population tested in the study. This produced a list of 9,299 peptides predicted for each allele. With epitopepredict, selection of promiscuous binders can be done easily with a single command. Binders promiscuous above thresholds in at least five alleles were selected.\n",
    "\n",
    "The results are shown in Figure 3, with the plots showing the percentage of experimental peptides covered versus the number of predicted binders, corresponding to a certain cut-off in each method. It is seen that the ‘rank’ method is superior in both cases as it achieves a higher coverage with the lowest number of binders. All the curves level off at about 80% coverage. The ‘rank’ method may work better in this case partly because some of the epitopes were originally selected by prediction algorithms using a similar approach.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1008x360 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Note: this cell can take a long time to run!\n",
    "\n",
    "\n",
    "#load exp data\n",
    "sette = pd.read_csv('../examples/sette_SA_MTB_epitopes.csv')\n",
    "mtb = sequtils.genbank_to_dataframe(base.mtb_genome,cds=True)\n",
    "mtb = mtb[mtb.locus_tag.isin(sette.name)]\n",
    "\n",
    "df = pd.merge(sette, mtb[['locus_tag','translation']],left_on='name',right_on='locus_tag')\n",
    "df['start'] = df.apply( lambda x: x.translation.find(x.sequence), 1 )\n",
    "df['end'] = df.start+df.sequence.str.len()\n",
    "#for i,r in df[df.start==-1].iterrows():\n",
    "#    print (r.locus_tag, r.sequence, r.translation)\n",
    "df=df.drop('translation',1)\n",
    "df=df[df.start>=0]\n",
    "prots = df.name.unique()\n",
    "exp = df\n",
    "\n",
    "donoralleles = pd.read_csv('../examples/sa_mtb_donor_alleles.csv')\n",
    "donoralleles = donoralleles.set_index('Donor ID')\n",
    "donoralleles = donoralleles.apply(lambda x: 'HLA-'+x)\n",
    "x = donoralleles.apply(lambda x : x.value_counts())\n",
    "x = x.sum(1).sort_values(ascending=False)\n",
    "x = x[x>=2]\n",
    "drballeles = x[x.index.str.contains('DRB')]\n",
    "drballeles = list(drballeles.index)\n",
    "\n",
    "#run predictions\n",
    "Pt=ep.get_predictor('tepitope')\n",
    "Pt.predict_sequences(mtb, alleles=drballeles,path='/tmp/mtbsa_tepitope', length=15, overwrite=False, threads=4)\n",
    "Pt.load(path='/tmp/mtbsa_tepitope')\n",
    "Pn=ep.get_predictor('netmhciipan')\n",
    "Pn.predict_sequences(mtb, alleles=drballeles,path='/tmp/mtbsa_netmhciipan', length=15, overwrite=False, threads=4)\n",
    "Pn.load(path='/tmp/mtbsa_netmhciipan')\n",
    "\n",
    "def get_hits(P,n,m,cutoffs):\n",
    "    import difflib\n",
    "    res = []\n",
    "    for c in cutoffs:\n",
    "        rb = P.promiscuous_binders(cutoff_method=m,cutoff=c,n=n,limit=30)        \n",
    "        df=exp#[exp.name==name].copy()\n",
    "        def find_matches(x, p):\n",
    "            return len(difflib.get_close_matches(x.sequence, p, n=10, cutoff=.6))\n",
    "\n",
    "        df.loc[:,'hits'] = df.apply(lambda x: find_matches(x, rb.peptide),1)        \n",
    "        f = len(df[df.hits>0])/len(df)*100 \n",
    "        res.append({'cutoff':c,'binders':len(rb),m:f})\n",
    "    res = pd.DataFrame(res)\n",
    "    return res\n",
    "\n",
    "\n",
    "cuts = {'rank':range(2,40,3),'global':np.arange(.99,.86,-.01),'score':range(50,1000,100)}\n",
    "\n",
    "fig,axs=plt.subplots(1,2,figsize=(14,5),facecolor='white')\n",
    "axs=axs.flat\n",
    "i=0\n",
    "['rank','global','score']\n",
    "for P in [Pn,Pt]:    \n",
    "    res1 = get_hits(P,5,'rank',cuts['rank'])\n",
    "    if P.name=='tepitope':\n",
    "        scuts = np.arange(5,0,-.4)\n",
    "    else:\n",
    "        scuts=cuts['score']    \n",
    "    res2 = get_hits(P,5,'score',scuts)\n",
    "    res3 = get_hits(P,5,'global',cuts['global'])\n",
    "    \n",
    "    res1.plot(x='binders',y='rank',lw=2,ax=axs[i])\n",
    "    res2.plot(x='binders',y='score',lw=2,ax=axs[i])\n",
    "    res3.plot(x='binders',y='global',lw=2,ax=axs[i])    \n",
    "    axs[i].set_xlabel('no. predicted binders')\n",
    "    axs[i].set_ylabel('% coverage')    \n",
    "    i+=1\n",
    "\n",
    "axs[0].set_title('(a) netMHCIIpan',fontsize=20)\n",
    "axs[1].set_title('(b) Tepitope',fontsize=20)\n",
    "plt.tight_layout()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 3. Performance of three binder selection methods showing the percentage coverage of experimental positive peptides by predicted binders at different cutoff levels. The higher the cutoff the more binders are predicted until the curves level off. Results are shown for (a) netMHCIIpan and (b) Tepitope.**\n",
    "\n",
    "## Example 2: Scanning the proteome of _Mycobacterium bovis_ for CD4+ epitopes\n",
    "\n",
    "We have previously used this package to prioritize CD4+ epitopes in the proteome of M. bovis (_Mycobacterium tuberculosis_ variant bovis AF2122/97) for potential use in novel antigens for bovine tuberculosis @ref27⁠. The results are documented in the paper. Briefly, we performed binding predictions over the entire _M._ _bovis_ proteome using two different binding predictors, netMHCIIpan @ref20⁠, Tepitope @ref14⁠. For each set of results we found only promiscuous binders above an allele specific cutoff using the ‘global’ selection strategy. In addition, clusters of binders were detected to find areas of high binder density in each sequence. The assumption underlying this method is that ~20mer peptides covering these regions will be more likely to yield at least one true positive epitope and hence elicit a T cell response. The results are a set of clusters for both prediction methods, ranked by number of binders per unit length. This has also been referred to as the ‘epitope density’ method \\[28]⁠. We further contrasted this cluster selection with the more conventional ranking of top scoring binders. We also included random non-high-scoring peptides as a control. 20-mer peptides derived from these sets were synthesized and tested for IFN-γ responses in M. bovis naturally infected cattle. Approximately 24% out of 270 peptides had high responses (using known epitopes as the baseline response). The random controls had no responses above this threshold.\n",
    "\n",
    "This workflow was performed using an older version of this software. A newer and somewhat simplified form of the same analysis is now available as a notebook in the examples folder. Results from this output will be slightly different to our previous analysis since some of the extra steps have been removed, but the methodology is the same.\n",
    "\n",
    "## Example 3: Predicting cross-reactive T cell epitopes in Sars-CoV-2\n",
    "\n",
    "Eight months after the initial outbreak, puzzles remained about the human immune response to the SARS-CoV-2 virus. By then, a significant proportion in some large cities, such as New York, had been exposed. However antibody tests often revealed lower than expected rates of seropositivity in populations where the virus had spread @ref29⁠. It is almost certain that other components of the immune system were important in protecting individuals just as in other infectious diseases. Robust innate immune responses were one candidate. Another possibility is T cells. SARS-CoV-2 reactive CD4+ T cells had been reported in unexposed individuals, suggesting pre-existing cross-reactive T cell memory in 20-50% of people @ref30⁠. It is possible that these were memory T cells generated from previous exposures to the human common cold coronaviruses (HCoVs), which circulate widely.\n",
    "\n",
    "Mateus et al. @ref31⁠ identified such cross-reactive CD4+ epitopes by generating 42 short term T cell lines specific to previously identified epitopes in PBMCs from unexposed donors. Then homologs to these peptides in the HCoVs were tested against these cell lines for a response. These tests were done in both unexposed and convalescent COVID19 patients. Cross reactivity was found in 10/42 of the T cell lines. Responding cells in unexposed donors were predominantly found in the effector memory CD4+ T cell population, though the consequences of this for protective immunity are not yet known.\n",
    "\n",
    "Here we show how it’s possible to predict such potential cross-reactive CD4+ epitopes just using the sequences.\n",
    "\n",
    "The method used is as follows:\n",
    "\n",
    "-   Predict MHC-binders in each SARS-CoV-2 protein sequence and selected the top scoring candidates. Here, we use epitopepredict to predict the most promiscuous binders across the 8 most representative human MHC-II alleles. Each protein sequence is split into 15-mer peptides and scored.\n",
    "-   Select the top scoring peptides in each protein. In this case we select the peptides using the global cutoff method in the top 5% percentile for each allele. We also limit the total for each protein to 70 to prevent a very long protein like ORF1ab from dominating the selection.\n",
    "-   Calculate conservation of each peptide with it’s closest homologous sequence in each of the other four HCoVs. Then rank them by percentage identity.\n",
    "\n",
    "Using a limit of 70 peptides per protein, we found 282 predicted peptides. Out of these, 162 were conserved with >67% identity in at least one HCoV (most commonly with SARS-Cov-1). Note that for a peptide to be cross-reactive, it does not necessarily have to share all residues in common with its homolog. The 9-mer core binding sequence could be conserved with perhaps similar residues at the ends. We finally checked our 162 peptides against the 10 epitopes identified by Mateus et al. We found a hit in 6/10 cases, shown in Table 1. Some hits are two peptides overlapping in our set, which probably indicates the same core epitope.\n",
    "\n",
    "**Table 1. Matches to the 10 cross reactive peptides found by Mateus et al. from our predicted binders shows hits in 6/10 cases.**\n",
    "\n",
    "| Sequence        | Protein | Start | Hit from Predicted Set           |\n",
    "| --------------- | ------- | ----- | -------------------------------- |\n",
    "| PSGTWLTYTGAIKLD | N       | 326   | GTWLTYTGAIKLDDK                  |\n",
    "| SFIEDLLFNKVTLAD | S       | 816   | FIEDLLFNKVTLADA, DLLFNKVTLADAGFI |\n",
    "| YEQYIKWPWYIWLGF | S       | 1206  | None                             |\n",
    "| VLKKLKKSLNVAKSE | nsp8    | 3976  | VVLKKLKKSLNVAKS, EVVLKKLKKSLNVAK |\n",
    "| KLLKSIAATRGATVV | nsp12   | 4966  | RQFHQKLLKSIAATR                  |\n",
    "| EFYAYLRKHFSMMIL | nsp12   | 5136  | NEFYAYLRKHFSMMI, YLRKHFSMMILSDDA |\n",
    "| LMIERFVSLAIDAYP | nsp12   | 5246  | None                             |\n",
    "| TSHKLVLSVNPYVCN | nsp13   | 5361  | None                             |\n",
    "| NVNRFNVAITRAKVG | nsp13   | 5881  | VNRFNVAITRAKVGI                  |\n",
    "\n",
    "# Usage\n",
    "\n",
    "## Command Line Interface\n",
    "\n",
    "Installing the package provides a command line tool that is run from a terminal. It is envisaged that most users will utilize the package using this tool since it requires no programming knowledge. It provides pre-defined functionality with all inputs and settings specified in a text configuration file. One advantage of using configuration files is in avoiding long commands with multiple arguments that may be prone to causing errors. Also, configuration files can be kept to recall what setting was used for a particular workflow. Using this strategy, you can make MHC predictions with your chosen alleles and predictors in one run. If settings are left out generally defaults will be used so one can use a minimal file, simplifying usage. Other useful features of the tool are the ability to run predictions in parallel using multiple processing cores, the use of preset lists of alleles and resuming runs that have been interrupted without overwriting previous predictions. Results are saved to disk as text files and can be reread in a subsequent run of the tool without having to recalculate binding predictions.\n",
    "\n",
    "By default, the command line tool will calculate the promiscuous binders to give you a unique list of peptides and include the number of alleles in which it is a binder. The table is ranked by this value and the maximum score over the alleles tested.\n",
    "\n",
    "## API usage\n",
    "\n",
    "A very basic example of how to use the library from the Python API is given here. More complex usage is detailed in the documentation.\n",
    "\n",
    "    import epitopepredict as ep\n",
    "    P = ep.get_predictor('basicmhc1')\n",
    "    from epitopepredict import peptutils\n",
    "    #get some random peptides, returns a list\n",
    "    seqs = peptutils.create_random_sequences(10)\n",
    "    #run predictions\n",
    "    res = P.predict_peptides(seqs, alleles='HLA-A*01:01')\n",
    "\n",
    "**The above code returns a pandas DataFrame sorted by allele and rank.**\n",
    "\n",
    "## Plotting\n",
    "\n",
    "The API includes the ability to plot results for individual protein sequences for one or more predictor. In such plots, binders are shown as colored blocks at their position in the protein with multiple tracks, one per allele/method. This allows ready comparisons between methods. An example is shown in Figure 4. This shows binders for three MHC-class I predictors for an antigenic Mtb protein, Rv3875. Six HLA alleles are shown. We can see that each method has some overlap with the others.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predictions done for 2 sequences in 6 alleles\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/damien/gitprojects/epitopepredict/epitopepredict/base.py:702: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  binders['core'] = binders.peptide\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predictions done for 2 sequences in 6 alleles\n",
      "predictions done for 2 sequences in 6 alleles\n"
     ]
    },
    {
     "data": {
      "image/png": "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v164BEsLK43aG+h2we3su20clXbcysluVfucvGyUPrjXojb3y0px5+5tXLv5R6vO/aQoe/AAphamGDpycIvbSq26oVu3bo8gKiIiopZjokREsLSwavEiBHVy7mS1eJPVJ9WW6E0at3V1dYWdWS+N72N7sSV6E6RW3bBgwQKN2nPXeyIielJwjhIREREREVE9TJSIiIiIiIjqYaJERERERERUj1YTpaCgIMycObNB+aZNm4RNn+RyOSwsLJrta8+ePdDR0YFMJmtRDP3794e+vj7y8vJUHk9MTERERESD8vT0dHh7e8PAwAA2NjZYtWqV6PhHH32EwYMHw9DQEJaWlpg9ezZycnKajefo0aPo378/9PT00K9fPxw5ckR0fPny5XB3d4eBgQE3jCUiIiIiekTazYiSXC5HWFgYduzYgYqKCrXaJCcno7i4GBMnToRCoWjQX3b2nytglZWVYc2aNaipqUFFRQXGjRsHfX19nDt3Dp999hmWLl2K7du3C/W///57hIWF4fz58zh48CAuX76MKVOmNBnP77//jkmTJmHSpElITU2Fn58ffH198dtvvwl1Kioq4OfnhzfffFOtayQiIiIiopZrF4lSTk4OEhMTsXjxYlhZWam9p4tcLsfMmTMREBAAuVwuOmZnZ4epU6di3759SEtLg5eXF/T19QHUjvpcu3YNUVFRGDBgAKZPnw6ZTIbIyEih/TfffINXX30Vffv2xdChQ/H555/j7NmzUCqVjcazefNmuLi4YPny5ejbty+WLFkCNzc3fPHFF0KdpUuX4t1334Wzs7P6N4iIiIiIiFqkXSRKMTEx8Pb2hpGRkcqkR5Xy8nLExsbC398f48aNw/Xr15GamiocHz16NI4dO4aEhATEx8dj48aNmDdvHiQSCZKSkjB48GBIpVKhvre3N9LS0nDvnuo9VIqKitCxY0fRHiGenp4ICgoSvk9KSsKYMWNE7by9vZGUlKTejainsLAQGRkZoq+srCyN+iIiIiIiepZofR+lvXv3wtDQUFRWWVmp1rykOlFRUQgPDwcA+Pv7Izw8HHl5eTA1NW20zaFDh2Bubo6BAwcCAKZOnQq5XC6MCp08eRIffvghvLy8kJ2djfnz52PWrFl48803oVQqYW5uLurPzMwMNTU1UCqVcHBwEB0rKyvDokWLMGvWLGFUCqgdtbK0tBS+b6zf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nTJy5Ehcu3ZNUnb//n2Ul5dj1KhRAMD7U19k6PXJ6eWrqqoShg8fLnh7ewupqanCwYMHhSFDhgghISGGDo26uRUrVggAhM2bNwvff/+95Ofx48eCIAjCd999J/Tv31946623hIsXLwoxMTFCv379hD179hg4euoJLl68qPEepcOHDwtGRkbCmjVrhIsXLwpKpVIwMjKSvMuEqKmpSfD09BScnZ2FQ4cOCadOnRJ8fHwECwsL4e7du4Ig8P5Eutu5c6cAQIiKihLOnz8v/OUvfxHc3d0FOzs7oby8XNyO96e+hYlSH3H79m3Bz89PMDc3FwYPHiysWrVKePLkiaHDom5u5MiRAgCtPxcvXhS3S05OFiZNmiSYmpoKo0aNErZv3264oKlH0ZYoCYIgqFQqYcyYMYKpqakwbtw4ISkpyUARUndWVlYmvP7664K1tbUgk8kEHx8fjb7E+xPporm5WYiLixMmTZokWFhYCPb29kJQUJBw8+ZNjW15f+o7jATh/71Fi4iIiIiIiABwjhIREREREZEGJkpERERERERtMFEiIiIiIiJqg4kSERERERFRG0yUiIiIiIiI2mCiRERERERE1AYTJSIiIiIiojaYKBEREREREbXBRImIiIiIiKiN/x9OvWDCJbFq/gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from epitopepredict import plotting\n",
    "m1_alleles = ep.get_preset_alleles('mhc1_supertypes')\n",
    "prots = ep.genbank_to_dataframe(base.mtb_genome, cds=True)\n",
    "proteins = ['Rv3615c','Rv3875']\n",
    "\n",
    "P1 = base.get_predictor('basicmhc1')\n",
    "binders = P1.predict_sequences(prots, names=proteins, alleles=m1_alleles, length=9, threads=4)\n",
    "pb1 = P1.promiscuous_binders(n=2, cutoff=5, cutoff_method='rank')\n",
    "P2 = base.get_predictor('netmhcpan')\n",
    "P2.predict_sequences(prots, names=proteins, alleles=m1_alleles, length=9, threads=4)\n",
    "P3 = base.get_predictor('mhcflurry')\n",
    "P3.predict_sequences(prots, names=proteins, alleles=m1_alleles, length=9)\n",
    "\n",
    "#plot a single protein as tracks\n",
    "ax = plotting.plot_tracks([P1,P2,P3],name='Rv3875',cutoff=5,cutoff_method='rank',n=2,legend=True,figsize=(12,6))\n",
    "plt.tight_layout()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 4: Predicted promiscuous binders in a sample sequence for three methods. Each method will have some overlapping peptides but they are usually likely to differ.**\n",
    "\n",
    "## Testing\n",
    "\n",
    "The command line tool can be tested by calling **epitopepredict -t,** which runs a set of sample Ebola virus sequences with the available prediction methods. Outputs are saved to a folder called zaire_test. It should be noted that this is not used as a benchmark test since the algorithms used have all been tested independently. This is an example run for the user to check that the command line workflow is working and to inspect the outputs.\n",
    "\n",
    "## Web Application\n",
    "\n",
    "A web interface that is launched from the command line can be used to view results from a set of predictions that have been previously made. This is an improved and much easier to use form of a previous web interface called epitopemap @ref32⁠ and replaces it. Widgets can be used to select thresholds and the kind of plot shown. Currently two kinds of plots can be viewed, a sequence view and one that shows the peptides as colored blocks in tracks along the sequence, as shown in Figure 5. This web interface can be tested by running the test command above and then launching the web app using the zaire_test folder as input.\n",
    "\n",
    "![](figure5.png)\n",
    "\n",
    "**Figure 5. Web application showing results for a single protein sequence. Widgets can be used to select protein, cut-off levels and the type of plot.**\n",
    "\n",
    "# Conclusions\n",
    "\n",
    "This software provides a programmatic framework and command line interface for running multiple MHC binding prediction algorithms. This will be especially useful for performing high throughput calculations in many sequences and alleles. It is designed to scale for proteome scanning by allowing multiple processing threads to be used with any of the prediction methods. The API can also be easily applied to single sequences or small numbers of antigens. A web interface allows users to readily review results if they wish.\n",
    "\n",
    "# Availability and requirements\n",
    "\n",
    "Project name: epitopepredict\n",
    "\n",
    "Project home page: [https://github.com/dmnfarrell/epitopepredict](https://github.com/dmnfarrell/mhcpredict)\n",
    "\n",
    "Archived version: v0.5.0 (DOI: 10.5281/zenodo.4056421)\n",
    "\n",
    "SciCrunch Identifier: SCR_019221\n",
    "\n",
    "Operating system(s): Linux, Unix\n",
    "\n",
    "Programming language: Python\n",
    "\n",
    "Other requirements: biopython, pandas, numpy, matplotlib, scikit-learn\n",
    "\n",
    "Optional requirements: bokeh, panel (web app only)\\[33]\n",
    "\n",
    "License: GNU General Public License v 3.0\n",
    "\n",
    "Any restrictions to use by non-academics: None\n",
    "\n",
    "# Funding\n",
    "\n",
    "This work was supported by the Irish Department of Agriculture Food and the Marine grant 15/S/651 (NEXUSMAP). DF was previously funded under an Irish Research Council Postdoctoral Fellowship (GOIPD/2015/475) for part of this work. The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript.\n",
    "\n",
    "# Acknowledgments\n",
    "\n",
    "Thanks to Dr. Joseph Crispell for useful discussions on machine learning. Thanks also to Prof. Stephen Gordon for support during the development of this software.\n",
    "\n",
    "# Data Availability\n",
    "\n",
    "All computational work described here was implemented using Python. The code is provided as a Python package called epitopepredict under the Apache license. Extensive use was made of the IPython (Jupyter) notebook environment @ref34⁠ in prototyping the codebase.\n",
    "\n",
    "Documentation for users is available at [http://epitopepredict.readthedocs.io](http://epitopepredict.readthedocs.io/). Snapshots of the code are available in the _GigaScience_ GigaDB respository @ref35, and a CodeOcean capsule is also available @ref25.\n",
    "\n",
    "## Installation\n",
    "\n",
    "This software should be run on a Linux operating system. Ubuntu is recommended but most major distributions will work well. Windows is not supported. If using Windows or macOS (OS X), users can simply install Linux using virtual machine software such as Oracle VM VirtualBox ([**https://www.virtualbox.org**](https://www.virtualbox.org/)). Software is then installed using the online documentation. The installation process is very simple, requiring only a single typed command. Externally used MHC binding prediction algorithms do need to be installed separately, these are all freely available.\n",
    "\n",
    "## Installing netMHCpan and netMHCIIpan\n",
    "\n",
    "Due to license restrictions, these specific programs must be installed separately. They are free for academic users but require registration for the non-webserver version. You can go to [https://services.healthtech.dtu.dk](https://services.healthtech.dtu.dk/) to fill in the forms that will give you access to the install file for the respective programs. The install instructions can then be found in the readme files when you untar the downloaded file, e.g. netMHCpan-4.1.readme. There are four steps detailed and the process is relatively simple. Remember to test that the software is working before you use it in epitopepredict.\n",
    "\n",
    "# Abbreviations\n",
    "\n",
    "ANN: artificial neural networks; hCoV: human common cold coronaviruses; MHC: major histocompatibility complex; ML: machine learning; MLP: multilayer perceptron; PSSM: position specific scoring matrix; TCR: T cell receptor\n",
    "\n",
    "##"
   ]
  }
 ],
 "metadata": {
  "authors": [
   {
    "affiliations": [
     {
      "name": "UCD School of Veterinary Medicine, University College Dublin, Ireland.",
      "type": "Organization"
     }
    ],
    "emails": [
     "farrell.damien@gmail.com"
    ],
    "familyNames": [
     "Farrell"
    ],
    "givenNames": [
     "Damien"
    ],
    "name": "Damien Farrell",
    "type": "Person"
   }
  ],
  "description": [
   {
    "content": [
     "A key step in the cellular adaptive immune response is the presentation of antigens to T cells. Computational prediction of T cell epitopes has many applications in vaccine design and immuno-diagnostics. This is the basis of immunoinformatics, which allows ",
     {
      "content": [
       "in silico"
      ],
      "type": "Emphasis"
     },
     " screening of peptides before experiments are performed. With the availability of whole genomes for many microbial species it is now feasible to computationally screen whole proteomes for candidate peptides. epitopepredict is a programmatic framework and command line tool designed to aid this process. It provides access to multiple binding prediction algorithms under a single interface and scales for whole genomes using multiple target MHC alleles. A web interface is provided to assist visualization and filtering of the results. The software is freely available under an open-source license from ",
     {
      "content": [
       "https://github.com/dmnfarrell/epitopepredict"
      ],
      "target": "https://github.com/dmnfarrell/mhcpredict",
      "type": "Link"
     }
    ],
    "meta": {
     "style": "Standard"
    },
    "type": "Paragraph"
   }
  ],
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "keywords": [
   "Software and Workflows",
   "Biomedical Science",
   "Bioinformatics"
  ],
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "references": [
   {
    "authors": [
     {
      "familyNames": [
       "Lundegaard"
      ],
      "givenNames": [
       "Claus"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Hoof"
      ],
      "givenNames": [
       "Ilka"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Lund"
      ],
      "givenNames": [
       "Ole"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Nielsen"
      ],
      "givenNames": [
       "Morten"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2010"
    },
    "id": "ref1",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1186/1745-7580-6-s2-s3"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Immunome Research",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 6
     },
     "issueNumber": "Suppl 2",
     "type": "PublicationIssue"
    },
    "pagination": "S3",
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "State of the art and challenges in sequence based T-cell epitope prediction",
    "type": "Article",
    "url": "http://dx.doi.org/10.1186/1745-7580-6-s2-s3"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Backert"
      ],
      "givenNames": [
       "Linus"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Kohlbacher"
      ],
      "givenNames": [
       "Oliver"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2015-11-20"
    },
    "id": "ref2",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1186/s13073-015-0245-0"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Genome Medicine",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 7
     },
     "issueNumber": 1,
     "type": "PublicationIssue"
    },
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "Immunoinformatics and epitope prediction in the age of genomic medicine",
    "type": "Article",
    "url": "http://dx.doi.org/10.1186/s13073-015-0245-0"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Domingos"
      ],
      "givenNames": [
       "Pedro"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2012-10-01"
    },
    "id": "ref3",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1145/2347736.2347755"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Communications of the ACM",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 55
     },
     "issueNumber": 10,
     "type": "PublicationIssue"
    },
    "pageEnd": 87,
    "pageStart": 78,
    "publisher": {
     "name": "Association for Computing Machinery (ACM)",
     "type": "Organization"
    },
    "title": "A few useful things to know about machine learning",
    "type": "Article",
    "url": "http://dx.doi.org/10.1145/2347736.2347755"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Chaves"
      ],
      "givenNames": [
       "Francisco A."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Lee"
      ],
      "givenNames": [
       "Alvin H."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Nayak"
      ],
      "givenNames": [
       "Jennifer L."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Richards"
      ],
      "givenNames": [
       "Katherine A."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sant"
      ],
      "givenNames": [
       "Andrea J."
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2012-03-30"
    },
    "id": "ref4",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.4049/jimmunol.1103640"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "The Journal of Immunology",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 188
     },
     "issueNumber": 9,
     "type": "PublicationIssue"
    },
    "pageEnd": 4248,
    "pageStart": 4235,
    "publisher": {
     "name": "The American Association of Immunologists",
     "type": "Organization"
    },
    "title": "The Utility and Limitations of Current Web-Available Algorithms To Predict Peptides Recognized by CD4 T Cells in Response to Pathogen Infection",
    "type": "Article",
    "url": "http://dx.doi.org/10.4049/jimmunol.1103640"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Bremel"
      ],
      "givenNames": [
       "Robert D"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Homan"
      ],
      "givenNames": [
       "E"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2010"
    },
    "id": "ref5",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1186/1745-7580-6-8"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Immunome Research",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 6
     },
     "issueNumber": 1,
     "type": "PublicationIssue"
    },
    "pagination": "8",
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "An integrated approach to epitope analysis II: A system for proteomic-scale prediction of immunological characteristics",
    "type": "Article",
    "url": "http://dx.doi.org/10.1186/1745-7580-6-8"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Paul"
      ],
      "givenNames": [
       "Sinu"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Weiskopf"
      ],
      "givenNames": [
       "Daniela"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Angelo"
      ],
      "givenNames": [
       "Michael A."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sidney"
      ],
      "givenNames": [
       "John"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Peters"
      ],
      "givenNames": [
       "Bjoern"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sette"
      ],
      "givenNames": [
       "Alessandro"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2013-11-04"
    },
    "id": "ref6",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.4049/jimmunol.1302101"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "The Journal of Immunology",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 191
     },
     "issueNumber": 12,
     "type": "PublicationIssue"
    },
    "pageEnd": 5839,
    "pageStart": 5831,
    "publisher": {
     "name": "The American Association of Immunologists",
     "type": "Organization"
    },
    "title": "HLA Class I Alleles Are Associated with Peptide-Binding Repertoires of Different Size, Affinity, and Immunogenicity",
    "type": "Article",
    "url": "http://dx.doi.org/10.4049/jimmunol.1302101"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Schubert"
      ],
      "givenNames": [
       "B."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Lund"
      ],
      "givenNames": [
       "O."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Nielsen"
      ],
      "givenNames": [
       "M."
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2013-09-17"
    },
    "id": "ref7",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1111/tan.12199"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Tissue Antigens",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 82
     },
     "issueNumber": 4,
     "type": "PublicationIssue"
    },
    "pageEnd": 251,
    "pageStart": 243,
    "publisher": {
     "name": "Wiley",
     "type": "Organization"
    },
    "title": "Evaluation of peptide selection approaches for epitope-based vaccine design",
    "type": "Article",
    "url": "http://dx.doi.org/10.1111/tan.12199"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Soria-Guerra"
      ],
      "givenNames": [
       "Ruth E."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Nieto-Gomez"
      ],
      "givenNames": [
       "Ricardo"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Govea-Alonso"
      ],
      "givenNames": [
       "Dania O."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Rosales-Mendoza"
      ],
      "givenNames": [
       "Sergio"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2015-02-01"
    },
    "id": "ref8",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1016/j.jbi.2014.11.003"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "name": "Journal of Biomedical Informatics",
      "type": "Periodical"
     },
     "type": "PublicationVolume",
     "volumeNumber": 53
    },
    "pageEnd": 414,
    "pageStart": 405,
    "publisher": {
     "name": "Elsevier BV",
     "type": "Organization"
    },
    "title": "An overview of bioinformatics tools for epitope prediction: Implications on vaccine development",
    "type": "Article",
    "url": "http://dx.doi.org/10.1016/j.jbi.2014.11.003"
   },
   {
    "authors": [
     {
      "familyNames": [
       "De Groot"
      ],
      "givenNames": [
       "Anne S."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Martin"
      ],
      "givenNames": [
       "William"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2009-05-01"
    },
    "id": "ref9",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1016/j.clim.2009.01.009"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Clinical Immunology",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 131
     },
     "issueNumber": 2,
     "type": "PublicationIssue"
    },
    "pageEnd": 201,
    "pageStart": 189,
    "publisher": {
     "name": "Elsevier BV",
     "type": "Organization"
    },
    "title": "Reducing risk, improving outcomes: Bioengineering less immunogenic protein therapeutics",
    "type": "Article",
    "url": "http://dx.doi.org/10.1016/j.clim.2009.01.009"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Farrell"
      ],
      "givenNames": [
       "Damien"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2021-02-07"
    },
    "id": "ref10",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1101/2021.02.05.429892"
     }
    ],
    "publisher": {
     "name": "Cold Spring Harbor Laboratory",
     "type": "Organization"
    },
    "title": "epitopepredict: A tool for integrated MHC binding prediction",
    "type": "CreativeWork",
    "url": "http://dx.doi.org/10.1101/2021.02.05.429892"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Nelli"
      ],
      "givenNames": [
       "Fabio"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2015"
    },
    "id": "ref11",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1007/978-1-4842-0958-5_4"
     }
    ],
    "isPartOf": {
     "name": "Python Data Analytics",
     "type": "Periodical"
    },
    "publisher": {
     "name": "Apress",
     "type": "Organization"
    },
    "title": "The pandas Library—An Introduction",
    "type": "CreativeWork",
    "url": "http://dx.doi.org/10.1007/978-1-4842-0958-5_4"
   },
   "Tornado Developers (2020). Tornado: Python web framework and asynchronous networking library (Version 6.1). https://www.tornadoweb.org/en/stable/",
   {
    "authors": [],
    "datePublished": {
     "type": "Date",
     "value": "2010"
    },
    "id": "ref13",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.5040/9781350088733.0029"
     }
    ],
    "isPartOf": {
     "name": "The Visual Dictionary of Photography",
     "type": "Periodical"
    },
    "publisher": {
     "name": "AVA Publishing SA Distributed by Thames & Hudson (ex-North America) Distributed in the USA & Canada by: English Language Support Office",
     "type": "Organization"
    },
    "title": "Bokeh",
    "type": "CreativeWork",
    "url": "http://dx.doi.org/10.5040/9781350088733.0029"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Zhang"
      ],
      "givenNames": [
       "Lianming"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Chen"
      ],
      "givenNames": [
       "Yiqing"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Wong"
      ],
      "givenNames": [
       "Hau-San"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Zhou"
      ],
      "givenNames": [
       "Shuigeng"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Mamitsuka"
      ],
      "givenNames": [
       "Hiroshi"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Zhu"
      ],
      "givenNames": [
       "Shanfeng"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2012-02-23"
    },
    "id": "ref14",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1371/journal.pone.0030483"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "PLoS ONE",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 7
     },
     "issueNumber": 2,
     "type": "PublicationIssue"
    },
    "pagination": "e30483",
    "publisher": {
     "name": "Public Library of Science (PLoS)",
     "type": "Organization"
    },
    "title": "TEPITOPEpan: Extending TEPITOPE for Peptide Binding Prediction Covering over 700 HLA-DR Molecules",
    "type": "Article",
    "url": "http://dx.doi.org/10.1371/journal.pone.0030483"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Sturniolo"
      ],
      "givenNames": [
       "Tiziana"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Bono"
      ],
      "givenNames": [
       "Elisa"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Ding"
      ],
      "givenNames": [
       "Jiayi"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Raddrizzani"
      ],
      "givenNames": [
       "Laura"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Tuereci"
      ],
      "givenNames": [
       "Oezlem"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sahin"
      ],
      "givenNames": [
       "Ugur"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Braxenthaler"
      ],
      "givenNames": [
       "Michael"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Gallazzi"
      ],
      "givenNames": [
       "Fabio"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Protti"
      ],
      "givenNames": [
       "Maria Pia"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sinigaglia"
      ],
      "givenNames": [
       "Francesco"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Hammer"
      ],
      "givenNames": [
       "Juergen"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "1999-06-01"
    },
    "id": "ref15",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1038/9858"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Nature Biotechnology",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 17
     },
     "issueNumber": 6,
     "type": "PublicationIssue"
    },
    "pageEnd": 561,
    "pageStart": 555,
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "Generation of tissue-specific and promiscuous HLA ligand databases using DNA microarrays and virtual HLA class II matrices",
    "type": "Article",
    "url": "http://dx.doi.org/10.1038/9858"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Abraham"
      ],
      "givenNames": [
       "Alexandre"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Pedregosa"
      ],
      "givenNames": [
       "Fabian"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Eickenberg"
      ],
      "givenNames": [
       "Michael"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Gervais"
      ],
      "givenNames": [
       "Philippe"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Mueller"
      ],
      "givenNames": [
       "Andreas"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Kossaifi"
      ],
      "givenNames": [
       "Jean"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Gramfort"
      ],
      "givenNames": [
       "Alexandre"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Thirion"
      ],
      "givenNames": [
       "Bertrand"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Varoquaux"
      ],
      "givenNames": [
       "Gaël"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2014"
    },
    "id": "ref16",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.3389/fninf.2014.00014"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "name": "Frontiers in Neuroinformatics",
      "type": "Periodical"
     },
     "type": "PublicationVolume",
     "volumeNumber": 8
    },
    "publisher": {
     "name": "Frontiers Media SA",
     "type": "Organization"
    },
    "title": "Machine learning for neuroimaging with scikit-learn",
    "type": "Article",
    "url": "http://dx.doi.org/10.3389/fninf.2014.00014"
   },
   {
    "authors": [
     {
      "familyNames": [
       "O'Donnell"
      ],
      "givenNames": [
       "Timothy J."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Rubinsteyn"
      ],
      "givenNames": [
       "Alex"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Bonsack"
      ],
      "givenNames": [
       "Maria"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Riemer"
      ],
      "givenNames": [
       "Angelika B."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Laserson"
      ],
      "givenNames": [
       "Uri"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Hammerbacher"
      ],
      "givenNames": [
       "Jeff"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2018-07-01"
    },
    "id": "ref17",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1016/j.cels.2018.05.014"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Cell Systems",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 7
     },
     "issueNumber": 1,
     "type": "PublicationIssue"
    },
    "pageEnd": 132,
    "pageStart": 129,
    "publisher": {
     "name": "Elsevier BV",
     "type": "Organization"
    },
    "title": "MHCflurry: Open-Source Class I MHC Binding Affinity Prediction",
    "type": "Article",
    "url": "http://dx.doi.org/10.1016/j.cels.2018.05.014"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Jurtz"
      ],
      "givenNames": [
       "Vanessa"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Paul"
      ],
      "givenNames": [
       "Sinu"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Andreatta"
      ],
      "givenNames": [
       "Massimo"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Marcatili"
      ],
      "givenNames": [
       "Paolo"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Peters"
      ],
      "givenNames": [
       "Bjoern"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Nielsen"
      ],
      "givenNames": [
       "Morten"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2017-10-04"
    },
    "id": "ref18",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.4049/jimmunol.1700893"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "The Journal of Immunology",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 199
     },
     "issueNumber": 9,
     "type": "PublicationIssue"
    },
    "pageEnd": 3368,
    "pageStart": 3360,
    "publisher": {
     "name": "The American Association of Immunologists",
     "type": "Organization"
    },
    "title": "NetMHCpan-4.0: Improved Peptide–MHC Class I Interaction Predictions Integrating Eluted Ligand and Peptide Binding Affinity Data",
    "type": "Article",
    "url": "http://dx.doi.org/10.4049/jimmunol.1700893"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Nielsen"
      ],
      "givenNames": [
       "Morten"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Justesen"
      ],
      "givenNames": [
       "Sune"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Lund"
      ],
      "givenNames": [
       "Ole"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Lundegaard"
      ],
      "givenNames": [
       "Claus"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Buus"
      ],
      "givenNames": [
       "Søren"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2010"
    },
    "id": "ref19",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1186/1745-7580-6-9"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Immunome Research",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 6
     },
     "issueNumber": 1,
     "type": "PublicationIssue"
    },
    "pagination": "9",
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "NetMHCIIpan-2.0 - Improved pan-specific HLA-DR predictions using a novel concurrent alignment and weight optimization training procedure",
    "type": "Article",
    "url": "http://dx.doi.org/10.1186/1745-7580-6-9"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Karosiene"
      ],
      "givenNames": [
       "Edita"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Rasmussen"
      ],
      "givenNames": [
       "Michael"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Blicher"
      ],
      "givenNames": [
       "Thomas"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Lund"
      ],
      "givenNames": [
       "Ole"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Buus"
      ],
      "givenNames": [
       "Søren"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Nielsen"
      ],
      "givenNames": [
       "Morten"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2013-07-31"
    },
    "id": "ref20",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1007/s00251-013-0720-y"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Immunogenetics",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 65
     },
     "issueNumber": 10,
     "type": "PublicationIssue"
    },
    "pageEnd": 724,
    "pageStart": 711,
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "NetMHCIIpan-3.0, a common pan-specific MHC class II prediction method including all three human MHC class II isotypes, HLA-DR, HLA-DP and HLA-DQ",
    "type": "Article",
    "url": "http://dx.doi.org/10.1007/s00251-013-0720-y"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Nanni"
      ],
      "givenNames": [
       "Loris"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Lumini"
      ],
      "givenNames": [
       "Alessandra"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2011-04-01"
    },
    "id": "ref21",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1016/j.eswa.2010.09.005"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Expert Systems with Applications",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 38
     },
     "issueNumber": 4,
     "type": "PublicationIssue"
    },
    "pageEnd": 3191,
    "pageStart": 3185,
    "publisher": {
     "name": "Elsevier BV",
     "type": "Organization"
    },
    "title": "A new encoding technique for peptide classification",
    "type": "Article",
    "url": "http://dx.doi.org/10.1016/j.eswa.2010.09.005"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Gök"
      ],
      "givenNames": [
       "Murat"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Özcerit"
      ],
      "givenNames": [
       "Ahmet Turan"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2011-07-30"
    },
    "id": "ref22",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1007/s11010-011-1000-5"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Molecular and Cellular Biochemistry",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 359
     },
     "issueNumber": "1-2",
     "type": "PublicationIssue"
    },
    "pageEnd": 72,
    "pageStart": 67,
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "OETMAP: a new feature encoding scheme for MHC class I binding prediction",
    "type": "Article",
    "url": "http://dx.doi.org/10.1007/s11010-011-1000-5"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Kim"
      ],
      "givenNames": [
       "Yohan"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sidney"
      ],
      "givenNames": [
       "John"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Buus"
      ],
      "givenNames": [
       "Søren"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sette"
      ],
      "givenNames": [
       "Alessandro"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Nielsen"
      ],
      "givenNames": [
       "Morten"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Peters"
      ],
      "givenNames": [
       "Bjoern"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2014"
    },
    "id": "ref23",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1186/1471-2105-15-241"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "BMC Bioinformatics",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 15
     },
     "issueNumber": 1,
     "type": "PublicationIssue"
    },
    "pagination": "241",
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "Dataset size and composition impact the reliability of performance benchmarks for peptide-MHC binding predictions",
    "type": "Article",
    "url": "http://dx.doi.org/10.1186/1471-2105-15-241"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Pisoni"
      ],
      "givenNames": [
       "Enrico"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2020-10-01"
    },
    "id": "ref24",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.5194/gmd-2020-90-ac5"
     }
    ],
    "publisher": {
     "name": "Copernicus GmbH",
     "type": "Organization"
    },
    "title": "code on Zenodo",
    "type": "CreativeWork",
    "url": "http://dx.doi.org/10.5194/gmd-2020-90-ac5"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Farrell"
      ],
      "givenNames": [
       "Damien"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2021-02-07"
    },
    "id": "ref25",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1101/2021.02.05.429892"
     }
    ],
    "publisher": {
     "name": "Cold Spring Harbor Laboratory",
     "type": "Organization"
    },
    "title": "epitopepredict: A tool for integrated MHC binding prediction",
    "type": "CreativeWork",
    "url": "http://dx.doi.org/10.1101/2021.02.05.429892"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Lindestam Arlehamn"
      ],
      "givenNames": [
       "Cecilia S."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "McKinney"
      ],
      "givenNames": [
       "Denise M."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Carpenter"
      ],
      "givenNames": [
       "Chelsea"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Paul"
      ],
      "givenNames": [
       "Sinu"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Rozot"
      ],
      "givenNames": [
       "Virginie"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Makgotlho"
      ],
      "givenNames": [
       "Edward"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Gregg"
      ],
      "givenNames": [
       "Yolande"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "van Rooyen"
      ],
      "givenNames": [
       "Michele"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Ernst"
      ],
      "givenNames": [
       "Joel D."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Hatherill"
      ],
      "givenNames": [
       "Mark"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Hanekom"
      ],
      "givenNames": [
       "Willem A."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Peters"
      ],
      "givenNames": [
       "Bjoern"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Scriba"
      ],
      "givenNames": [
       "Thomas J."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sette"
      ],
      "givenNames": [
       "Alessandro"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2016-07-13"
    },
    "id": "ref26",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1371/journal.ppat.1005760"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "PLOS Pathogens",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 12
     },
     "issueNumber": 7,
     "type": "PublicationIssue"
    },
    "pagination": "e1005760",
    "publisher": {
     "name": "Public Library of Science (PLoS)",
     "type": "Organization"
    },
    "title": "A Quantitative Analysis of Complexity of Human Pathogen-Specific CD4 T Cell Responses in Healthy M. tuberculosis Infected South Africans",
    "type": "Article",
    "url": "http://dx.doi.org/10.1371/journal.ppat.1005760"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Farrell"
      ],
      "givenNames": [
       "Damien"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Jones"
      ],
      "givenNames": [
       "Gareth"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Pirson"
      ],
      "givenNames": [
       "Christopher"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Malone"
      ],
      "givenNames": [
       "Kerri"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Rue-Albrecht"
      ],
      "givenNames": [
       "Kevin"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Chubb"
      ],
      "givenNames": [
       "Anthony J."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Vordermeier"
      ],
      "givenNames": [
       "Martin"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Gordon"
      ],
      "givenNames": [
       "Stephen V."
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2016-08-25"
    },
    "id": "ref27",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1099/mgen.0.000071"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Microbial Genomics",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 2
     },
     "issueNumber": 8,
     "type": "PublicationIssue"
    },
    "publisher": {
     "name": "Microbiology Society",
     "type": "Organization"
    },
    "title": "Integrated computational prediction and experimental validation identifies promiscuous T cell epitopes in the proteome of Mycobacterium bovis",
    "type": "Article",
    "url": "http://dx.doi.org/10.1099/mgen.0.000071"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Santos"
      ],
      "givenNames": [
       "Anderson R"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Pereira"
      ],
      "givenNames": [
       "Vanessa Bastos"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Barbosa"
      ],
      "givenNames": [
       "Eudes"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Baumbach"
      ],
      "givenNames": [
       "Jan"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Pauling"
      ],
      "givenNames": [
       "Josch"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Röttger"
      ],
      "givenNames": [
       "Richard"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Turk"
      ],
      "givenNames": [
       "Meritxell Zurita"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Silva"
      ],
      "givenNames": [
       "Artur"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Miyoshi"
      ],
      "givenNames": [
       "Anderson"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Azevedo"
      ],
      "givenNames": [
       "Vasco"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2013"
    },
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1186/1471-2164-14-s6-s4"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "BMC Genomics",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 14
     },
     "issueNumber": "Suppl 6",
     "type": "PublicationIssue"
    },
    "pagination": "S4",
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "Mature Epitope Density - A strategy for target selection based on immunoinformatics and exported prokaryotic proteins",
    "type": "Article",
    "url": "http://dx.doi.org/10.1186/1471-2164-14-s6-s4"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Doshi"
      ],
      "givenNames": [
       "Peter"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2020-09-17"
    },
    "id": "ref29",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1136/bmj.m3563"
     }
    ],
    "isPartOf": {
     "name": "BMJ",
     "type": "Periodical"
    },
    "pagination": "m3563",
    "publisher": {
     "name": "BMJ",
     "type": "Organization"
    },
    "title": "Covid-19: Do many people have pre-existing immunity?",
    "type": "Article",
    "url": "http://dx.doi.org/10.1136/bmj.m3563"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Grifoni"
      ],
      "givenNames": [
       "Alba"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Weiskopf"
      ],
      "givenNames": [
       "Daniela"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Ramirez"
      ],
      "givenNames": [
       "Sydney I."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Mateus"
      ],
      "givenNames": [
       "Jose"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Dan"
      ],
      "givenNames": [
       "Jennifer M."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Moderbacher"
      ],
      "givenNames": [
       "Carolyn Rydyznski"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Rawlings"
      ],
      "givenNames": [
       "Stephen A."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sutherland"
      ],
      "givenNames": [
       "Aaron"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Premkumar"
      ],
      "givenNames": [
       "Lakshmanane"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Jadi"
      ],
      "givenNames": [
       "Ramesh S."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Marrama"
      ],
      "givenNames": [
       "Daniel"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "de Silva"
      ],
      "givenNames": [
       "Aravinda M."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Frazier"
      ],
      "givenNames": [
       "April"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Carlin"
      ],
      "givenNames": [
       "Aaron F."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Greenbaum"
      ],
      "givenNames": [
       "Jason A."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Peters"
      ],
      "givenNames": [
       "Bjoern"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Krammer"
      ],
      "givenNames": [
       "Florian"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Smith"
      ],
      "givenNames": [
       "Davey M."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Crotty"
      ],
      "givenNames": [
       "Shane"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sette"
      ],
      "givenNames": [
       "Alessandro"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2020-06-01"
    },
    "id": "ref30",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1016/j.cell.2020.05.015"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Cell",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 181
     },
     "issueNumber": 7,
     "type": "PublicationIssue"
    },
    "pageEnd": 1501,
    "pageStart": 1489,
    "publisher": {
     "name": "Elsevier BV",
     "type": "Organization"
    },
    "title": "Targets of T Cell Responses to SARS-CoV-2 Coronavirus in Humans with COVID-19 Disease and Unexposed Individuals",
    "type": "Article",
    "url": "http://dx.doi.org/10.1016/j.cell.2020.05.015"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Mateus"
      ],
      "givenNames": [
       "Jose"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Grifoni"
      ],
      "givenNames": [
       "Alba"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Tarke"
      ],
      "givenNames": [
       "Alison"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sidney"
      ],
      "givenNames": [
       "John"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Ramirez"
      ],
      "givenNames": [
       "Sydney I."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Dan"
      ],
      "givenNames": [
       "Jennifer M."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Burger"
      ],
      "givenNames": [
       "Zoe C."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Rawlings"
      ],
      "givenNames": [
       "Stephen A."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Smith"
      ],
      "givenNames": [
       "Davey M."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Phillips"
      ],
      "givenNames": [
       "Elizabeth"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Mallal"
      ],
      "givenNames": [
       "Simon"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Lammers"
      ],
      "givenNames": [
       "Marshall"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Rubiro"
      ],
      "givenNames": [
       "Paul"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Quiambao"
      ],
      "givenNames": [
       "Lorenzo"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sutherland"
      ],
      "givenNames": [
       "Aaron"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Yu"
      ],
      "givenNames": [
       "Esther Dawen"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "da Silva Antunes"
      ],
      "givenNames": [
       "Ricardo"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Greenbaum"
      ],
      "givenNames": [
       "Jason"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Frazier"
      ],
      "givenNames": [
       "April"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Markmann"
      ],
      "givenNames": [
       "Alena J."
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Premkumar"
      ],
      "givenNames": [
       "Lakshmanane"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "de Silva"
      ],
      "givenNames": [
       "Aravinda"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Peters"
      ],
      "givenNames": [
       "Bjoern"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Crotty"
      ],
      "givenNames": [
       "Shane"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Sette"
      ],
      "givenNames": [
       "Alessandro"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Weiskopf"
      ],
      "givenNames": [
       "Daniela"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2020-08-04"
    },
    "id": "ref31",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1126/science.abd3871"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "Science",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 370
     },
     "issueNumber": 6512,
     "type": "PublicationIssue"
    },
    "pageEnd": 94,
    "pageStart": 89,
    "publisher": {
     "name": "American Association for the Advancement of Science (AAAS)",
     "type": "Organization"
    },
    "title": "Selective and cross-reactive SARS-CoV-2 T cell epitopes in unexposed humans",
    "type": "Article",
    "url": "http://dx.doi.org/10.1126/science.abd3871"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Bednar"
      ],
      "givenNames": [
       "James"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2020"
    },
    "id": "ref32",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.25080/majora-342d178e-028"
     }
    ],
    "isPartOf": {
     "name": "Proceedings of the Python in Science Conference",
     "type": "Periodical"
    },
    "publisher": {
     "name": "SciPy",
     "type": "Organization"
    },
    "title": "HoloViz: What's new and what's next",
    "type": "CreativeWork",
    "url": "http://dx.doi.org/10.25080/majora-342d178e-028"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Farrell"
      ],
      "givenNames": [
       "Damien"
      ],
      "type": "Person"
     },
     {
      "familyNames": [
       "Gordon"
      ],
      "givenNames": [
       "Stephen V"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2015-07-14"
    },
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1186/s12859-015-0659-0"
     }
    ],
    "isPartOf": {
     "isPartOf": {
      "isPartOf": {
       "name": "BMC Bioinformatics",
       "type": "Periodical"
      },
      "type": "PublicationVolume",
      "volumeNumber": 16
     },
     "issueNumber": 1,
     "type": "PublicationIssue"
    },
    "publisher": {
     "name": "Springer Science and Business Media LLC",
     "type": "Organization"
    },
    "title": "Epitopemap: a web application for integrated whole proteome epitope prediction",
    "type": "Article",
    "url": "http://dx.doi.org/10.1186/s12859-015-0659-0"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Silaparasetty"
      ],
      "givenNames": [
       "Nikita"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2020"
    },
    "id": "ref34",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1007/978-1-4842-5967-2_7"
     }
    ],
    "isPartOf": {
     "name": "Machine Learning Concepts with Python and the Jupyter Notebook Environment",
     "type": "Periodical"
    },
    "publisher": {
     "name": "Apress",
     "type": "Organization"
    },
    "title": "Python Programming in Jupyter Notebook",
    "type": "CreativeWork",
    "url": "http://dx.doi.org/10.1007/978-1-4842-5967-2_7"
   },
   {
    "authors": [
     {
      "familyNames": [
       "Farrell"
      ],
      "givenNames": [
       "Damien"
      ],
      "type": "Person"
     }
    ],
    "datePublished": {
     "type": "Date",
     "value": "2021-02-07"
    },
    "id": "ref35",
    "identifiers": [
     {
      "name": "doi",
      "propertyID": "https://registry.identifiers.org/registry/doi",
      "type": "PropertyValue",
      "value": "10.1101/2021.02.05.429892"
     }
    ],
    "publisher": {
     "name": "Cold Spring Harbor Laboratory",
     "type": "Organization"
    },
    "title": "epitopepredict: A tool for integrated MHC binding prediction",
    "type": "CreativeWork",
    "url": "http://dx.doi.org/10.1101/2021.02.05.429892"
   }
  ],
  "title": "epitopepredict: a tool for integrated MHC binding prediction"
 },
 "nbformat": 4,
 "nbformat_minor": 4
}