1 Annotation version: 20190813

1.1 Genome annotation with OrgDb/TxDb/OrganismDbi

The tritrypdb just released a new version. Let us make new annotation data from it.

## These functions take _forever_ the first time around.
devtools::load_all("~/scratch/git/EuPathDB")

esmer_entry <- get_eupath_entry("Esmeraldo-like", webservice="tritrypdb")

installedp <- get_eupath_pkgnames(esmer_entry)$orgdb_installed
if (!isTRUE(installedp)) {
    esmer_annot <- EuPathDB::make_eupath_orgdb(esmer_entry, reinstall=TRUE,
                                               overwrite=TRUE)
}

nonesmer_entry <- get_eupath_entry("Non-Esmeraldo-like", webservice="tritrypdb")
installedp <- get_eupath_pkgnames(nonesmer_entry)$orgdb_installed
if (!isTRUE(installedp)) {
    nonesmer_annot <- EuPathDB::make_eupath_orgdb(nonesmer_entry, reinstall=TRUE,
                                                  overwrite=TRUE)
}
unas_entry <- get_eupath_entry("strain CL Brener", webservice="tritrypdb")
installedp <- get_eupath_pkgnames(unas_entry)$orgdb_installed
if (!isTRUE(installedp)) {
    unas_annot <- EuPathDB::make_eupath_orgdb(unas_entry, reinstall=TRUE,
                                              overwrite=TRUE)
    ## unas_annot <- EuPathDB::make_eupath_orgdb(unas_entry, reinstall=TRUE)
}


maj_entry <- get_eupath_entry("Friedlin", webservice="tritrypdb")
maj_annot <- EuPathDB::make_eupath_orgdb(maj_entry, reinstall=TRUE,
                                         overwrite=TRUE)
maj_names <- get_eupath_pkgnames(maj_entry)
library(maj_names$orgdb, character=TRUE)
maj_db <- get0(maj_names$orgdb)
maj_db
tail(keys(maj_db))
pan_entry <- get_eupath_entry("anamensis", webservice="tritrypdb")
pan_annot <- EuPathDB::make_eupath_orgdb(pan_entry, reinstall=TRUE,
                                         overwrite=TRUE)

In order to load these new packages, I rather need to remember their names… Happily I have a function for that.

##library(EuPathDB)
devtools::load_all("~/scratch/git/EuPathDB")
## Loading EuPathDB
## Loading required package: GenomeInfoDbData
## Adding files missing in collate: load_ah_annotations.R
## 
## This is EuPathDB version 1.6.0
##  Read 'EuPathDB()' to get started.
esmer_entry <- EuPathDB::get_eupath_entry(species="Esmeraldo-like", webservice="tritrypdb")
## Found the following hits: Trypanosoma cruzi CL Brener Esmeraldo-like, Trypanosoma cruzi CL Brener Non-Esmeraldo-like, choosing the first.
## Using: Trypanosoma cruzi CL Brener Esmeraldo-like.
nonesmer_entry <- EuPathDB::get_eupath_entry(species="Brener Non", webservice="tritrypdb")
## Found: Trypanosoma cruzi CL Brener Non-Esmeraldo-like
unas_entry <- EuPathDB::get_eupath_entry(species="CL Brener$", webservice="tritrypdb")
## Found: Trypanosoma cruzi strain CL Brener
esmer_names <- get_eupath_pkgnames(esmer_entry)
esmer_names$orgdb
## org.Tcruzi.CL.Brener.Esmeraldo.like.v45.eg.db
nonesmer_names <- get_eupath_pkgnames(nonesmer_entry)
nonesmer_names$orgdb
## org.Tcruzi.CL.Brener.Non.Esmeraldo.like.v45.eg.db
unas_names <- get_eupath_pkgnames(unas_entry)
unas_names$orgdb
## org.Tcruzi.CL.Brener.v45.eg.db

For those packages I have generated/installed, use this to generate an annotation table. Oh, but I prefixed the column names with ‘annot_’ in order to make sure that nothing is duplicated with the GO tables, ortholog tables, etc.

## Just to save on typing
library(esmer_names$orgdb, character=TRUE)
## Loading required package: AnnotationDbi
## Loading required package: stats4
## Loading required package: IRanges
## Loading required package: S4Vectors
## 
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:EuPathDB':
## 
##     first, rename
## The following object is masked from 'package:base':
## 
##     expand.grid
## 
## Attaching package: 'IRanges'
## The following objects are masked from 'package:EuPathDB':
## 
##     collapse, desc, slice
## 
## Attaching package: 'AnnotationDbi'
## The following object is masked from 'package:EuPathDB':
## 
##     select
## 
library(nonesmer_names$orgdb, character=TRUE)
## 
library(unas_names$orgdb, character=TRUE)
## 
esmer_db <- get0(esmer_names$orgdb)
esmer_db
## OrgDb object:
## | DBSCHEMAVERSION: 2.1
## | DBSCHEMA: NOSCHEMA_DB
## | ORGANISM: Trypanosoma cruzi
## | SPECIES: Trypanosoma cruzi
## | CENTRALID: GID
## | Taxonomy ID: 5693
## | Db type: OrgDb
## | Supporting package: AnnotationDbi
## 
## Please see: help('select') for usage information
nonesmer_db <- get0(nonesmer_names$orgdb)
nonesmer_db
## OrgDb object:
## | DBSCHEMAVERSION: 2.1
## | DBSCHEMA: NOSCHEMA_DB
## | ORGANISM: Trypanosoma cruzi
## | SPECIES: Trypanosoma cruzi
## | CENTRALID: GID
## | Taxonomy ID: 5693
## | Db type: OrgDb
## | Supporting package: AnnotationDbi
## 
## Please see: help('select') for usage information
unas_db <- get0(unas_names$orgdb)
unas_db
## OrgDb object:
## | DBSCHEMAVERSION: 2.1
## | DBSCHEMA: NOSCHEMA_DB
## | ORGANISM: Trypanosoma cruzi strain CL Brener
## | SPECIES: Trypanosoma cruzi strain CL Brener
## | CENTRALID: GID
## | Taxonomy ID: 353153
## | Db type: OrgDb
## | Supporting package: AnnotationDbi
## 
## Please see: help('select') for usage information

Lets see what columns are available in the annotation packages.

