1 Introduction

Let us check out some new cruzi infections following the deletion of a specific gene.

I thought I also did the interrogation of the CLBrener transcriptome, but that appears untrue. I think I may have forgotten to copy the genome in place…

2 Human annotation information

I have a pretty new genome downloaded (202509), so I will (for now) just let my annotation function grab whatever it thinks is reasonable. It chose the 202410 set. Seems good to me.

hs_annot <- load_biomart_annotations()
## The biomart annotations file already exists, loading from it.
tc_annot <- load_gff_annotations("~/libraries/genome/gff/tcruzi_all.gff",
                                 type = "mRNA", id_col = "Parent")
## Returning a df with 24 columns and 23305 rows.
rownames(tc_annot) <- gsub(x = make.names(tc_annot[["Name"]], unique = TRUE),
                           pattern = "\\.\\d+$", replacement = "")
esmer_db <- "org.Tcruzi.CL.Brener.Esmeraldo.like.v68.eg.db"
library(esmer_db, character.only = TRUE)
## Loading required package: AnnotationDbi
## Loading required package: stats4
## Loading required package: BiocGenerics
## 
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:hpgltools':
## 
##     annotation, annotation<-, conditions, conditions<-
## The following objects are masked from 'package:dplyr':
## 
##     combine, intersect, setdiff, union
## The following objects are masked from 'package:stats':
## 
##     IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
## 
##     anyDuplicated, aperm, append, as.data.frame, basename, cbind, colnames, dirname, do.call,
##     duplicated, eval, evalq, Filter, Find, get, grep, grepl, intersect, is.unsorted, lapply,
##     Map, mapply, match, mget, order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,
##     rbind, Reduce, rownames, sapply, saveRDS, setdiff, table, tapply, union, unique, unsplit,
##     which.max, which.min
## Loading required package: Biobase
## Welcome to Bioconductor
## 
##     Vignettes contain introductory material; view with 'browseVignettes()'. To cite
##     Bioconductor, see 'citation("Biobase")', and for packages 'citation("pkgname")'.
## Loading required package: IRanges
## Loading required package: S4Vectors
## 
## Attaching package: 'S4Vectors'
## The following object is masked from 'package:tidyr':
## 
##     expand
## The following objects are masked from 'package:dplyr':
## 
##     first, rename
## The following object is masked from 'package:utils':
## 
##     findMatches
## The following objects are masked from 'package:base':
## 
##     expand.grid, I, unname
## 
## Attaching package: 'IRanges'
## The following object is masked from 'package:glue':
## 
##     trim
## The following objects are masked from 'package:dplyr':
## 
##     collapse, desc, slice
## 
## Attaching package: 'AnnotationDbi'
## The following object is masked from 'package:dplyr':
## 
##     select
## 
esmer_db <- get0(esmer_db)
all_keytypes <- keytypes(esmer_db)
wanted_idx <- grepl(x = all_keytypes, pattern = "^ANNOT_")
wanted_fields <- all_keytypes[wanted_idx]
nonesmer_db <- "org.Tcruzi.CL.Brener.Non.Esmeraldo.like.v68.eg.db"
unas_db <- "org.Tcruzi.CL.Brener.v68.eg.db"