all_fields <- columns(esmer_db)
all_fields
##   [1] "ANNOT_BFD3_CDS"                             
##   [2] "ANNOT_BFD3_MODEL"                           
##   [3] "ANNOT_BFD6_CDS"                             
##   [4] "ANNOT_BFD6_MODEL"                           
##   [5] "ANNOT_CDS"                                  
##   [6] "ANNOT_CDS_LENGTH"                           
##   [7] "ANNOT_CHROMOSOME"                           
##   [8] "ANNOT_DIF_CDS"                              
##   [9] "ANNOT_DIF_MODEL"                            
##  [10] "ANNOT_EC_NUMBERS"                           
##  [11] "ANNOT_EC_NUMBERS_DERIVED"                   
##  [12] "ANNOT_EXON_COUNT"                           
##  [13] "ANNOT_FC_BFD3_CDS"                          
##  [14] "ANNOT_FC_BFD3_MODEL"                        
##  [15] "ANNOT_FC_BFD6_CDS"                          
##  [16] "ANNOT_FC_BFD6_MODEL"                        
##  [17] "ANNOT_FC_DIF_CDS"                           
##  [18] "ANNOT_FC_DIF_MODEL"                         
##  [19] "ANNOT_FC_PF_CDS"                            
##  [20] "ANNOT_FC_PF_MODEL"                          
##  [21] "ANNOT_FIVE_PRIME_UTR_LENGTH"                
##  [22] "ANNOT_GENE_ENTREZ_ID"                       
##  [23] "ANNOT_GENE_EXON_COUNT"                      
##  [24] "ANNOT_GENE_HTS_NONCODING_SNPS"              
##  [25] "ANNOT_GENE_HTS_NONSYN_SYN_RATIO"            
##  [26] "ANNOT_GENE_HTS_NONSYNONYMOUS_SNPS"          
##  [27] "ANNOT_GENE_HTS_STOP_CODON_SNPS"             
##  [28] "ANNOT_GENE_HTS_SYNONYMOUS_SNPS"             
##  [29] "ANNOT_GENE_LOCATION_TEXT"                   
##  [30] "ANNOT_GENE_NAME"                            
##  [31] "ANNOT_GENE_ORTHOLOG_NUMBER"                 
##  [32] "ANNOT_GENE_ORTHOMCL_NAME"                   
##  [33] "ANNOT_GENE_PARALOG_NUMBER"                  
##  [34] "ANNOT_GENE_PREVIOUS_IDS"                    
##  [35] "ANNOT_GENE_PRODUCT"                         
##  [36] "ANNOT_GENE_SOURCE_ID"                       
##  [37] "ANNOT_GENE_TOTAL_HTS_SNPS"                  
##  [38] "ANNOT_GENE_TRANSCRIPT_COUNT"                
##  [39] "ANNOT_GENE_TYPE"                            
##  [40] "ANNOT_GO_COMPONENT"                         
##  [41] "ANNOT_GO_FUNCTION"                          
##  [42] "ANNOT_GO_ID_COMPONENT"                      
##  [43] "ANNOT_GO_ID_FUNCTION"                       
##  [44] "ANNOT_GO_ID_PROCESS"                        
##  [45] "ANNOT_GO_PROCESS"                           
##  [46] "ANNOT_HAS_MISSING_TRANSCRIPTS"              
##  [47] "ANNOT_INTERPRO_DESCRIPTION"                 
##  [48] "ANNOT_INTERPRO_ID"                          
##  [49] "ANNOT_IS_PSEUDO"                            
##  [50] "ANNOT_ISOELECTRIC_POINT"                    
##  [51] "ANNOT_LOCATION_TEXT"                        
##  [52] "ANNOT_MATCHED_RESULT"                       
##  [53] "ANNOT_MOLECULAR_WEIGHT"                     
##  [54] "ANNOT_NO_TET_CDS"                           
##  [55] "ANNOT_NO_TET_MODEL"                         
##  [56] "ANNOT_ORGANISM"                             
##  [57] "ANNOT_PF_CDS"                               
##  [58] "ANNOT_PF_MODEL"                             
##  [59] "ANNOT_PFAM_DESCRIPTION"                     
##  [60] "ANNOT_PFAM_ID"                              
##  [61] "ANNOT_PIRSF_DESCRIPTION"                    
##  [62] "ANNOT_PIRSF_ID"                             
##  [63] "ANNOT_PREDICTED_GO_COMPONENT"               
##  [64] "ANNOT_PREDICTED_GO_FUNCTION"                
##  [65] "ANNOT_PREDICTED_GO_ID_COMPONENT"            
##  [66] "ANNOT_PREDICTED_GO_ID_FUNCTION"             
##  [67] "ANNOT_PREDICTED_GO_ID_PROCESS"              
##  [68] "ANNOT_PREDICTED_GO_PROCESS"                 
##  [69] "ANNOT_PROJECT_ID"                           
##  [70] "ANNOT_PROSITEPROFILES_DESCRIPTION"          
##  [71] "ANNOT_PROSITEPROFILES_ID"                   
##  [72] "ANNOT_PROTEIN_LENGTH"                       
##  [73] "ANNOT_PROTEIN_SEQUENCE"                     
##  [74] "ANNOT_SEQUENCE_ID"                          
##  [75] "ANNOT_SIGNALP_PEPTIDE"                      
##  [76] "ANNOT_SIGNALP_SCORES"                       
##  [77] "ANNOT_SMART_DESCRIPTION"                    
##  [78] "ANNOT_SMART_ID"                             
##  [79] "ANNOT_SOURCE_ID"                            
##  [80] "ANNOT_STRAND"                               
##  [81] "ANNOT_SUPERFAMILY_DESCRIPTION"              
##  [82] "ANNOT_SUPERFAMILY_ID"                       
##  [83] "ANNOT_THREE_PRIME_UTR_LENGTH"               
##  [84] "ANNOT_TIGRFAM_DESCRIPTION"                  
##  [85] "ANNOT_TIGRFAM_ID"                           
##  [86] "ANNOT_TM_COUNT"                             
##  [87] "ANNOT_TRANS_FOUND_PER_GENE_INTERNAL"        
##  [88] "ANNOT_TRANSCRIPT_INDEX_PER_GENE"            
##  [89] "ANNOT_TRANSCRIPT_LENGTH"                    
##  [90] "ANNOT_TRANSCRIPT_LINK"                      
##  [91] "ANNOT_TRANSCRIPT_PRODUCT"                   
##  [92] "ANNOT_TRANSCRIPT_SEQUENCE"                  
##  [93] "ANNOT_TRANSCRIPTS_FOUND_PER_GENE"           
##  [94] "ANNOT_UNIPROT_ID"                           
##  [95] "ANNOT_URI"                                  
##  [96] "ANNOT_WDK_WEIGHT"                           
##  [97] "CHR_ID"                                     
##  [98] "EVIDENCE"                                   
##  [99] "GENE_TYPE"                                  
## [100] "GID"                                        
## [101] "GO"                                         
## [102] "GO_EVIDENCE_CODE"                           
## [103] "GO_ID"                                      
## [104] "GO_IS_NOT"                                  
## [105] "GO_ONTOLOGY"                                
## [106] "GO_REFERENCE"                               
## [107] "GO_SORT_KEY"                                
## [108] "GO_SOURCE"                                  
## [109] "GO_SUPPORT_FOR_EVIDENCE_CODE_ASSIGNMENT"    
## [110] "GO_TERM_NAME"                               
## [111] "GO_TRANSCRIPT_ID_S"                         
## [112] "GOSLIM_EVIDENCE_CODE"                       
## [113] "GOSLIM_GO_ID"                               
## [114] "GOSLIM_GO_TERM_NAME"                        
## [115] "GOSLIM_IS_NOT"                              
## [116] "GOSLIM_ONTOLOGY"                            
## [117] "GOSLIM_REFERENCE"                           
## [118] "GOSLIM_SORT_KEY"                            
## [119] "GOSLIM_SOURCE"                              
## [120] "GOSLIM_SUPPORT_FOR_EVIDENCE_CODE_ASSIGNMENT"
## [121] "GOSLIM_TRANSCRIPT_ID_S"                     
## [122] "INTERPRO_DESCRIPTION"                       
## [123] "INTERPRO_E_VALUE"                           
## [124] "INTERPRO_END_MIN"                           
## [125] "INTERPRO_ID"                                
## [126] "INTERPRO_NAME"                              
## [127] "INTERPRO_PRIMARY_ID"                        
## [128] "INTERPRO_SECONDARY_ID"                      
## [129] "INTERPRO_START_MIN"                         
## [130] "INTERPRO_TRANSCRIPT_ID_S"                   
## [131] "KEGGREST_KEGG_GENEID"                       
## [132] "KEGGREST_NCBI_GENEID"                       
## [133] "KEGGREST_NCBI_PROTEINID"                    
## [134] "KEGGREST_PATHWAYS"                          
## [135] "KEGGREST_UNIPROTID"                         
## [136] "LINKOUT_DATABASE"                           
## [137] "LINKOUT_EXT_ID"                             
## [138] "LINKOUT_LINK_URL"                           
## [139] "LINKOUT_SOURCE_ID"                          
## [140] "ORTHOLOGS_GID"                              
## [141] "ORTHOLOGS_ORGANISM"                         
## [142] "ORTHOLOGS_PRODUCT"                          
## [143] "ORTHOLOGS_SYNTENIC"                         
## [144] "PATHWAY_EC_NUMBER_MATCHED_IN_PATHWAY"       
## [145] "PATHWAY_EXACT_EC_NUMBER_MATCH"              
## [146] "PATHWAY_EXPASY_URL"                         
## [147] "PATHWAY_ID"                                 
## [148] "PATHWAY_REACTIONS_MATCHING_EC_NUMBER"       
## [149] "PATHWAY_SOURCE"                             
## [150] "PATHWAY_SOURCE_ID"                          
## [151] "PUBMED_AUTHORS"                             
## [152] "PUBMED_DOI"                                 
## [153] "PUBMED_ID"                                  
## [154] "PUBMED_TITLE"
tt <- load_orgdb_annotations(
    esmer_db,
    keytype="gid",
    fields="all")
## Selecting the following fields, this might be too many: 
## ANNOT_BFD3_CDS, ANNOT_BFD3_MODEL, ANNOT_BFD6_CDS, ANNOT_BFD6_MODEL, ANNOT_CDS, ANNOT_CDS_LENGTH, ANNOT_CHROMOSOME, ANNOT_DIF_CDS, ANNOT_DIF_MODEL, ANNOT_EC_NUMBERS, ANNOT_EC_NUMBERS_DERIVED, ANNOT_EXON_COUNT, ANNOT_FC_BFD3_CDS, ANNOT_FC_BFD3_MODEL, ANNOT_FC_BFD6_CDS, ANNOT_FC_BFD6_MODEL, ANNOT_FC_DIF_CDS, ANNOT_FC_DIF_MODEL, ANNOT_FC_PF_CDS, ANNOT_FC_PF_MODEL, ANNOT_FIVE_PRIME_UTR_LENGTH, ANNOT_GENE_ENTREZ_ID, ANNOT_GENE_EXON_COUNT, ANNOT_GENE_HTS_NONCODING_SNPS, ANNOT_GENE_HTS_NONSYN_SYN_RATIO, ANNOT_GENE_HTS_NONSYNONYMOUS_SNPS, ANNOT_GENE_HTS_STOP_CODON_SNPS, ANNOT_GENE_HTS_SYNONYMOUS_SNPS, ANNOT_GENE_LOCATION_TEXT, ANNOT_GENE_NAME, ANNOT_GENE_ORTHOLOG_NUMBER, ANNOT_GENE_ORTHOMCL_NAME, ANNOT_GENE_PARALOG_NUMBER, ANNOT_GENE_PREVIOUS_IDS, ANNOT_GENE_PRODUCT, ANNOT_GENE_SOURCE_ID, ANNOT_GENE_TOTAL_HTS_SNPS, ANNOT_GENE_TRANSCRIPT_COUNT, ANNOT_GENE_TYPE, ANNOT_GO_COMPONENT, ANNOT_GO_FUNCTION, ANNOT_GO_ID_COMPONENT, ANNOT_GO_ID_FUNCTION, ANNOT_GO_ID_PROCESS, ANNOT_GO_PROCESS, ANNOT_HAS_MISSING_TRANSCRIPTS, ANNOT_INTERPRO_DESCRIPTION, ANNOT_INTERPRO_ID, ANNOT_IS_PSEUDO, ANNOT_ISOELECTRIC_POINT, ANNOT_LOCATION_TEXT, ANNOT_MATCHED_RESULT, ANNOT_MOLECULAR_WEIGHT, ANNOT_NO_TET_CDS, ANNOT_NO_TET_MODEL, ANNOT_ORGANISM, ANNOT_PF_CDS, ANNOT_PF_MODEL, ANNOT_PFAM_DESCRIPTION, ANNOT_PFAM_ID, ANNOT_PIRSF_DESCRIPTION, ANNOT_PIRSF_ID, ANNOT_PREDICTED_GO_COMPONENT, ANNOT_PREDICTED_GO_FUNCTION, ANNOT_PREDICTED_GO_ID_COMPONENT, ANNOT_PREDICTED_GO_ID_FUNCTION, ANNOT_PREDICTED_GO_ID_PROCESS, ANNOT_PREDICTED_GO_PROCESS, ANNOT_PROJECT_ID, ANNOT_PROSITEPROFILES_DESCRIPTION, ANNOT_PROSITEPROFILES_ID, ANNOT_PROTEIN_LENGTH, ANNOT_PROTEIN_SEQUENCE, ANNOT_SEQUENCE_ID, ANNOT_SIGNALP_PEPTIDE, ANNOT_SIGNALP_SCORES, ANNOT_SMART_DESCRIPTION, ANNOT_SMART_ID, ANNOT_SOURCE_ID, ANNOT_STRAND, ANNOT_SUPERFAMILY_DESCRIPTION, ANNOT_SUPERFAMILY_ID, ANNOT_THREE_PRIME_UTR_LENGTH, ANNOT_TIGRFAM_DESCRIPTION, ANNOT_TIGRFAM_ID, ANNOT_TM_COUNT, ANNOT_TRANS_FOUND_PER_GENE_INTERNAL, ANNOT_TRANSCRIPT_INDEX_PER_GENE, ANNOT_TRANSCRIPT_LENGTH, ANNOT_TRANSCRIPT_LINK, ANNOT_TRANSCRIPT_PRODUCT, ANNOT_TRANSCRIPT_SEQUENCE, ANNOT_TRANSCRIPTS_FOUND_PER_GENE, ANNOT_UNIPROT_ID, ANNOT_URI, ANNOT_WDK_WEIGHT
## Extracted all gene ids.
## Attempting to select: ANNOT_BFD3_CDS, ANNOT_BFD3_MODEL, ANNOT_BFD6_CDS, ANNOT_BFD6_MODEL, ANNOT_CDS, ANNOT_CDS_LENGTH, ANNOT_CHROMOSOME, ANNOT_DIF_CDS, ANNOT_DIF_MODEL, ANNOT_EC_NUMBERS, ANNOT_EC_NUMBERS_DERIVED, ANNOT_EXON_COUNT, ANNOT_FC_BFD3_CDS, ANNOT_FC_BFD3_MODEL, ANNOT_FC_BFD6_CDS, ANNOT_FC_BFD6_MODEL, ANNOT_FC_DIF_CDS, ANNOT_FC_DIF_MODEL, ANNOT_FC_PF_CDS, ANNOT_FC_PF_MODEL, ANNOT_FIVE_PRIME_UTR_LENGTH, ANNOT_GENE_ENTREZ_ID, ANNOT_GENE_EXON_COUNT, ANNOT_GENE_HTS_NONCODING_SNPS, ANNOT_GENE_HTS_NONSYN_SYN_RATIO, ANNOT_GENE_HTS_NONSYNONYMOUS_SNPS, ANNOT_GENE_HTS_STOP_CODON_SNPS, ANNOT_GENE_HTS_SYNONYMOUS_SNPS, ANNOT_GENE_LOCATION_TEXT, ANNOT_GENE_NAME, ANNOT_GENE_ORTHOLOG_NUMBER, ANNOT_GENE_ORTHOMCL_NAME, ANNOT_GENE_PARALOG_NUMBER, ANNOT_GENE_PREVIOUS_IDS, ANNOT_GENE_PRODUCT, ANNOT_GENE_SOURCE_ID, ANNOT_GENE_TOTAL_HTS_SNPS, ANNOT_GENE_TRANSCRIPT_COUNT, ANNOT_GENE_TYPE, ANNOT_GO_COMPONENT, ANNOT_GO_FUNCTION, ANNOT_GO_ID_COMPONENT, ANNOT_GO_ID_FUNCTION, ANNOT_GO_ID_PROCESS, ANNOT_GO_PROCESS, ANNOT_HAS_MISSING_TRANSCRIPTS, ANNOT_INTERPRO_DESCRIPTION, ANNOT_INTERPRO_ID, ANNOT_IS_PSEUDO, ANNOT_ISOELECTRIC_POINT, ANNOT_LOCATION_TEXT, ANNOT_MATCHED_RESULT, ANNOT_MOLECULAR_WEIGHT, ANNOT_NO_TET_CDS, ANNOT_NO_TET_MODEL, ANNOT_ORGANISM, ANNOT_PF_CDS, ANNOT_PF_MODEL, ANNOT_PFAM_DESCRIPTION, ANNOT_PFAM_ID, ANNOT_PIRSF_DESCRIPTION, ANNOT_PIRSF_ID, ANNOT_PREDICTED_GO_COMPONENT, ANNOT_PREDICTED_GO_FUNCTION, ANNOT_PREDICTED_GO_ID_COMPONENT, ANNOT_PREDICTED_GO_ID_FUNCTION, ANNOT_PREDICTED_GO_ID_PROCESS, ANNOT_PREDICTED_GO_PROCESS, ANNOT_PROJECT_ID, ANNOT_PROSITEPROFILES_DESCRIPTION, ANNOT_PROSITEPROFILES_ID, ANNOT_PROTEIN_LENGTH, ANNOT_PROTEIN_SEQUENCE, ANNOT_SEQUENCE_ID, ANNOT_SIGNALP_PEPTIDE, ANNOT_SIGNALP_SCORES, ANNOT_SMART_DESCRIPTION, ANNOT_SMART_ID, ANNOT_SOURCE_ID, ANNOT_STRAND, ANNOT_SUPERFAMILY_DESCRIPTION, ANNOT_SUPERFAMILY_ID, ANNOT_THREE_PRIME_UTR_LENGTH, ANNOT_TIGRFAM_DESCRIPTION, ANNOT_TIGRFAM_ID, ANNOT_TM_COUNT, ANNOT_TRANS_FOUND_PER_GENE_INTERNAL, ANNOT_TRANSCRIPT_INDEX_PER_GENE, ANNOT_TRANSCRIPT_LENGTH, ANNOT_TRANSCRIPT_LINK, ANNOT_TRANSCRIPT_PRODUCT, ANNOT_TRANSCRIPT_SEQUENCE, ANNOT_TRANSCRIPTS_FOUND_PER_GENE, ANNOT_UNIPROT_ID, ANNOT_URI, ANNOT_WDK_WEIGHT
## 'select()' returned 1:1 mapping between keys and columns
wanted_fields <- c("annot_gene_location_text",
                   "annot_cds_length",
                   "annot_gene_name",
                   "annot_gene_product",
                   "annot_gene_type",
                   "annot_strand",
                   "annot_gene_entrez_id",
                   "annot_gene_orthomcl_name")