tc_esmer <- load_orgdb_annotations(esmer_db, keytype = "gid", fields = wanted_fields)
## Unable to find CDSNAME, setting it to ANNOT_EXTERNAL_DB_NAME.
## Unable to find CDSCHROM in the db, removing it.
## Unable to find CDSSTRAND in the db, removing it.
## Unable to find CDSSTART in the db, removing it.
## Unable to find CDSEND in the db, removing it.
## Extracted all gene ids.
## Attempting to select: ANNOT_EXTERNAL_DB_NAME, GENE_TYPE, ANNOT_AA_SEQUENCE_ID, ANNOT_ANNOTATED_GO_COMPONENT, ANNOT_ANNOTATED_GO_FUNCTION, ANNOT_ANNOTATED_GO_ID_COMPONENT, ANNOT_ANNOTATED_GO_ID_FUNCTION, ANNOT_ANNOTATED_GO_ID_PROCESS, ANNOT_ANNOTATED_GO_PROCESS, ANNOT_ANTICODON, ANNOT_APOLLO_LINK_OUT, ANNOT_APOLLO_TRANSCRIPT_DESCRIPTION, ANNOT_CDS, ANNOT_CDS_LENGTH, ANNOT_CHROMOSOME, ANNOT_CODING_END, ANNOT_CODING_START, ANNOT_EC_NUMBERS, ANNOT_EC_NUMBERS_DERIVED, ANNOT_END_MAX, ANNOT_EXON_COUNT, ANNOT_EXTERNAL_DB_NAME, ANNOT_EXTERNAL_DB_VERSION, ANNOT_FIVE_PRIME_UTR_LENGTH, ANNOT_GENE_CONTEXT_END, ANNOT_GENE_CONTEXT_START, ANNOT_GENE_END_MAX, ANNOT_GENE_END_MAX_TEXT, ANNOT_GENE_ENTREZ_ID, ANNOT_GENE_ENTREZ_LINK_DISPLAYTEXT, ANNOT_GENE_ENTREZ_LINK_URL, 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_START_MIN, ANNOT_GENE_START_MIN_TEXT, ANNOT_GENE_TOTAL_HTS_SNPS, ANNOT_GENE_TRANSCRIPT_COUNT, ANNOT_GENE_TYPE, ANNOT_GENOMIC_SEQUENCE_LENGTH, ANNOT_GENUS_SPECIES, ANNOT_HAS_MISSING_TRANSCRIPTS, ANNOT_INTERPRO_DESCRIPTION, ANNOT_INTERPRO_ID, ANNOT_IS_DEPRECATED, ANNOT_IS_PSEUDO, ANNOT_ISOELECTRIC_POINT, ANNOT_LOCATION_TEXT, ANNOT_MAP_LOCATION, ANNOT_MCMC_LOCATION, ANNOT_MOLECULAR_WEIGHT, ANNOT_NCBI_TAX_ID, ANNOT_ORTHOMCL_LINK, ANNOT_OVERVIEW, 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_PRIMARY_KEY, ANNOT_PROB_MAP, ANNOT_PROB_MCMC, ANNOT_PROSITEPROFILES_DESCRIPTION, ANNOT_PROSITEPROFILES_ID, ANNOT_PROTEIN_LENGTH, ANNOT_PROTEIN_SEQUENCE, ANNOT_PROTEIN_SOURCE_ID, ANNOT_PSEUDO_STRING, ANNOT_SEQUENCE_DATABASE_NAME, ANNOT_SEQUENCE_ID, ANNOT_SIGNALP_PEPTIDE, ANNOT_SMART_DESCRIPTION, ANNOT_SMART_ID, ANNOT_SNPOVERVIEW, ANNOT_SO_ID, ANNOT_SO_TERM_DEFINITION, ANNOT_SO_TERM_NAME, ANNOT_SO_VERSION, ANNOT_START_MIN, ANNOT_STRAND, ANNOT_STRAND_PLUS_MINUS, 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_IDS, ANNOT_UNIPROT_LINKS
## 'select()' returned 1:1 mapping between keys and columns
tc_nonesmer <- load_orgdb_annotations(nonesmer_db, keytype = "gid", fields = wanted_fields)
## 
## Unable to find CDSNAME, setting it to ANNOT_EXTERNAL_DB_NAME.
## Unable to find CDSCHROM in the db, removing it.
## Unable to find CDSSTRAND in the db, removing it.
## Unable to find CDSSTART in the db, removing it.
## Unable to find CDSEND in the db, removing it.
## Extracted all gene ids.
## Attempting to select: ANNOT_EXTERNAL_DB_NAME, GENE_TYPE, ANNOT_AA_SEQUENCE_ID, ANNOT_ANNOTATED_GO_COMPONENT, ANNOT_ANNOTATED_GO_FUNCTION, ANNOT_ANNOTATED_GO_ID_COMPONENT, ANNOT_ANNOTATED_GO_ID_FUNCTION, ANNOT_ANNOTATED_GO_ID_PROCESS, ANNOT_ANNOTATED_GO_PROCESS, ANNOT_ANTICODON, ANNOT_APOLLO_LINK_OUT, ANNOT_APOLLO_TRANSCRIPT_DESCRIPTION, ANNOT_CDS, ANNOT_CDS_LENGTH, ANNOT_CHROMOSOME, ANNOT_CODING_END, ANNOT_CODING_START, ANNOT_EC_NUMBERS, ANNOT_EC_NUMBERS_DERIVED, ANNOT_END_MAX, ANNOT_EXON_COUNT, ANNOT_EXTERNAL_DB_NAME, ANNOT_EXTERNAL_DB_VERSION, ANNOT_FIVE_PRIME_UTR_LENGTH, ANNOT_GENE_CONTEXT_END, ANNOT_GENE_CONTEXT_START, ANNOT_GENE_END_MAX, ANNOT_GENE_END_MAX_TEXT, ANNOT_GENE_ENTREZ_ID, ANNOT_GENE_ENTREZ_LINK_DISPLAYTEXT, ANNOT_GENE_ENTREZ_LINK_URL, 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_START_MIN, ANNOT_GENE_START_MIN_TEXT, ANNOT_GENE_TOTAL_HTS_SNPS, ANNOT_GENE_TRANSCRIPT_COUNT, ANNOT_GENE_TYPE, ANNOT_GENOMIC_SEQUENCE_LENGTH, ANNOT_GENUS_SPECIES, ANNOT_HAS_MISSING_TRANSCRIPTS, ANNOT_INTERPRO_DESCRIPTION, ANNOT_INTERPRO_ID, ANNOT_IS_DEPRECATED, ANNOT_IS_PSEUDO, ANNOT_ISOELECTRIC_POINT, ANNOT_LOCATION_TEXT, ANNOT_MAP_LOCATION, ANNOT_MCMC_LOCATION, ANNOT_MOLECULAR_WEIGHT, ANNOT_NCBI_TAX_ID, ANNOT_ORTHOMCL_LINK, ANNOT_OVERVIEW, 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_PRIMARY_KEY, ANNOT_PROB_MAP, ANNOT_PROB_MCMC, ANNOT_PROSITEPROFILES_DESCRIPTION, ANNOT_PROSITEPROFILES_ID, ANNOT_PROTEIN_LENGTH, ANNOT_PROTEIN_SEQUENCE, ANNOT_PROTEIN_SOURCE_ID, ANNOT_PSEUDO_STRING, ANNOT_SEQUENCE_DATABASE_NAME, ANNOT_SEQUENCE_ID, ANNOT_SIGNALP_PEPTIDE, ANNOT_SMART_DESCRIPTION, ANNOT_SMART_ID, ANNOT_SNPOVERVIEW, ANNOT_SO_ID, ANNOT_SO_TERM_DEFINITION, ANNOT_SO_TERM_NAME, ANNOT_SO_VERSION, ANNOT_START_MIN, ANNOT_STRAND, ANNOT_STRAND_PLUS_MINUS, 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_IDS, ANNOT_UNIPROT_LINKS
## 'select()' returned 1:1 mapping between keys and columns
tc_unas <- load_orgdb_annotations(unass_db, keytype = "gid", fields = wanted_fields)
## Error: object 'unass_db' not found
tc_more <- rbind(tc_esmer$genes, tc_nonesmer$genes, tc_more$genes)
## Error: object 'tc_more' not found
tc_annot <- merge(tc_annot, tc_more, by = "row.names")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'y' in selecting a method for function 'merge': object 'tc_more' not found
rownames(tc_annot) <- tc_annot[["gid"]]
tc_annot[["gid"]] <- NULL