esmer_annot <- load_orgdb_annotations(
  esmer_db,
  keytype="gid",
  fields=wanted_fields)
## Extracted all gene ids.
## Attempting to select: ANNOT_GENE_PRODUCT, ANNOT_GENE_TYPE, ANNOT_LOCATION_TEXT, ANNOT_GENE_LOCATION_TEXT, ANNOT_CDS_LENGTH, ANNOT_GENE_NAME, ANNOT_GENE_PRODUCT, ANNOT_GENE_TYPE, ANNOT_STRAND, ANNOT_GENE_ENTREZ_ID, ANNOT_GENE_ORTHOMCL_NAME
## 'select()' returned 1:1 mapping between keys and columns
nonesmer_annot <- load_orgdb_annotations(
  nonesmer_db,
  keytype="gid",
  fields=wanted_fields)
## Extracted all gene ids.
## Attempting to select: ANNOT_GENE_PRODUCT, ANNOT_GENE_TYPE, ANNOT_LOCATION_TEXT, ANNOT_GENE_LOCATION_TEXT, ANNOT_CDS_LENGTH, ANNOT_GENE_NAME, ANNOT_GENE_PRODUCT, ANNOT_GENE_TYPE, ANNOT_STRAND, ANNOT_GENE_ENTREZ_ID, ANNOT_GENE_ORTHOMCL_NAME
## 'select()' returned 1:1 mapping between keys and columns
unas_annot <- load_orgdb_annotations(
  unas_db,
  keytype="gid",
  fields=wanted_fields)
## Extracted all gene ids.
## Attempting to select: ANNOT_GENE_PRODUCT, ANNOT_GENE_TYPE, ANNOT_LOCATION_TEXT, ANNOT_GENE_LOCATION_TEXT, ANNOT_CDS_LENGTH, ANNOT_GENE_NAME, ANNOT_GENE_PRODUCT, ANNOT_GENE_TYPE, ANNOT_STRAND, ANNOT_GENE_ENTREZ_ID, ANNOT_GENE_ORTHOMCL_NAME
## 'select()' returned 1:1 mapping between keys and columns

Now combine the esmer, nonesmer, and unassigned annotations.

clbr_annot <- rbind(
  rbind(esmer_annot[["genes"]],
        nonesmer_annot[["genes"]]),
  unas_annot[["genes"]])
nona_idx <- !is.na(clbr_annot[["annot_gene_type"]])
clbr_annot <- clbr_annot[nona_idx, ]
##mrna_idx <- clbr_annot[["annot_gene_type"]] == "protein coding"
##clbr_annot <- clbr_annot[mrna_idx, ]
## Wait, did they finally combine esmer_annot/nonesmer_annot and the whole clbr?
testers <- head(rownames(unas_annot[["genes"]]))
testers %in% rownames(nonesmer_annot$genes)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE
testers %in% rownames(esmer_annot$genes)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE
## No, I guess not.
clbr_annot <- extract_gene_locations(clbr_annot)
hisat_clbr_annot <- clbr_annot
rownames(hisat_clbr_annot) <- paste0("exon_", rownames(hisat_clbr_annot), ".1")
salmon_clbr_annot <- clbr_annot
rownames(salmon_clbr_annot) <- paste0(rownames(salmon_clbr_annot), ".mRNA")

2 Gather orthologs between haplotypes

For the moment I think I will just ask for esmer->nonesmer

orthos <- EuPathDB::extract_eupath_orthologs(
                      db=esmer_db,
                      query_species="Trypanosoma cruzi CL Brener Non-Esmeraldo-like",
                      id_column="ORTHOLOGS_GID")