2.1 Load cruzi GO data similarly

tc_esmer_go <- load_orgdb_go(esmer_db, keytype = "GID")
## This is an orgdb, good.
## 'select()' returned 1:many mapping between keys and columns
## 'select()' returned 1:many mapping between keys and columns
tc_nonesmer_go <- load_orgdb_go(nonesmer_db, keytype = "GID")
## This is an orgdb, good.
## 'select()' returned 1:many mapping between keys and columns
## 'select()' returned 1:many mapping between keys and columns
tc_unas_go <- load_orgdb_go(unas_db, keytype = "GID")
## 
## This is an orgdb, good.
## 'select()' returned 1:many mapping between keys and columns
## 'select()' returned 1:many mapping between keys and columns
tc_go <- rbind(tc_esmer_go, tc_nonesmer_go, tc_unas_go)
tc_go <- tc_go[, c("GO", "GID")]
colnames(tc_go) <- c("GO", "ID")

3 Sample sheet

I asked for one from Najib/Amalie but unless I am mistaken it has not arrived. That is not a problem, given two helpful things: April provides one, I also named the directories so that the sample IDs are built in; so I will just make a fake one for now and then merge in whatever I get from them…

sample_sheet <- "sample_sheets/all_samples.xlsx"

plot_meta_sankey(as.data.frame(extract_metadata(sample_sheet)), factors = c("background", "exp_number"))
## Did not find the condition column in the sample sheet.
## Filling it in as undefined.
## Did not find the batch column in the sample sheet.
## Filling it in as undefined.
## Checking the state of the condition column.
## Checking the state of the batch column.
## Checking the condition factor.
## Warning: attributes are not identical across measure variables; they will be dropped
## Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## ℹ The deprecated feature was likely used in the ggsankey package.
##   Please report the issue at <https://github.com/davidsjoberg/ggsankey/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
## A sankey plot describing the metadata of 14 samples,
## including 19 out of 0 nodes and traversing metadata factors:
## background, exp_number.

4 Adding some metadata

Let us see how well my preprocess gatherer does…

new_meta <- gather_preprocessing_metadata(sample_sheet, species = c("hg38_115", "tcruzi_all"))
## Did not find the condition column in the sample sheet.
## Filling it in as undefined.
## Did not find the batch column in the sample sheet.
## Filling it in as undefined.
## Checking the state of the condition column.
## Checking the state of the batch column.
## Checking the condition factor.
## Error in dispatch_regex_search(meta, search, replace, input_file_spec, : object 'found' not found
head(new_meta$new_meta)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'head': object 'new_meta' not found

5 The primary data structure

hs_se <- create_se(new_meta[["new_meta"]], gene_info = hs_annot[["gene_annotations"]],
                   file_column = "hisat_count_table_hg38_115") %>%
  set_conditions(fact = "background") %>%
  set_batches(fact = "exp_number")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'exp' in selecting a method for function 'set_batches': error in evaluating the argument 'exp' in selecting a method for function 'set_conditions': object 'new_meta' not found
tc_se <- create_se(new_meta[["new_meta"]], gene_info = tc_annot,
                   file_column = "hisat_count_table_tcruzi_all") %>%
  set_conditions(fact = "background") %>%
  set_batches(fact = "exp_number")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'exp' in selecting a method for function 'set_batches': error in evaluating the argument 'exp' in selecting a method for function 'set_conditions': object 'new_meta' not found
tc_se <- subset_se(tc_se, nonzero = 5000)
## Error: object 'tc_se' not found
plot_libsize(hs_se)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_libsize': object 'hs_se' not found
plot_nonzero(hs_se)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_nonzero': object 'hs_se' not found
plot_libsize(tc_se)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_libsize': object 'tc_se' not found
plot_nonzero(tc_se)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_nonzero': object 'tc_se' not found
hs_replicated <- subset_se(hs_se, min_replicates = 3, fact = "condition")
## Error: object 'hs_se' not found
tc_replicated <- subset_se(tc_se, min_replicates = 3, fact = "condition") %>%
  subset_se(nonzero = 10000)
## Error: object 'tc_se' not found

6 Sample clustering

6.1 Human

devtools::load_all("~/hpgltools")
## ℹ Loading hpgltools
## in method for 'plot_topn_gsea' with signature 'gse="all_cprofiler"': no definition for class "all_cprofiler"
## 
## in method for 'plot_topn_gsea' with signature 'gse="clusterprofiler_result"': no definition for class "clusterprofiler_result"
## Warning: multiple methods tables found for 'annotation'
## Warning: multiple methods tables found for 'annotation<-'
hs_norm <- normalize(hs_replicated, transform = "log2", convert = "cpm",
                        norm = "quant", filter = TRUE)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'hs_replicated' not found