## Some columns were missing: ORTHOLOGS_COUNT
## Removing them, which may end badly.
## 'select()' returned 1:many mapping between keys and columns
## There are 48 possible species in this group.
## Found species: Trypanosoma cruzi CL Brener Non-Esmeraldo-like
orthos <- orthos[, c("GID", "ORTHOLOGS_GID")]
colnames(orthos) <- c("Esmeraldo", "NonEsmeraldo")
if (!isTRUE(get0("skip_load"))) {
  pander::pander(sessionInfo())
  message(paste0("This is hpgltools commit: ", get_git_commit()))
  message(paste0("Saving to ", savefile))
  tmp <- sm(saveme(filename=savefile))
}
## If you wish to reproduce this exact build of hpgltools, invoke the following:
## > git clone http://github.com/abelew/hpgltools.git
## > git reset f3c1e03852c87dc60c7e72e726bb640572e695ff
## This is hpgltools commit: Thu Aug 22 15:32:44 2019 -0400: f3c1e03852c87dc60c7e72e726bb640572e695ff
## Saving to 01_annotation_v20190813.rda.xz
LS0tCnRpdGxlOiAiVC4gY3J1emkgMjAxOTA1MTM6IENvbGxlY3RpbmcgYW5ub3RhdGlvbiBpbmZvcm1hdGlvbi4iCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKIGh0bWxfZG9jdW1lbnQ6CiAgY29kZV9kb3dubG9hZDogdHJ1ZQogIGNvZGVfZm9sZGluZzogc2hvdwogIGZpZ19jYXB0aW9uOiB0cnVlCiAgZmlnX2hlaWdodDogNwogIGZpZ193aWR0aDogNwogIGhpZ2hsaWdodDogZGVmYXVsdAogIGtlZXBfbWQ6IGZhbHNlCiAgbW9kZTogc2VsZmNvbnRhaW5lZAogIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogIHNlbGZfY29udGFpbmVkOiB0cnVlCiAgdGhlbWU6IHJlYWRhYmxlCiAgdG9jOiB0cnVlCiAgdG9jX2Zsb2F0OgogICBjb2xsYXBzZWQ6IGZhbHNlCiAgIHNtb290aF9zY3JvbGw6IGZhbHNlCi0tLQoKPHN0eWxlPgogIGJvZHkgLm1haW4tY29udGFpbmVyIHsKICAgIG1heC13aWR0aDogMTYwMHB4OwogIH0KPC9zdHlsZT4KCmBgYHtyIG9wdGlvbnMsIGluY2x1ZGU9RkFMU0V9CmlmICghaXNUUlVFKGdldDAoInNraXBfbG9hZCIpKSkgewogIGxpYnJhcnkoaHBnbHRvb2xzKQogIHR0IDwtIHNtKGRldnRvb2xzOjpsb2FkX2FsbCgiL2RhdGEvaHBnbHRvb2xzIikpCiAga25pdHI6Om9wdHNfa25pdCRzZXQocHJvZ3Jlc3M9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9OTAsCiAgICAgICAgICAgICAgICAgICAgICAgZWNobz1UUlVFKQogIGtuaXRyOjpvcHRzX2NodW5rJHNldChlcnJvcj1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGg9OCwKICAgICAgICAgICAgICAgICAgICAgICAgZmlnLmhlaWdodD04LAogICAgICAgICAgICAgICAgICAgICAgICBkcGk9OTYpCiAgb2xkX29wdGlvbnMgPC0gb3B0aW9ucyhkaWdpdHM9NCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICBrbml0ci5kdXBsaWNhdGUubGFiZWw9ImFsbG93IikKICBnZ3Bsb3QyOjp0aGVtZV9zZXQoZ2dwbG90Mjo6dGhlbWVfYncoYmFzZV9zaXplPTEyKSkKICB2ZXIgPC0gIjIwMTkwODEzIgogIHByZXZpb3VzX2ZpbGUgPC0gcGFzdGUwKCJpbmRleF92IiwgdmVyLCAiLlJtZCIpCgogIHRtcCA8LSB0cnkoc20obG9hZG1lKGZpbGVuYW1lPWdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iXFwucmRhXFwueHoiLCB4PXByZXZpb3VzX2ZpbGUpKSkpCiAgcm1kX2ZpbGUgPC0gcGFzdGUwKCIwMV9hbm5vdGF0aW9uX3YiLCB2ZXIsICIuUm1kIikKICBzYXZlZmlsZSA8LSBnc3ViKHBhdHRlcm49IlxcLlJtZCIsIHJlcGxhY2U9IlxcLnJkYVxcLnh6IiwgeD1ybWRfZmlsZSkKfQpgYGAKCiMgQW5ub3RhdGlvbiB2ZXJzaW9uOiBgciB2ZXJgCgojIyBHZW5vbWUgYW5ub3RhdGlvbiB3aXRoIE9yZ0RiL1R4RGIvT3JnYW5pc21EYmkKClRoZSB0cml0cnlwZGIganVzdCByZWxlYXNlZCBhIG5ldyB2ZXJzaW9uLiAgTGV0IHVzIG1ha2UgbmV3IGFubm90YXRpb24gZGF0YSBmcm9tIGl0LgoKYGBge3IgY3JlYXRlX29yZ2FuaXNtcywgZXZhbD1GQUxTRX0KIyMgVGhlc2UgZnVuY3Rpb25zIHRha2UgX2ZvcmV2ZXJfIHRoZSBmaXJzdCB0aW1lIGFyb3VuZC4KZGV2dG9vbHM6OmxvYWRfYWxsKCJ+L3NjcmF0Y2gvZ2l0L0V1UGF0aERCIikKCmVzbWVyX2VudHJ5IDwtIGdldF9ldXBhdGhfZW50cnkoIkVzbWVyYWxkby1saWtlIiwgd2Vic2VydmljZT0idHJpdHJ5cGRiIikKCmluc3RhbGxlZHAgPC0gZ2V0X2V1cGF0aF9wa2duYW1lcyhlc21lcl9lbnRyeSkkb3JnZGJfaW5zdGFsbGVkCmlmICghaXNUUlVFKGluc3RhbGxlZHApKSB7CiAgICBlc21lcl9hbm5vdCA8LSBFdVBhdGhEQjo6bWFrZV9ldXBhdGhfb3JnZGIoZXNtZXJfZW50cnksIHJlaW5zdGFsbD1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZT1UUlVFKQp9Cgpub25lc21lcl9lbnRyeSA8LSBnZXRfZXVwYXRoX2VudHJ5KCJOb24tRXNtZXJhbGRvLWxpa2UiLCB3ZWJzZXJ2aWNlPSJ0cml0cnlwZGIiKQppbnN0YWxsZWRwIDwtIGdldF9ldXBhdGhfcGtnbmFtZXMobm9uZXNtZXJfZW50cnkpJG9yZ2RiX2luc3RhbGxlZAppZiAoIWlzVFJVRShpbnN0YWxsZWRwKSkgewogICAgbm9uZXNtZXJfYW5ub3QgPC0gRXVQYXRoREI6Om1ha2VfZXVwYXRoX29yZ2RiKG5vbmVzbWVyX2VudHJ5LCByZWluc3RhbGw9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGU9VFJVRSkKfQp1bmFzX2VudHJ5IDwtIGdldF9ldXBhdGhfZW50cnkoInN0cmFpbiBDTCBCcmVuZXIiLCB3ZWJzZXJ2aWNlPSJ0cml0cnlwZGIiKQppbnN0YWxsZWRwIDwtIGdldF9ldXBhdGhfcGtnbmFtZXModW5hc19lbnRyeSkkb3JnZGJfaW5zdGFsbGVkCmlmICghaXNUUlVFKGluc3RhbGxlZHApKSB7CiAgICB1bmFzX2Fubm90IDwtIEV1UGF0aERCOjptYWtlX2V1cGF0aF9vcmdkYih1bmFzX2VudHJ5LCByZWluc3RhbGw9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZT1UUlVFKQogICAgIyMgdW5hc19hbm5vdCA8LSBFdVBhdGhEQjo6bWFrZV9ldXBhdGhfb3JnZGIodW5hc19lbnRyeSwgcmVpbnN0YWxsPVRSVUUpCn0KCgptYWpfZW50cnkgPC0gZ2V0X2V1cGF0aF9lbnRyeSgiRnJpZWRsaW4iLCB3ZWJzZXJ2aWNlPSJ0cml0cnlwZGIiKQptYWpfYW5ub3QgPC0gRXVQYXRoREI6Om1ha2VfZXVwYXRoX29yZ2RiKG1hal9lbnRyeSwgcmVpbnN0YWxsPVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlPVRSVUUpCm1hal9uYW1lcyA8LSBnZXRfZXVwYXRoX3BrZ25hbWVzKG1hal9lbnRyeSkKbGlicmFyeShtYWpfbmFtZXMkb3JnZGIsIGNoYXJhY3Rlcj1UUlVFKQptYWpfZGIgPC0gZ2V0MChtYWpfbmFtZXMkb3JnZGIpCm1hal9kYgp0YWlsKGtleXMobWFqX2RiKSkKcGFuX2VudHJ5IDwtIGdldF9ldXBhdGhfZW50cnkoImFuYW1lbnNpcyIsIHdlYnNlcnZpY2U9InRyaXRyeXBkYiIpCnBhbl9hbm5vdCA8LSBFdVBhdGhEQjo6bWFrZV9ldXBhdGhfb3JnZGIocGFuX2VudHJ5LCByZWluc3RhbGw9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGU9VFJVRSkKCmBgYAoKSW4gb3JkZXIgdG8gbG9hZCB0aGVzZSBuZXcgcGFja2FnZXMsIEkgcmF0aGVyIG5lZWQgdG8gcmVtZW1iZXIgdGhlaXIgbmFtZXMuLi4KSGFwcGlseSBJIGhhdmUgYSBmdW5jdGlvbiBmb3IgdGhhdC4KCmBgYHtyIGxvYWRfYW5ub3RhdGlvbnN9CiMjbGlicmFyeShFdVBhdGhEQikKZGV2dG9vbHM6OmxvYWRfYWxsKCJ+L3NjcmF0Y2gvZ2l0L0V1UGF0aERCIikKZXNtZXJfZW50cnkgPC0gRXVQYXRoREI6OmdldF9ldXBhdGhfZW50cnkoc3BlY2llcz0iRXNtZXJhbGRvLWxpa2UiLCB3ZWJzZXJ2aWNlPSJ0cml0cnlwZGIiKQpub25lc21lcl9lbnRyeSA8LSBFdVBhdGhEQjo6Z2V0X2V1cGF0aF9lbnRyeShzcGVjaWVzPSJCcmVuZXIgTm9uIiwgd2Vic2VydmljZT0idHJpdHJ5cGRiIikKdW5hc19lbnRyeSA8LSBFdVBhdGhEQjo6Z2V0X2V1cGF0aF9lbnRyeShzcGVjaWVzPSJDTCBCcmVuZXIkIiwgd2Vic2VydmljZT0idHJpdHJ5cGRiIikKCmVzbWVyX25hbWVzIDwtIGdldF9ldXBhdGhfcGtnbmFtZXMoZXNtZXJfZW50cnkpCmVzbWVyX25hbWVzJG9yZ2RiCm5vbmVzbWVyX25hbWVzIDwtIGdldF9ldXBhdGhfcGtnbmFtZXMobm9uZXNtZXJfZW50cnkpCm5vbmVzbWVyX25hbWVzJG9yZ2RiCnVuYXNfbmFtZXMgPC0gZ2V0X2V1cGF0aF9wa2duYW1lcyh1bmFzX2VudHJ5KQp1bmFzX25hbWVzJG9yZ2RiCmBgYAoKRm9yIHRob3NlIHBhY2thZ2VzIEkgaGF2ZSBnZW5lcmF0ZWQvaW5zdGFsbGVkLCB1c2UgdGhpcyB0byBnZW5lcmF0ZSBhbgphbm5vdGF0aW9uIHRhYmxlLiBPaCwgYnV0IEkgcHJlZml4ZWQgdGhlIGNvbHVtbiBuYW1lcyB3aXRoICdhbm5vdF8nIGluIG9yZGVyIHRvCm1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgaXMgZHVwbGljYXRlZCB3aXRoIHRoZSBHTyB0YWJsZXMsIG9ydGhvbG9nIHRhYmxlcywgZXRjLgoKYGBge3IgbG9hZF9vcmdkYn0KIyMgSnVzdCB0byBzYXZlIG9uIHR5cGluZwpsaWJyYXJ5KGVzbWVyX25hbWVzJG9yZ2RiLCBjaGFyYWN0ZXI9VFJVRSkKbGlicmFyeShub25lc21lcl9uYW1lcyRvcmdkYiwgY2hhcmFjdGVyPVRSVUUpCmxpYnJhcnkodW5hc19uYW1lcyRvcmdkYiwgY2hhcmFjdGVyPVRSVUUpCgplc21lcl9kYiA8LSBnZXQwKGVzbWVyX25hbWVzJG9yZ2RiKQplc21lcl9kYgpub25lc21lcl9kYiA8LSBnZXQwKG5vbmVzbWVyX25hbWVzJG9yZ2RiKQpub25lc21lcl9kYgp1bmFzX2RiIDwtIGdldDAodW5hc19uYW1lcyRvcmdkYikKdW5hc19kYgpgYGAKCkxldHMgc2VlIHdoYXQgY29sdW1ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBhbm5vdGF0aW9uIHBhY2thZ2VzLgoKYGBge3IgYXZhaWxfY29sdW1uc30KYWxsX2ZpZWxkcyA8LSBjb2x1bW5zKGVzbWVyX2RiKQphbGxfZmllbGRzCgp0dCA8LSBsb2FkX29yZ2RiX2Fubm90YXRpb25zKAogICAgZXNtZXJfZGIsCiAgICBrZXl0eXBlPSJnaWQiLAogICAgZmllbGRzPSJhbGwiKQoKd2FudGVkX2ZpZWxkcyA8LSBjKCJhbm5vdF9nZW5lX2xvY2F0aW9uX3RleHQiLAogICAgICAgICAgICAgICAgICAgImFubm90X2Nkc19sZW5ndGgiLAogICAgICAgICAgICAgICAgICAgImFubm90X2dlbmVfbmFtZSIsCiAgICAgICAgICAgICAgICAgICAiYW5ub3RfZ2VuZV9wcm9kdWN0IiwKICAgICAgICAgICAgICAgICAgICJhbm5vdF9nZW5lX3R5cGUiLAogICAgICAgICAgICAgICAgICAgImFubm90X3N0cmFuZCIsCiAgICAgICAgICAgICAgICAgICAiYW5ub3RfZ2VuZV9lbnRyZXpfaWQiLAogICAgICAgICAgICAgICAgICAgImFubm90X2dlbmVfb3J0aG9tY2xfbmFtZSIpCmVzbWVyX2Fubm90IDwtIGxvYWRfb3JnZGJfYW5ub3RhdGlvbnMoCiAgZXNtZXJfZGIsCiAga2V5dHlwZT0iZ2lkIiwKICBmaWVsZHM9d2FudGVkX2ZpZWxkcykKbm9uZXNtZXJfYW5ub3QgPC0gbG9hZF9vcmdkYl9hbm5vdGF0aW9ucygKICBub25lc21lcl9kYiwKICBrZXl0eXBlPSJnaWQiLAogIGZpZWxkcz13YW50ZWRfZmllbGRzKQp1bmFzX2Fubm90IDwtIGxvYWRfb3JnZGJfYW5ub3RhdGlvbnMoCiAgdW5hc19kYiwKICBrZXl0eXBlPSJnaWQiLAogIGZpZWxkcz13YW50ZWRfZmllbGRzKQpgYGAKCk5vdyBjb21iaW5lIHRoZSBlc21lciwgbm9uZXNtZXIsIGFuZCB1bmFzc2lnbmVkIGFubm90YXRpb25zLgoKYGBge3IgY29tYmluZV9hbm5vdH0KY2xicl9hbm5vdCA8LSByYmluZCgKICByYmluZChlc21lcl9hbm5vdFtbImdlbmVzIl1dLAogICAgICAgIG5vbmVzbWVyX2Fubm90W1siZ2VuZXMiXV0pLAogIHVuYXNfYW5ub3RbWyJnZW5lcyJdXSkKbm9uYV9pZHggPC0gIWlzLm5hKGNsYnJfYW5ub3RbWyJhbm5vdF9nZW5lX3R5cGUiXV0pCmNsYnJfYW5ub3QgPC0gY2xicl9hbm5vdFtub25hX2lkeCwgXQojI21ybmFfaWR4IDwtIGNsYnJfYW5ub3RbWyJhbm5vdF9nZW5lX3R5cGUiXV0gPT0gInByb3RlaW4gY29kaW5nIgojI2NsYnJfYW5ub3QgPC0gY2xicl9hbm5vdFttcm5hX2lkeCwgXQojIyBXYWl0LCBkaWQgdGhleSBmaW5hbGx5IGNvbWJpbmUgZXNtZXJfYW5ub3Qvbm9uZXNtZXJfYW5ub3QgYW5kIHRoZSB3aG9sZSBjbGJyPwp0ZXN0ZXJzIDwtIGhlYWQocm93bmFtZXModW5hc19hbm5vdFtbImdlbmVzIl1dKSkKdGVzdGVycyAlaW4lIHJvd25hbWVzKG5vbmVzbWVyX2Fubm90JGdlbmVzKQp0ZXN0ZXJzICVpbiUgcm93bmFtZXMoZXNtZXJfYW5ub3QkZ2VuZXMpCiMjIE5vLCBJIGd1ZXNzIG5vdC4KY2xicl9hbm5vdCA8LSBleHRyYWN0X2dlbmVfbG9jYXRpb25zKGNsYnJfYW5ub3QpCmhpc2F0X2NsYnJfYW5ub3QgPC0gY2xicl9hbm5vdApyb3duYW1lcyhoaXNhdF9jbGJyX2Fubm90KSA8LSBwYXN0ZTAoImV4b25fIiwgcm93bmFtZXMoaGlzYXRfY2xicl9hbm5vdCksICIuMSIpCnNhbG1vbl9jbGJyX2Fubm90IDwtIGNsYnJfYW5ub3QKcm93bmFtZXMoc2FsbW9uX2NsYnJfYW5ub3QpIDwtIHBhc3RlMChyb3duYW1lcyhzYWxtb25fY2xicl9hbm5vdCksICIubVJOQSIpCmBgYAoKIyBHYXRoZXIgb3J0aG9sb2dzIGJldHdlZW4gaGFwbG90eXBlcwoKRm9yIHRoZSBtb21lbnQgSSB0aGluayBJIHdpbGwganVzdCBhc2sgZm9yIGVzbWVyLT5ub25lc21lcgoKYGBge3Igb3J0aG9zfQpvcnRob3MgPC0gRXVQYXRoREI6OmV4dHJhY3RfZXVwYXRoX29ydGhvbG9ncygKICAgICAgICAgICAgICAgICAgICAgIGRiPWVzbWVyX2RiLAogICAgICAgICAgICAgICAgICAgICAgcXVlcnlfc3BlY2llcz0iVHJ5cGFub3NvbWEgY3J1emkgQ0wgQnJlbmVyIE5vbi1Fc21lcmFsZG8tbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICBpZF9jb2x1bW49Ik9SVEhPTE9HU19HSUQiKQpvcnRob3MgPC0gb3J0aG9zWywgYygiR0lEIiwgIk9SVEhPTE9HU19HSUQiKV0KY29sbmFtZXMob3J0aG9zKSA8LSBjKCJFc21lcmFsZG8iLCAiTm9uRXNtZXJhbGRvIikKYGBgCgpgYGB7ciBzYXZlbWV9CmlmICghaXNUUlVFKGdldDAoInNraXBfbG9hZCIpKSkgewogIHBhbmRlcjo6cGFuZGVyKHNlc3Npb25JbmZvKCkpCiAgbWVzc2FnZShwYXN0ZTAoIlRoaXMgaXMgaHBnbHRvb2xzIGNvbW1pdDogIiwgZ2V0X2dpdF9jb21taXQoKSkpCiAgbWVzc2FnZShwYXN0ZTAoIlNhdmluZyB0byAiLCBzYXZlZmlsZSkpCiAgdG1wIDwtIHNtKHNhdmVtZShmaWxlbmFtZT1zYXZlZmlsZSkpCn0KYGBgCg==