plot_disheat(hs_norm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'hs_norm' not found
plot_corheat(hs_norm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'hs_norm' not found
plot_pca(hs_norm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_pca': object 'hs_norm' not found
hs_rnorm <- normalize(hs_replicated, transform = "log2", convert = "cpm",
                      norm = "quant", filter = TRUE)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'hs_replicated' not found
plot_disheat(hs_rnorm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'hs_rnorm' not found
plot_pca(hs_rnorm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_pca': object 'hs_rnorm' not found
hs_rbnorm <- normalize(hs_replicated, transform = "log2", convert = "cpm",
                       filter = TRUE, batch = "svaseq")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'hs_replicated' not found
plot_pca(hs_rbnorm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_pca': object 'hs_rbnorm' not found

6.2 Parasite

tc_norm <- normalize(tc_replicated, transform = "log2", convert = "cpm",
                     norm = "quant", filter = TRUE)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'tc_replicated' not found
plot_disheat(tc_norm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'tc_norm' not found
plot_corheat(tc_norm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'tc_norm' not found
plot_pca(tc_norm, plot_labels = TRUE)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_pca': object 'tc_norm' not found
tc_rnorm <- normalize(tc_se, transform = "log2", convert = "cpm",
                      norm = "quant", filter = TRUE)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'tc_se' not found
plot_disheat(tc_rnorm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'input_data' in selecting a method for function 'plot_heatmap': object 'tc_rnorm' not found
plot_pca(tc_rnorm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_pca': object 'tc_rnorm' not found
tc_rbnorm <- normalize(tc_se, transform = "log2", convert = "cpm",
                       filter = TRUE, batch = "svaseq")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'normalize': object 'tc_se' not found
plot_pca(tc_rbnorm)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'data' in selecting a method for function 'plot_pca': object 'tc_rbnorm' not found

7 DE?

I am not thinking we will see many genes of interest.

hs_keepers <- list(
  "ab_vs_control" = c("AB10", "control"),
  "ko_vs_control" = c("ko7", "control"),
  "ko_vs_wt" = c("ko7", "wt"),
  "ab_vs_wt" = c("AB10", "wt"),
  "ab_vs_ko" = c("AB10", "ko7"))
hs_de <- all_pairwise(hs_replicated, filter = TRUE, model_fstring = "~ 0 + condition",
                      model_svs = "svaseq")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'pData': object 'hs_replicated' not found
hs_de
## Error: object 'hs_de' not found
hs_tables <- combine_de_tables(hs_de, keepers = hs_keepers, excel = "excel/hs_tables.xlsx")
## Deleting the file excel/hs_tables.xlsx before writing the tables.
## Error: object 'hs_de' not found
hs_tables
## Error: object 'hs_tables' not found
hs_sig <- extract_significant_genes(hs_tables, excel = "excel/hs_sig.xlsx")
## Error: object 'hs_tables' not found
hs_sig
## Error: object 'hs_sig' not found
conditions(tc_replicated)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'exp' in selecting a method for function 'conditions': object 'tc_replicated' not found
tc_keepers <- list(
  "ab_vs_wt" = c("AB10", "wt"),
  "ko_vs_wt" = c("ko7", "wt"),
  "ab_vs_ko" = c("AB10", "ko7"))
tc_de <- all_pairwise(tc_replicated, filter = TRUE, model_fstring = "~ 0 + condition",
                      model_svs = "svaseq")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'pData': object 'tc_replicated' not found
tc_de
## Error: object 'tc_de' not found
tc_tables <- combine_de_tables(tc_de, keepers = tc_keepers, excel = "excel/tc_tables.xlsx")
## Error: object 'tc_de' not found
tc_tables
## Error: object 'tc_tables' not found
tc_sig <- extract_significant_genes(tc_tables, excel = "excel/tc_sig.xlsx")
## Error: object 'tc_tables' not found
tc_sig
## Error: object 'tc_sig' not found

8 Try some ontology searching via clusterProfiler

ko_wt_up <- tc_sig[["deseq"]][["ups"]][["ko_vs_wt"]]
## Error: object 'tc_sig' not found
ko_wt_all <- tc_tables[["data"]][["ko_vs_wt"]]
## Error: object 'tc_tables' not found
tc_esmer_up_cp <- simple_clusterprofiler(
  ko_wt_up, de_table = ko_wt_all, orgdb = esmer_db, orgdb_to = "GID",
  organism = "tcruzi")
## Error: object 'ko_wt_all' not found
tc_nonesmer_up_cp <- simple_clusterprofiler(
  ko_wt_up, de_table = ko_wt_all, orgdb = nonesmer_db, orgdb_to = "GID",
  organism = "tcruzi")
## Error: object 'ko_wt_all' not found
tc_unas_up_cp <- simple_clusterprofiler(
  ko_wt_up, de_table = ko_wt_all, orgdb = unas_db, orgdb_to = "GID",
  organism = "tcruzi")
## Error: object 'ko_wt_all' not found
length_db <- as.data.frame(rowData(tc_se))
## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'as.data.frame': error in evaluating the argument 'x' in selecting a method for function 'rowData': object 'tc_se' not found
length_db[["gid"]] <- rownames(length_db)
## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'rownames': object 'length_db' not found
length_db <- length_db[, c("gid", "width")]
## Error: object 'length_db' not found
tc_up_gs <- simple_goseq(ko_wt_up, go_db = tc_go, length_db = length_db, min_xref = 10)
## Error: object 'ko_wt_up' not found
mf_enr <- tc_up_gs[["mf_enrich"]]
## Error: object 'tc_up_gs' not found
mf_plots <- plot_enrichresult(mf_enr)
## Error: object 'mf_enr' not found
mf_plots[["tree"]]
## Error: object 'mf_plots' not found
bp_enr <- tc_up_gs[["bp_enrich"]]
## Error: object 'tc_up_gs' not found
bp_plots <- plot_enrichresult(bp_enr)
## Error: object 'bp_enr' not found
bp_plots[["dot"]]
## Error: object 'bp_plots' not found
pander::pander(sessionInfo())
message(paste0("This is hpgltools commit: ", get_git_commit()))
message(paste0("Saving to ", savefile))
tmp <- sm(saveme(filename = savefile))
tmp <- loadme(filename = savefile)
LS0tCnRpdGxlOiAiRXhhbWluaW5nIHNvbWUgY3J1emkgaW5mZWN0ZWQgSGVMYSBjZWxscy4iCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpiaWJsaW9ncmFwaHk6IC9ob21lL3RyZXkvc2NyYXRjaC96b3Rlcm9fbGlicmFyeS9hdGIuYmliCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBmaWdfaGVpZ2h0OiA3CiAgICBmaWdfd2lkdGg6IDcKICAgIGhpZ2hsaWdodDogemVuYnVybgogICAga2VlcF9tZDogZmFsc2UKICAgIG1vZGU6IHNlbGZjb250YWluZWQKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UKLS0tCgoKYGBge3Igb3B0aW9ucywgaW5jbHVkZSA9IEZBTFNFfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGZvcmNhdHMpCmxpYnJhcnkoZ2x1ZSkKbGlicmFyeShocGdsdG9vbHMpCmxpYnJhcnkodGlkeXIpCgpkZXZ0b29sczo6bG9hZF9hbGwoIn4vaHBnbHRvb2xzIikKa25pdHI6Om9wdHNfa25pdCRzZXQocHJvZ3Jlc3MgPSBUUlVFLCB2ZXJib3NlID0gVFJVRSwgd2lkdGggPSA5MCwgZWNobyA9IFRSVUUpCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlcnJvciA9IFRSVUUsIGZpZy53aWR0aCA9IDgsIGZpZy5oZWlnaHQgPSA4LCBmaWcucmV0aW5hID0gMiwKICBvdXQud2lkdGggPSAiMTAwJSIsIGRldiA9ICJwbmciLAogIGRldi5hcmdzID0gbGlzdChwbmcgPSBsaXN0KHR5cGUgPSAiY2Fpcm8tcG5nIikpKQpvbGRfb3B0aW9ucyA8LSBvcHRpb25zKGRpZ2l0cyA9IDQsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwga25pdHIuZHVwbGljYXRlLmxhYmVsID0gImFsbG93IikKZ2dwbG90Mjo6dGhlbWVfc2V0KGdncGxvdDI6OnRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDEyKSkKdmVyIDwtIFN5cy5nZXRlbnYoIlZFUlNJT04iKQpydW5kYXRlIDwtIGZvcm1hdChTeXMuRGF0ZSgpLCBmb3JtYXQgPSAiJVklbSVkIikKCnJtZF9maWxlIDwtICJpbmRleC5SbWQiCnNhdmVmaWxlIDwtIGdzdWIocGF0dGVybiA9ICJcXC5SbWQiLCByZXBsYWNlID0gIlxcLnJkYVxcLnh6IiwgeCA9IHJtZF9maWxlKQptZXRob2RzIDwtIGxpc3QoImJhc2ljIiA9IFRSVUUsICJkZXNlcSIgPSBUUlVFLCAiZHJlYW0iID0gRkFMU0UsCiAgICAgICAgICAgICAgICAiZWJzZXEiID0gRkFMU0UsICJlZGdlciIgPSBUUlVFLCAibGltbWEiID0gVFJVRSwgIm5vaXNlcSIgPSBUUlVFKQpkYXRhX3N0cnVjdHVyZXMgPC0gYygibWV0aG9kcyIpCmBgYAoKIyBJbnRyb2R1Y3Rpb24KCkxldCB1cyBjaGVjayBvdXQgc29tZSBuZXcgY3J1emkgaW5mZWN0aW9ucyBmb2xsb3dpbmcgdGhlIGRlbGV0aW9uIG9mIGEgc3BlY2lmaWMgZ2VuZS4KCkkgdGhvdWdodCBJIGFsc28gZGlkIHRoZSBpbnRlcnJvZ2F0aW9uIG9mIHRoZSBDTEJyZW5lciB0cmFuc2NyaXB0b21lLApidXQgdGhhdCBhcHBlYXJzIHVudHJ1ZS4gIEkgdGhpbmsgSSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gY29weSB0aGUKZ2Vub21lIGluIHBsYWNlLi4uCgojIEh1bWFuIGFubm90YXRpb24gaW5mb3JtYXRpb24KCkkgaGF2ZSBhIHByZXR0eSBuZXcgZ2Vub21lIGRvd25sb2FkZWQgKDIwMjUwOSksIHNvIEkgd2lsbCAoZm9yIG5vdykKanVzdCBsZXQgbXkgYW5ub3RhdGlvbiBmdW5jdGlvbiBncmFiIHdoYXRldmVyIGl0IHRoaW5rcyBpcyByZWFzb25hYmxlLgpJdCBjaG9zZSB0aGUgMjAyNDEwIHNldC4gIFNlZW1zIGdvb2QgdG8gbWUuCgpgYGB7cn0KaHNfYW5ub3QgPC0gbG9hZF9iaW9tYXJ0X2Fubm90YXRpb25zKCkKCnRjX2Fubm90IDwtIGxvYWRfZ2ZmX2Fubm90YXRpb25zKCJ+L2xpYnJhcmllcy9nZW5vbWUvZ2ZmL3RjcnV6aV9hbGwuZ2ZmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJtUk5BIiwgaWRfY29sID0gIlBhcmVudCIpCnJvd25hbWVzKHRjX2Fubm90KSA8LSBnc3ViKHggPSBtYWtlLm5hbWVzKHRjX2Fubm90W1siTmFtZSJdXSwgdW5pcXVlID0gVFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiXFwuXFxkKyQiLCByZXBsYWNlbWVudCA9ICIiKQplc21lcl9kYiA8LSAib3JnLlRjcnV6aS5DTC5CcmVuZXIuRXNtZXJhbGRvLmxpa2UudjY4LmVnLmRiIgpsaWJyYXJ5KGVzbWVyX2RiLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpCmVzbWVyX2RiIDwtIGdldDAoZXNtZXJfZGIpCmFsbF9rZXl0eXBlcyA8LSBrZXl0eXBlcyhlc21lcl9kYikKd2FudGVkX2lkeCA8LSBncmVwbCh4ID0gYWxsX2tleXR5cGVzLCBwYXR0ZXJuID0gIl5BTk5PVF8iKQp3YW50ZWRfZmllbGRzIDwtIGFsbF9rZXl0eXBlc1t3YW50ZWRfaWR4XQpub25lc21lcl9kYiA8LSAib3JnLlRjcnV6aS5DTC5CcmVuZXIuTm9uLkVzbWVyYWxkby5saWtlLnY2OC5lZy5kYiIKdW5hc19kYiA8LSAib3JnLlRjcnV6aS5DTC5CcmVuZXIudjY4LmVnLmRiIgoKdGNfZXNtZXIgPC0gbG9hZF9vcmdkYl9hbm5vdGF0aW9ucyhlc21lcl9kYiwga2V5dHlwZSA9ICJnaWQiLCBmaWVsZHMgPSB3YW50ZWRfZmllbGRzKQp0Y19ub25lc21lciA8LSBsb2FkX29yZ2RiX2Fubm90YXRpb25zKG5vbmVzbWVyX2RiLCBrZXl0eXBlID0gImdpZCIsIGZpZWxkcyA9IHdhbnRlZF9maWVsZHMpCnRjX3VuYXMgPC0gbG9hZF9vcmdkYl9hbm5vdGF0aW9ucyh1bmFzc19kYiwga2V5dHlwZSA9ICJnaWQiLCBmaWVsZHMgPSB3YW50ZWRfZmllbGRzKQp0Y19tb3JlIDwtIHJiaW5kKHRjX2VzbWVyJGdlbmVzLCB0Y19ub25lc21lciRnZW5lcywgdGNfbW9yZSRnZW5lcykKdGNfYW5ub3QgPC0gbWVyZ2UodGNfYW5ub3QsIHRjX21vcmUsIGJ5ID0gInJvdy5uYW1lcyIpCnJvd25hbWVzKHRjX2Fubm90KSA8LSB0Y19hbm5vdFtbImdpZCJdXQp0Y19hbm5vdFtbImdpZCJdXSA8LSBOVUxMCmBgYAoKIyMgTG9hZCBjcnV6aSBHTyBkYXRhIHNpbWlsYXJseQoKYGBge3J9CnRjX2VzbWVyX2dvIDwtIGxvYWRfb3JnZGJfZ28oZXNtZXJfZGIsIGtleXR5cGUgPSAiR0lEIikKdGNfbm9uZXNtZXJfZ28gPC0gbG9hZF9vcmdkYl9nbyhub25lc21lcl9kYiwga2V5dHlwZSA9ICJHSUQiKQp0Y191bmFzX2dvIDwtIGxvYWRfb3JnZGJfZ28odW5hc19kYiwga2V5dHlwZSA9ICJHSUQiKQoKdGNfZ28gPC0gcmJpbmQodGNfZXNtZXJfZ28sIHRjX25vbmVzbWVyX2dvLCB0Y191bmFzX2dvKQp0Y19nbyA8LSB0Y19nb1ssIGMoIkdPIiwgIkdJRCIpXQpjb2xuYW1lcyh0Y19nbykgPC0gYygiR08iLCAiSUQiKQpgYGAKCiMgU2FtcGxlIHNoZWV0CgpJIGFza2VkIGZvciBvbmUgZnJvbSBOYWppYi9BbWFsaWUgYnV0IHVubGVzcyBJIGFtIG1pc3Rha2VuIGl0IGhhcyBub3QKYXJyaXZlZC4gIFRoYXQgaXMgbm90IGEgcHJvYmxlbSwgZ2l2ZW4gdHdvIGhlbHBmdWwgdGhpbmdzOiBBcHJpbApwcm92aWRlcyBvbmUsIEkgYWxzbyBuYW1lZCB0aGUgZGlyZWN0b3JpZXMgc28gdGhhdCB0aGUgc2FtcGxlIElEcyBhcmUKYnVpbHQgaW47IHNvIEkgd2lsbCBqdXN0IG1ha2UgYSBmYWtlIG9uZSBmb3Igbm93IGFuZCB0aGVuIG1lcmdlIGluCndoYXRldmVyIEkgZ2V0IGZyb20gdGhlbS4uLgoKYGBge3J9CnNhbXBsZV9zaGVldCA8LSAic2FtcGxlX3NoZWV0cy9hbGxfc2FtcGxlcy54bHN4IgoKcGxvdF9tZXRhX3NhbmtleShhcy5kYXRhLmZyYW1lKGV4dHJhY3RfbWV0YWRhdGEoc2FtcGxlX3NoZWV0KSksIGZhY3RvcnMgPSBjKCJiYWNrZ3JvdW5kIiwgImV4cF9udW1iZXIiKSkKYGBgCgojIEFkZGluZyBzb21lIG1ldGFkYXRhCgpMZXQgdXMgc2VlIGhvdyB3ZWxsIG15IHByZXByb2Nlc3MgZ2F0aGVyZXIgZG9lcy4uLgoKYGBge3J9Cm5ld19tZXRhIDwtIGdhdGhlcl9wcmVwcm9jZXNzaW5nX21ldGFkYXRhKHNhbXBsZV9zaGVldCwgc3BlY2llcyA9IGMoImhnMzhfMTE1IiwgInRjcnV6aV9hbGwiKSkKaGVhZChuZXdfbWV0YSRuZXdfbWV0YSkKYGBgCgojIFRoZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlCgpgYGB7cn0KaHNfc2UgPC0gY3JlYXRlX3NlKG5ld19tZXRhW1sibmV3X21ldGEiXV0sIGdlbmVfaW5mbyA9IGhzX2Fubm90W1siZ2VuZV9hbm5vdGF0aW9ucyJdXSwKICAgICAgICAgICAgICAgICAgIGZpbGVfY29sdW1uID0gImhpc2F0X2NvdW50X3RhYmxlX2hnMzhfMTE1IikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJiYWNrZ3JvdW5kIikgJT4lCiAgc2V0X2JhdGNoZXMoZmFjdCA9ICJleHBfbnVtYmVyIikKCnRjX3NlIDwtIGNyZWF0ZV9zZShuZXdfbWV0YVtbIm5ld19tZXRhIl1dLCBnZW5lX2luZm8gPSB0Y19hbm5vdCwKICAgICAgICAgICAgICAgICAgIGZpbGVfY29sdW1uID0gImhpc2F0X2NvdW50X3RhYmxlX3RjcnV6aV9hbGwiKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImJhY2tncm91bmQiKSAlPiUKICBzZXRfYmF0Y2hlcyhmYWN0ID0gImV4cF9udW1iZXIiKQoKdGNfc2UgPC0gc3Vic2V0X3NlKHRjX3NlLCBub256ZXJvID0gNTAwMCkKCnBsb3RfbGlic2l6ZShoc19zZSkKcGxvdF9ub256ZXJvKGhzX3NlKQoKcGxvdF9saWJzaXplKHRjX3NlKQpwbG90X25vbnplcm8odGNfc2UpCgpoc19yZXBsaWNhdGVkIDwtIHN1YnNldF9zZShoc19zZSwgbWluX3JlcGxpY2F0ZXMgPSAzLCBmYWN0ID0gImNvbmRpdGlvbiIpCnRjX3JlcGxpY2F0ZWQgPC0gc3Vic2V0X3NlKHRjX3NlLCBtaW5fcmVwbGljYXRlcyA9IDMsIGZhY3QgPSAiY29uZGl0aW9uIikgJT4lCiAgc3Vic2V0X3NlKG5vbnplcm8gPSAxMDAwMCkKYGBgCgojIFNhbXBsZSBjbHVzdGVyaW5nCgojIyBIdW1hbgoKYGBge3J9CmRldnRvb2xzOjpsb2FkX2FsbCgifi9ocGdsdG9vbHMiKQpoc19ub3JtIDwtIG5vcm1hbGl6ZShoc19yZXBsaWNhdGVkLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIGZpbHRlciA9IFRSVUUpCnBsb3RfZGlzaGVhdChoc19ub3JtKQpwbG90X2NvcmhlYXQoaHNfbm9ybSkKcGxvdF9wY2EoaHNfbm9ybSkKCmhzX3Jub3JtIDwtIG5vcm1hbGl6ZShoc19yZXBsaWNhdGVkLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCBmaWx0ZXIgPSBUUlVFKQpwbG90X2Rpc2hlYXQoaHNfcm5vcm0pCnBsb3RfcGNhKGhzX3Jub3JtKQoKaHNfcmJub3JtIDwtIG5vcm1hbGl6ZShoc19yZXBsaWNhdGVkLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBUUlVFLCBiYXRjaCA9ICJzdmFzZXEiKQpwbG90X3BjYShoc19yYm5vcm0pCmBgYAoKIyMgUGFyYXNpdGUKCmBgYHtyfQp0Y19ub3JtIDwtIG5vcm1hbGl6ZSh0Y19yZXBsaWNhdGVkLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIGZpbHRlciA9IFRSVUUpCnBsb3RfZGlzaGVhdCh0Y19ub3JtKQpwbG90X2NvcmhlYXQodGNfbm9ybSkKcGxvdF9wY2EodGNfbm9ybSwgcGxvdF9sYWJlbHMgPSBUUlVFKQoKdGNfcm5vcm0gPC0gbm9ybWFsaXplKHRjX3NlLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCBmaWx0ZXIgPSBUUlVFKQpwbG90X2Rpc2hlYXQodGNfcm5vcm0pCnBsb3RfcGNhKHRjX3Jub3JtKQoKdGNfcmJub3JtIDwtIG5vcm1hbGl6ZSh0Y19zZSwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gVFJVRSwgYmF0Y2ggPSAic3Zhc2VxIikKcGxvdF9wY2EodGNfcmJub3JtKQpgYGAKCiMgREU/CgpJIGFtIG5vdCB0aGlua2luZyB3ZSB3aWxsIHNlZSBtYW55IGdlbmVzIG9mIGludGVyZXN0LgoKYGBge3J9CmhzX2tlZXBlcnMgPC0gbGlzdCgKICAiYWJfdnNfY29udHJvbCIgPSBjKCJBQjEwIiwgImNvbnRyb2wiKSwKICAia29fdnNfY29udHJvbCIgPSBjKCJrbzciLCAiY29udHJvbCIpLAogICJrb192c193dCIgPSBjKCJrbzciLCAid3QiKSwKICAiYWJfdnNfd3QiID0gYygiQUIxMCIsICJ3dCIpLAogICJhYl92c19rbyIgPSBjKCJBQjEwIiwgImtvNyIpKQpoc19kZSA8LSBhbGxfcGFpcndpc2UoaHNfcmVwbGljYXRlZCwgZmlsdGVyID0gVFJVRSwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgbW9kZWxfc3ZzID0gInN2YXNlcSIpCmhzX2RlCmhzX3RhYmxlcyA8LSBjb21iaW5lX2RlX3RhYmxlcyhoc19kZSwga2VlcGVycyA9IGhzX2tlZXBlcnMsIGV4Y2VsID0gImV4Y2VsL2hzX3RhYmxlcy54bHN4IikKaHNfdGFibGVzCmhzX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGhzX3RhYmxlcywgZXhjZWwgPSAiZXhjZWwvaHNfc2lnLnhsc3giKQpoc19zaWcKYGBgCgoKYGBge3J9CmNvbmRpdGlvbnModGNfcmVwbGljYXRlZCkKdGNfa2VlcGVycyA8LSBsaXN0KAogICJhYl92c193dCIgPSBjKCJBQjEwIiwgInd0IiksCiAgImtvX3ZzX3d0IiA9IGMoImtvNyIsICJ3dCIpLAogICJhYl92c19rbyIgPSBjKCJBQjEwIiwgImtvNyIpKQp0Y19kZSA8LSBhbGxfcGFpcndpc2UodGNfcmVwbGljYXRlZCwgZmlsdGVyID0gVFJVRSwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgbW9kZWxfc3ZzID0gInN2YXNlcSIpCnRjX2RlCnRjX3RhYmxlcyA8LSBjb21iaW5lX2RlX3RhYmxlcyh0Y19kZSwga2VlcGVycyA9IHRjX2tlZXBlcnMsIGV4Y2VsID0gImV4Y2VsL3RjX3RhYmxlcy54bHN4IikKdGNfdGFibGVzCnRjX3NpZyA8LSBleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKHRjX3RhYmxlcywgZXhjZWwgPSAiZXhjZWwvdGNfc2lnLnhsc3giKQp0Y19zaWcKYGBgCgojIFRyeSBzb21lIG9udG9sb2d5IHNlYXJjaGluZyB2aWEgY2x1c3RlclByb2ZpbGVyCgoKYGBge3J9CmtvX3d0X3VwIDwtIHRjX3NpZ1tbImRlc2VxIl1dW1sidXBzIl1dW1sia29fdnNfd3QiXV0Ka29fd3RfYWxsIDwtIHRjX3RhYmxlc1tbImRhdGEiXV1bWyJrb192c193dCJdXQoKdGNfZXNtZXJfdXBfY3AgPC0gc2ltcGxlX2NsdXN0ZXJwcm9maWxlcigKICBrb193dF91cCwgZGVfdGFibGUgPSBrb193dF9hbGwsIG9yZ2RiID0gZXNtZXJfZGIsIG9yZ2RiX3RvID0gIkdJRCIsCiAgb3JnYW5pc20gPSAidGNydXppIikKdGNfbm9uZXNtZXJfdXBfY3AgPC0gc2ltcGxlX2NsdXN0ZXJwcm9maWxlcigKICBrb193dF91cCwgZGVfdGFibGUgPSBrb193dF9hbGwsIG9yZ2RiID0gbm9uZXNtZXJfZGIsIG9yZ2RiX3RvID0gIkdJRCIsCiAgb3JnYW5pc20gPSAidGNydXppIikKdGNfdW5hc191cF9jcCA8LSBzaW1wbGVfY2x1c3RlcnByb2ZpbGVyKAogIGtvX3d0X3VwLCBkZV90YWJsZSA9IGtvX3d0X2FsbCwgb3JnZGIgPSB1bmFzX2RiLCBvcmdkYl90byA9ICJHSUQiLAogIG9yZ2FuaXNtID0gInRjcnV6aSIpCgpsZW5ndGhfZGIgPC0gYXMuZGF0YS5mcmFtZShyb3dEYXRhKHRjX3NlKSkKbGVuZ3RoX2RiW1siZ2lkIl1dIDwtIHJvd25hbWVzKGxlbmd0aF9kYikKbGVuZ3RoX2RiIDwtIGxlbmd0aF9kYlssIGMoImdpZCIsICJ3aWR0aCIpXQp0Y191cF9ncyA8LSBzaW1wbGVfZ29zZXEoa29fd3RfdXAsIGdvX2RiID0gdGNfZ28sIGxlbmd0aF9kYiA9IGxlbmd0aF9kYiwgbWluX3hyZWYgPSAxMCkKbWZfZW5yIDwtIHRjX3VwX2dzW1sibWZfZW5yaWNoIl1dCm1mX3Bsb3RzIDwtIHBsb3RfZW5yaWNocmVzdWx0KG1mX2VucikKbWZfcGxvdHNbWyJ0cmVlIl1dCmJwX2VuciA8LSB0Y191cF9nc1tbImJwX2VucmljaCJdXQpicF9wbG90cyA8LSBwbG90X2VucmljaHJlc3VsdChicF9lbnIpCmJwX3Bsb3RzW1siZG90Il1dCmBgYAoKCmBgYHtyIHNhdmVtZSwgZXZhbD1GQUxTRX0KcGFuZGVyOjpwYW5kZXIoc2Vzc2lvbkluZm8oKSkKbWVzc2FnZShwYXN0ZTAoIlRoaXMgaXMgaHBnbHRvb2xzIGNvbW1pdDogIiwgZ2V0X2dpdF9jb21taXQoKSkpCm1lc3NhZ2UocGFzdGUwKCJTYXZpbmcgdG8gIiwgc2F2ZWZpbGUpKQp0bXAgPC0gc20oc2F2ZW1lKGZpbGVuYW1lID0gc2F2ZWZpbGUpKQpgYGAKCmBgYHtyIGxvYWRtZV9hZnRlciwgZXZhbD1GQUxTRX0KdG1wIDwtIGxvYWRtZShmaWxlbmFtZSA9IHNhdmVmaWxlKQpgYGAK