1 TODO

1.1 202602

  1. Create a factor of {detection}_{library_type} so that we have 4 colors to view the clustering of all together.
  2. Create separate blocks for the different library types etc to make it easier to step through.
  3. Explicit kraken2 of nasal and skin samples – potentially use kmcp and/or deBruijn methods

1.2 202511

  1. We have some samples which are defined as persistent via 7SL. Can we see some reads in those samples?
  2. Send file with mapped reads per sample for all human samples.
  3. Queue SL read counter for all human samples.
  4. All samples have nasal, skin, PBMC; all patients are nasal + or nasal -; perform contrasts of nasal+/nasal- of the PBMC samples. For the PBMC samples, recast them as +/-

1.3 202601

  1. 7SL positive vs negative for
  2. Add plot of transcriptome clustering of nasal swabs between nasal positive/negative with the caveat that the are only 2 positives, 8 negatives, and 1 undetermined in the stranded library; the ribozero have 5 positive, 3 negative, and 1 undetermined.
  3. Create a relative abundance of bacteria/viruses observed in the nassal samples; counting at genus.

Note that this requires splitting the data into 4 groups: salmon+rz, salmon+mrna, hisat+rz, hisat+mrna.

2 Changelog

2.1 202511

Following my conversation with Maria Adelaida, I downloaded a new copy of our online sample sheet and made a sub-copy with only the human samples. It is named (creatively) sample_sheets/human_samples_202511.xlsx

3 Introduction

I want to use this document to examine our first round of persistence samples. I checked my email from Najib and did not find a sample sheet but did find an explanation of the three sample types we expect.

In preparation for this, I downloaded a new hg38 genome. Since the panamensis asembly has not significantly changed (excepting the putative long read genome which I have not yet seen), I am just using the same one.

4 Loading annotation

The hg38 genome I got is brand new (202405), so do not use the archive for a while.

## Ok, so useast.ensembl is failing today, let us use the jan2024 archive?
#hs_annot <- load_biomart_annotations(archive = FALSE, species = "hsapiens")
## Seems like the 202401 archive is a good choice, it is explicitly the hg38_111 release.
## and it is waaaaay faster (like 100x) than useast right now.
hs_annot <- load_biomart_annotations(archive = FALSE, species = "hsapiens", overwrite = FALSE,
                                     year = 2025, month = "08")
## The biomart annotations file already exists, loading from it.
panamensis_orgdb_idx <- grep(pattern = "^org.+panamen.+MHOM.+db$", x = rownames(installed.packages()))
panamensis_orgdb <- tail(rownames(installed.packages())[panamensis_orgdb_idx], n = 1)
lp_annot <- load_orgdb_annotations(panamensis_orgdb, keytype = "gid")
## Loading required package: AnnotationDbi
## Loading required package: stats4
## Loading required package: BiocGenerics
## Loading required package: generics
## 
## Attaching package: 'generics'
## The following objects are masked from 'package:base':
## 
##     as.difftime, as.factor, as.ordered, intersect, is.element, setdiff, setequal, union
## 
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:hpgltools':
## 
##     annotation<-, conditions, conditions<-
## 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, is.unsorted,
##     lapply, Map, mapply, match, mget, order, paste, pmax, pmax.int, pmin, pmin.int,
##     Position, rank, rbind, Reduce, rownames, sapply, saveRDS, table, tapply, 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")'.
## 
## Attaching package: 'Biobase'
## The following object is masked from 'package:hpgltools':
## 
##     notes
## Loading required package: IRanges
## Loading required package: S4Vectors
## 
## Attaching package: 'S4Vectors'
## 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:hpgltools':
## 
##     trim
## 
## 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
## 'select()' returned 1:1 mapping between keys and columns

4.1 org.Hs annotations

Recently there have been problems connection to ensembl, I think therefore I want to have fallback annotations using our local dbi annotation databases.

hs_dbi <- load_orgdb_annotations()
## Assuming Homo.sapiens.
## Loading required package: OrganismDbi
## Loading required package: Seqinfo
## Loading required package: GenomicFeatures
## Loading required package: GenomicRanges
## Loading required package: GO.db
## Loading required package: org.Hs.eg.db
## 
## Loading required package: TxDb.Hsapiens.UCSC.hg19.knownGene
## Unable to find GENE_TYPE in the db, removing it.
## Extracted all gene ids.
## Attempting to select: CDSNAME, CDSCHROM, CDSSTRAND, CDSSTART, CDSEND
## 'select()' returned 1:many mapping between keys and columns
## 'select()' returned 1:1 mapping between keys and columns

This is a little silly, but I am going to reload the annotations using the previous invocation to extract the annotation table without having to think. The previous block loads the orgdb for me, so I can just use that to get the fun annotations.

lp_annot <- load_orgdb_annotations(panamensis_orgdb, keytype = "gid", fields = "^annot")
## 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, 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

5 Collect preprocessed metadata

Use my new sample sheet here.

current_samplesheet <- "sample_sheets/human_samples_202511.xlsx"
first_spec <- make_rnaseq_spec()
input <- read_metadata(current_samplesheet)
colnames(input)
##  [1] "seq"                                         "hpgl_identifier"                            
##  [3] "aim"                                         "participant_code"                           
##  [5] "sample_type"                                 "tube_label_origin"                          
##  [7] "number_of_vials"                             "sample_collection_date"                     
##  [9] "exp_person"                                  "clinical_presentation"                      
## [11] "parasite"                                    "prior_host_hpgl_code"                       
## [13] "prior_parasite_hpgl_code"                    "initial_recurrent"                          
## [15] "drug_susceptibility_perc_reduction_gluc"     "drug_susceptibility_perc_reduction_mlf"     
## [17] "zymodeme_by_electrophoresis"                 "zymodeme_by_pca"                            
## [19] "rna_extraction_date"                         "rna_volume_ul"                              
## [21] "rna_qc_date"                                 "rna_nanodrop_ng_ul"                         
## [23] "X260_280_ratio"                              "X260_230_ratio"                             
## [25] "rna_bioanalyzer_or_qubit_ng_ul"              "rin"                                        
## [27] "rna_qc_passed"                               "library_type"                               
## [29] "library_version"                             "library_name"                               
## [31] "library_const_date"                          "rna_used_to_construct_libraries_ul"         
## [33] "rna_used_to_construct_libraries_ng"          "library_qc_date"                            
## [35] "lib_qc_passed"                               "library_volume_ul"                          
## [37] "unique_dual_index_set"                       "unique_dual_index_plate_coordinate"         
## [39] "unique_dual_index_id"                        "concentrations_determined_by_1"             
## [41] "primer_conc_ng_ul_30100bp_region_1"          "adapter_dimer_conc_ng_ul_100200bp_region_1" 
## [43] "library_conc_ng_ul_2001000bp_region_1"       "library_molarity_nm_2001000bp_region_1"     
## [45] "library_ave_frag_size_bp_2001000bp_region_1" "calculated_adapter_dimer_percent_1"         
## [47] "concentrations_determined_by_2"              "primer_conc_ng_ul_30100bp_region_2"         
## [49] "adapter_dimer_conc_ng_ul_100200bp_region_2"  "library_conc_ng_ul_2001000bp_region_2"      
## [51] "library_molarity_nm_2001000bp_region_2"      "library_ave_frag_size_bp_2001000bp_region_2"
## [53] "calculated_adapter_dimer_percent_2"          "library_volume_ul_sent_to_umd"              
## [55] "shipment_date"                               "bbiagtc_date_received"                      
## [57] "bbiagtc_library_cleanup"                     "bbiagtc_date_sequenced"                     
## [59] "bbiagtc_sequence_batch"                      "bbiagtc_pe_reads_pf"                        
## [61] "bbiagtc_fastp_duplication_rate"              "hisat2inputreads"                           
## [63] "lpsingleconaligned"                          "hg38singleconaligned"                       
## [65] "lpmulticonaligned"                           "hg38multiconaligned"                        
## [67] "lpsingleallaligned"                          "hg38singleallaligned"                       
## [69] "lpmultiallaligned"                           "hg38multiallaligned"                        
## [71] "lppercentmappedfromlog"                      "hg38percentmappedfromlog"                   
## [73] "lphisatobservedcds"                          "hg38hisatobservedcds"                       
## [75] "krakenmatrix"                                "lphisatgenematrix"                          
## [77] "hg38hisatgenematrix"                         "lpsalmontranscriptmatrix"                   
## [79] "hg38salmontranscriptmatrix"                  "detectionparasiteby7sl"                     
## [81] "detectionparasiteby18s"                      "detectionparasitebykdnasec"                 
## [83] "metabolomicnasalswaborplasma"                "immunophenotypingnasalswaborpbmcs"
summary(as.factor(input[["detectionparasiteby7sl"]]))
## negative positive     NA's 
##       63       11       30
pre_meta <- gather_preprocessing_metadata(
  starting_metadata = current_samplesheet, id_column = "hpgl_identifier",
  specification = first_spec, new_metadata = "persistence_hu_modified.xlsx",
  basedir = "preprocessing", species = c("hg38_115", "lpanamensis_mhomcol_v68"))
## Dropped 1 rows from the sample metadata because the sample ID is blank.
## 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 in dispatch_regex_search(meta, search, replace, input_file_spec, : NAs introduced by
## coercion
## Warning in dispatch_regex_search(meta, search, replace, input_file_spec, : NAs introduced by
## coercion
## Writing new metadata to: persistence_hu_modified.xlsx
## Deleting the file persistence_hu_modified.xlsx before writing the tables.
summary(as.factor(pre_meta[["new_meta"]][["detectionparasiteby7sl"]]))
## negative positive     NA's 
##       63       11       29
modified_meta <- pre_meta[["new_meta"]]
## Added the following line to gather_preprocessing_metadata()
rownames(modified_meta) <- make.names(modified_meta[["hpgl_identifier"]], unique = TRUE)

## FIXME: 202511: I broke something in some of these functions and it is pulling
## the wrong information for number of observed genes.
head(modified_meta)
##          seq hpgl_identifier  aim participant_code sample_type tube_label_origin number_of_vials
## PRHU0001   1        PRHU0001 aim1           PP1006       PBMCs      PP1006 PBMCs               1
## PRHU0002   2        PRHU0002 aim1           PP2001  nasal swab         PP2001 HN               1
## PRHU0009   4        PRHU0009 aim1           PP2003       PBMCs      PP2003 PBMCs               1
## PRHU0010   5        PRHU0010 aim1           PP2004       PBMCs      PP2004 PBMCs               1
## PRHU0011   6        PRHU0011 aim1           PP2005       PBMCs      PP2005 PBMCs               1
## PRHU0018   7        PRHU0018 aim1           PP2003        WBCs       PP2003 WBCs               1
##          sample_collection_date exp_person clinical_presentation            prior_host_hpgl_code
## PRHU0001             2024-01-29         LG                    HD                            <NA>
## PRHU0002             2024-02-05         LG                    HD                            <NA>
## PRHU0009                   <NA>         LG                  H-CL TMRC30130; TMRC30124; TMRC30131
## PRHU0010             2024-04-05         LG                  H-CL                            <NA>
## PRHU0011             2024-04-12         LG                  H-CL                            <NA>
## PRHU0018             2024-03-22         LG                  H-CL TMRC30130; TMRC30124; TMRC30131
##          rna_extraction_date rna_volume_ul rna_qc_date rna_nanodrop_ng_ul X260_280_ratio
## PRHU0001          2024-01-31            25  2024-02-15             338.43           2.04
## PRHU0002          2024-02-14            25  2024-02-15              84.82           2.08
## PRHU0009          2024-05-06            25  2024-05-06              115.1           1.99
## PRHU0010          2024-05-06            25  2024-05-06             185.28           2.03
## PRHU0011          2024-05-06            25  2024-05-06              70.12           1.95
## PRHU0018          2024-03-22            30  2024-05-02              49.55           2.06
##          X260_230_ratio rna_bioanalyzer_or_qubit_ng_ul rin rna_qc_passed library_type
## PRHU0001           1.73                            407  NA           yes         mRNA
## PRHU0002           1.97                            101  NA           yes         mRNA
## PRHU0009           1.34                            167 8.0           yes         mRNA
## PRHU0010           1.91                            264 8.5           yes         mRNA
## PRHU0011           0.85                            113 8.7           yes         mRNA
## PRHU0018           1.56                             70 9.1           yes         mRNA
##          library_version             library_name library_const_date
## PRHU0001               1      PP1006.PBMCs.mRNA.1         2024-02-09
## PRHU0002               1 PP2001.nasal swab.mRNA.1         2024-02-15
## PRHU0009               1      PP2003.PBMCs.mRNA.1         2024-06-05
## PRHU0010               1      PP2004.PBMCs.mRNA.1         2024-06-05
## PRHU0011               1      PP2005.PBMCs.mRNA.1         2024-06-05
## PRHU0018               1       PP2003.WBCs.mRNA.1         2024-06-05
##          rna_used_to_construct_libraries_ul rna_used_to_construct_libraries_ng library_qc_date
## PRHU0001                               1.48                                500      2024-02-12
## PRHU0002                               3.54                                300      2024-02-16
## PRHU0009                               1.79                                300      2024-06-11
## PRHU0010                               1.14                                300      2024-06-11
## PRHU0011                               2.65                                300      2024-06-11
## PRHU0018                               4.29                                300      2024-06-11
##          lib_qc_passed library_volume_ul                 unique_dual_index_set
## PRHU0001           yes                15 IDT for Illumina RNA UD Indexes Set A
## PRHU0002           yes                15 IDT for Illumina RNA UD Indexes Set A
## PRHU0009           yes                15 IDT for Illumina RNA UD Indexes Set A
## PRHU0010           yes                15 IDT for Illumina RNA UD Indexes Set A
## PRHU0011           yes                15 IDT for Illumina RNA UD Indexes Set A
## PRHU0018           yes                15 IDT for Illumina RNA UD Indexes Set A
##          unique_dual_index_plate_coordinate unique_dual_index_id concentrations_determined_by_1
## PRHU0001                                C04              UDP0027                    TapeStation
## PRHU0002                                F04              UDP0030                    TapeStation
## PRHU0009                                B05              UDP0034                    Bioanalyzer
## PRHU0010                                C05              UDP0035                    Bioanalyzer
## PRHU0011                                D05              UDP0036                    Bioanalyzer
## PRHU0018                                E05              UDP0037                    Bioanalyzer
##          primer_conc_ng_ul_30100bp_region_1 adapter_dimer_conc_ng_ul_100200bp_region_1
## PRHU0001                                  -                                          -
## PRHU0002                                  -                                          -
## PRHU0009                               0.49                                       0.27
## PRHU0010                               0.58                                       0.35
## PRHU0011                                0.7                                       0.27
## PRHU0018                               0.58                                       0.12
##          library_conc_ng_ul_2001000bp_region_1 library_molarity_nm_2001000bp_region_1
## PRHU0001                                 69.50                                  321.0
## PRHU0002                                 17.50                                   82.3
## PRHU0009                                 60.64                                  293.3
## PRHU0010                                 64.84                                  314.0
## PRHU0011                                 56.86                                  279.9
## PRHU0018                                 85.33                                  421.9
##          library_ave_frag_size_bp_2001000bp_region_1 calculated_adapter_dimer_percent_1
## PRHU0001                                         353                                  0
## PRHU0002                                         345                                  0
## PRHU0009                                         336                0.00445250659630607
## PRHU0010                                         340                 0.0053979025293029
## PRHU0011                                         330                0.00474850510024622
## PRHU0018                                         328                0.00140630493378648
##          concentrations_determined_by_2 primer_conc_ng_ul_30100bp_region_2
## PRHU0001                           <NA>                               <NA>
## PRHU0002                           <NA>                               <NA>
## PRHU0009                           <NA>                               <NA>
## PRHU0010                           <NA>                               <NA>
## PRHU0011                           <NA>                               <NA>
## PRHU0018                           <NA>                               <NA>
##          adapter_dimer_conc_ng_ul_100200bp_region_2 library_conc_ng_ul_2001000bp_region_2
## PRHU0001                                       <NA>                                    NA
## PRHU0002                                       <NA>                                    NA
## PRHU0009                                       <NA>                                    NA
## PRHU0010                                       <NA>                                    NA
## PRHU0011                                       <NA>                                    NA
## PRHU0018                                       <NA>                                    NA
##          library_molarity_nm_2001000bp_region_2 library_ave_frag_size_bp_2001000bp_region_2
## PRHU0001                                     NA                                          NA
## PRHU0002                                     NA                                          NA
## PRHU0009                                     NA                                          NA
## PRHU0010                                     NA                                          NA
## PRHU0011                                     NA                                          NA
## PRHU0018                                     NA                                          NA
##          calculated_adapter_dimer_percent_2 library_volume_ul_sent_to_umd shipment_date
## PRHU0001                                 NA                            14    2024-02-20
## PRHU0002                                 NA                            14    2024-02-20
## PRHU0009                                 NA                            14    2024-08-26
## PRHU0010                                 NA                            14    2024-08-26
## PRHU0011                                 NA                            14    2024-08-26
## PRHU0018                                 NA                            14    2024-08-26
##          bbiagtc_date_received bbiagtc_library_cleanup bbiagtc_date_sequenced
## PRHU0001            2024-04-05              not needed             2024-05-03
## PRHU0002            2024-04-05              not needed             2024-05-03
## PRHU0009            2024-11-05              not needed             2024-11-08
## PRHU0010            2024-11-05                     yes             2024-11-08
## PRHU0011            2024-11-05              not needed             2024-11-08
## PRHU0018            2024-11-05              not needed             2024-11-08
##          bbiagtc_sequence_batch bbiagtc_pe_reads_pf bbiagtc_fastp_duplication_rate
## PRHU0001                PERS001            13167287                           13.9
## PRHU0002                PERS001             9815642                           18.4
## PRHU0009                PERS002            23614271                           19.9
## PRHU0010                PERS002            22777166                           16.9
## PRHU0011                PERS002            23458700                           20.4
## PRHU0018                PERS002            20907177                           16.6
##          detectionparasiteby7sl detectionparasiteby18s detectionparasitebykdnasec
## PRHU0001                   <NA>                   <NA>                       <NA>
## PRHU0002                   <NA>                   <NA>                       <NA>
## PRHU0009                   <NA>                   <NA>                       <NA>
## PRHU0010                   <NA>                   <NA>                       <NA>
## PRHU0011                   <NA>                   <NA>                       <NA>
## PRHU0018               positive               positive                       <NA>
##          metabolomicnasalswaborplasma immunophenotypingnasalswaborpbmcs condition     batch
## PRHU0001                         <NA>                              <NA> undefined undefined
## PRHU0002                         <NA>                              <NA> undefined undefined
## PRHU0009                          yes                              <NA> undefined undefined
## PRHU0010                          yes                              <NA> undefined undefined
## PRHU0011                          yes                              <NA> undefined undefined
## PRHU0018                          yes                              <NA> undefined undefined
##          sampleid trimomatic_input trimomatic_output trimomatic_percent fastqc_pct_gc
## PRHU0001 PRHU0001         13167287          12085247              0.918            49
## PRHU0002 PRHU0002               NA                NA                 NA            50
## PRHU0009 PRHU0009         23614271          22272928              0.943            51
## PRHU0010 PRHU0010         22777166          21621102              0.949            51
## PRHU0011 PRHU0011         23458700          22252717              0.949            51
## PRHU0018 PRHU0018         20907177          19815284              0.948            52
##          kraken_bacterial_classified kraken_bacterial_unclassified kraken_first_bacterial_species
## PRHU0001                      418110                      11667137          Staphylococcus aureus
## PRHU0002                      324998                       8681618         Bacillus thuringiensis
## PRHU0009                       86840                        866454        Porphyrobacter sp. GA68
## PRHU0010                       76438                       1056370          Klebsiella pneumoniae
## PRHU0011                       70332                        803596          Klebsiella pneumoniae
## PRHU0018                       46603                        619808            Priestia megaterium
##          kraken_first_bacterial_species_reads kraken_viral_classified kraken_viral_unclassified
## PRHU0001                               117628                   58135                  12027112
## PRHU0002                                48125                   43789                   8962827
## PRHU0009                                11937                  197113                  22075815
## PRHU0010                                 7070                  132560                  21488542
## PRHU0011                                 6002                  204047                  22048670
## PRHU0018                                 7831                  108172                  19707112
##          kraken_first_viral_species kraken_first_viral_species_reads
## PRHU0001      Proteus virus Isfahan                            35851
## PRHU0002      Proteus virus Isfahan                            28527
## PRHU0009      Proteus virus Isfahan                           146195
## PRHU0010      Proteus virus Isfahan                            90884
## PRHU0011      Proteus virus Isfahan                           160954
## PRHU0018      Proteus virus Isfahan                            74208
##                                                                   kraken_matrix_viral
## PRHU0001 preprocessing/PRHU0001/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## PRHU0002 preprocessing/PRHU0002/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## PRHU0009 preprocessing/PRHU0009/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## PRHU0010 preprocessing/PRHU0010/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## PRHU0011 preprocessing/PRHU0011/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## PRHU0018 preprocessing/PRHU0018/outputs/20250918kraken_viral/kraken_report_matrix.tsv
##                                                            kraken_matrix_bacterial
## PRHU0001 preprocessing/PRHU0001/outputs/02kraken_bacteria/kraken_report_matrix.tsv
## PRHU0002 preprocessing/PRHU0002/outputs/02kraken_bacteria/kraken_report_matrix.tsv
## PRHU0009 preprocessing/PRHU0009/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## PRHU0010 preprocessing/PRHU0010/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## PRHU0011 preprocessing/PRHU0011/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## PRHU0018 preprocessing/PRHU0018/outputs/06kraken_bacteria/kraken_report_matrix.tsv
##          hisat_rrna_input_reads_hg38_115 hisat_rrna_input_reads_lpanamensis_mhomcol_v68
## PRHU0001                        12085247                                             NA
## PRHU0002                         9006616                                             NA
## PRHU0009                        22272928                                             NA
## PRHU0010                        21621102                                             NA
## PRHU0011                        22252717                                             NA
## PRHU0018                        19815284                                             NA
##          hisat_rrna_single_concordant_hg38_115
## PRHU0001                                 73426
## PRHU0002                                 80682
## PRHU0009                                408744
## PRHU0010                                149371
## PRHU0011                                200482
## PRHU0018                                117268
##          hisat_rrna_single_concordant_lpanamensis_mhomcol_v68
## PRHU0001                                                   NA
## PRHU0002                                                   NA
## PRHU0009                                                   NA
## PRHU0010                                                   NA
## PRHU0011                                                   NA
## PRHU0018                                                   NA
##          hisat_rrna_multi_concordant_hg38_115 hisat_rrna_multi_concordant_lpanamensis_mhomcol_v68
## PRHU0001                                    0                                                  NA
## PRHU0002                                    3                                                  NA
## PRHU0009                                   40                                                  NA
## PRHU0010                                    6                                                  NA
## PRHU0011                                    1                                                  NA
## PRHU0018                                    3                                                  NA
##          hisat_rrna_percent_log_hg38_115 hisat_rrna_percent_log_lpanamensis_mhomcol_v68
## PRHU0001                            0.63                                             NA
## PRHU0002                            0.94                                             NA
## PRHU0009                            1.93                                             NA
## PRHU0010                            0.73                                             NA
## PRHU0011                            0.94                                             NA
## PRHU0018                            0.62                                             NA
##          hisat_genome_input_reads_hg38_115 hisat_genome_input_reads_lpanamensis_mhomcol_v68
## PRHU0001                          12085247                                         12085247
## PRHU0002                           9006616                                          9006616
## PRHU0009                          22272928                                         22272928
## PRHU0010                          21621102                                         21621102
## PRHU0011                          22252717                                         22252717
## PRHU0018                          19815284                                         19815284
##          hisat_genome_single_concordant_hg38_115
## PRHU0001                                11027565
## PRHU0002                                 8119315
## PRHU0009                                19763135
## PRHU0010                                19276929
## PRHU0011                                19973324
## PRHU0018                                18103721
##          hisat_genome_single_concordant_lpanamensis_mhomcol_v68
## PRHU0001                                                    838
## PRHU0002                                                    760
## PRHU0009                                                   1382
## PRHU0010                                                    559
## PRHU0011                                                    662
## PRHU0018                                                    415
##          hisat_genome_multi_concordant_hg38_115
## PRHU0001                                 621289
## PRHU0002                                 505363
## PRHU0009                                1516414
## PRHU0010                                1171082
## PRHU0011                                1356659
## PRHU0018                                1010925
##          hisat_genome_multi_concordant_lpanamensis_mhomcol_v68 hisat_genome_single_all_hg38_115
## PRHU0001                                                    99                           365382
## PRHU0002                                                   102                           282669
## PRHU0009                                                   102                           790119
## PRHU0010                                                    96                           920497
## PRHU0011                                                    82                           758139
## PRHU0018                                                    62                           536623
##          hisat_genome_single_all_lpanamensis_mhomcol_v68 hisat_genome_multi_all_hg38_115
## PRHU0001                                           14329                           84362
## PRHU0002                                           13432                           71982
## PRHU0009                                           22507                          235198
## PRHU0010                                           10941                          242320
## PRHU0011                                           12590                          206128
## PRHU0018                                            8241                          133869
##          hisat_genome_multi_all_lpanamensis_mhomcol_v68 hisat_unmapped_hg38_115
## PRHU0001                                           6702                   36996
## PRHU0002                                           7507                  131347
## PRHU0009                                          17740                  220613
## PRHU0010                                          12474                  189403
## PRHU0011                                          13330                  233569
## PRHU0018                                           9468                  177472
##          hisat_unmapped_lpanamensis_mhomcol_v68 hisat_genome_percent_log_hg38_115
## PRHU0001                               24147571                             99.85
## PRHU0002                               17990551                             99.27
## PRHU0009                               44502561                             99.50
## PRHU0010                               43217431                             99.56
## PRHU0011                               44477964                             99.48
## PRHU0018                               39611887                             99.55
##          hisat_genome_percent_log_lpanamensis_mhomcol_v68
## PRHU0001                                             0.09
## PRHU0002                                             0.13
## PRHU0009                                             0.10
## PRHU0010                                             0.06
## PRHU0011                                             0.06
## PRHU0018                                             0.05
##                                                           hisat_alignment_hg38_115
## PRHU0001 preprocessing/PRHU0001/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0002 preprocessing/PRHU0002/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0009 preprocessing/PRHU0009/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0010 preprocessing/PRHU0010/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0011 preprocessing/PRHU0011/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
## PRHU0018 preprocessing/PRHU0018/outputs/20250918hisat_hg38_115/hg38_115_genome.bam
##                                                                          hisat_alignment_lpanamensis_mhomcol_v68
## PRHU0001 preprocessing/PRHU0001/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam
## PRHU0002 preprocessing/PRHU0002/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam
## PRHU0009 preprocessing/PRHU0009/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam
## PRHU0010 preprocessing/PRHU0010/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam
## PRHU0011 preprocessing/PRHU0011/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam
## PRHU0018 preprocessing/PRHU0018/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome.bam
##          salmon_mapped_hg38_115 salmon_mapped_lpanamensis_mhomcol_v68 salmon_percent_hg38_115
## PRHU0001                     NA                                   228                   54.62
## PRHU0002                     NA                                    NA                   61.09
## PRHU0009                     NA                                   514                   53.76
## PRHU0010                     NA                                   532                   55.29
## PRHU0011                     NA                                   564                   56.48
## PRHU0018                     NA                                   411                   57.38
##          salmon_percent_lpanamensis_mhomcol_v68 salmon_observed_genes_hg38_115
## PRHU0001                               0.001887                          40892
## PRHU0002                               0.023971                          37639
## PRHU0009                               0.002308                          47176
## PRHU0010                               0.002461                          47162
## PRHU0011                               0.002535                          46983
## PRHU0018                               0.002074                          43731
##          salmon_observed_genes_lpanamensis_mhomcol_v68                                 input_r1
## PRHU0001                                            12 unprocessed/PRHU0001_S49_R1_001.fastq.gz
## PRHU0002                                            12                                         
## PRHU0009                                            14  unprocessed/PRHU0009_S7_R1_001.fastq.gz
## PRHU0010                                            13  unprocessed/PRHU0010_S8_R1_001.fastq.gz
## PRHU0011                                            15  unprocessed/PRHU0011_S9_R1_001.fastq.gz
## PRHU0018                                            14 unprocessed/PRHU0018_S16_R1_001.fastq.gz
##                                          input_r2
## PRHU0001 unprocessed/PRHU0001_S49_R2_001.fastq.gz
## PRHU0002                                         
## PRHU0009  unprocessed/PRHU0009_S7_R2_001.fastq.gz
## PRHU0010  unprocessed/PRHU0010_S8_R2_001.fastq.gz
## PRHU0011  unprocessed/PRHU0011_S9_R2_001.fastq.gz
## PRHU0018 unprocessed/PRHU0018_S16_R2_001.fastq.gz
##                                                                                      hisat_count_table_hg38_115
## PRHU0001 preprocessing/PRHU0001/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz
## PRHU0002 preprocessing/PRHU0002/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz
## PRHU0009 preprocessing/PRHU0009/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz
## PRHU0010 preprocessing/PRHU0010/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz
## PRHU0011 preprocessing/PRHU0011/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz
## PRHU0018 preprocessing/PRHU0018/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz
##                                                                                                                    hisat_count_table_lpanamensis_mhomcol_v68
## PRHU0001 preprocessing/PRHU0001/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome-paired_s2_protein_coding_gene_ID_fcounts.csv.xz
## PRHU0002 preprocessing/PRHU0002/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome-paired_s2_protein_coding_gene_ID_fcounts.csv.xz
## PRHU0009 preprocessing/PRHU0009/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome-paired_s2_protein_coding_gene_ID_fcounts.csv.xz
## PRHU0010 preprocessing/PRHU0010/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome-paired_s2_protein_coding_gene_ID_fcounts.csv.xz
## PRHU0011 preprocessing/PRHU0011/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome-paired_s2_protein_coding_gene_ID_fcounts.csv.xz
## PRHU0018 preprocessing/PRHU0018/outputs/20250918hisat_lpanamensis_mhomcol_v68/lpanamensis_mhomcol_v68_genome-paired_s2_protein_coding_gene_ID_fcounts.csv.xz
##                                            salmon_count_table_hg38_115
## PRHU0001 preprocessing/PRHU0001/outputs/80salmon_hg38_115_CDS/quant.sf
## PRHU0002 preprocessing/PRHU0002/outputs/80salmon_hg38_115_CDS/quant.sf
## PRHU0009 preprocessing/PRHU0009/outputs/80salmon_hg38_115_CDS/quant.sf
## PRHU0010 preprocessing/PRHU0010/outputs/80salmon_hg38_115_CDS/quant.sf
## PRHU0011 preprocessing/PRHU0011/outputs/80salmon_hg38_115_CDS/quant.sf
## PRHU0018 preprocessing/PRHU0018/outputs/80salmon_hg38_115_CDS/quant.sf
##                                                  salmon_count_table_lpanamensis_mhomcol_v68
## PRHU0001 preprocessing/PRHU0001/outputs/20250918salmon_lpanamensis_mhomcol_v68_CDS/quant.sf
## PRHU0002 preprocessing/PRHU0002/outputs/20250918salmon_lpanamensis_mhomcol_v68_CDS/quant.sf
## PRHU0009 preprocessing/PRHU0009/outputs/20250918salmon_lpanamensis_mhomcol_v68_CDS/quant.sf
## PRHU0010 preprocessing/PRHU0010/outputs/20250918salmon_lpanamensis_mhomcol_v68_CDS/quant.sf
## PRHU0011 preprocessing/PRHU0011/outputs/20250918salmon_lpanamensis_mhomcol_v68_CDS/quant.sf
## PRHU0018 preprocessing/PRHU0018/outputs/20250918salmon_lpanamensis_mhomcol_v68_CDS/quant.sf
head(modified_meta[["salmon_observed_genes_hg38_115"]])
## [1] 40892 37639 47176 47162 46983 43731
summary(as.factor(modified_meta[["detectionparasiteby7sl"]]))
## negative positive     NA's 
##       63       11       29
modified_meta[["detectionparasiteby7sl"]] <- sanitize_metadata(modified_meta[["detectionparasiteby7sl"]])
summary(modified_meta[["detectionparasiteby7sl"]])
##      negative notapplicable      positive 
##            63            29            11

Create a factor of the 7SL detection of nasal samples. Note, we need to recast the NAs as undefined. I would have sworn that my gather function would do that?

modified_meta[["nasal_7sl_status"]] <- modified_meta[["detectionparasiteby7sl"]]

nasal_samples <- modified_meta[["sample_type"]] == "nasal swab"
summary(nasal_samples)
##    Mode   FALSE    TRUE 
## logical      83      20
sl_positive <- modified_meta[["nasal_7sl_status"]] == "positive"
summary(sl_positive)
##    Mode   FALSE    TRUE 
## logical      92      11
nasal_positive <- nasal_samples & sl_positive
summary(nasal_positive)
##    Mode   FALSE    TRUE 
## logical      96       7
nasal_positive_samples <- rownames(modified_meta)[nasal_positive]
nasal_positive_people <- modified_meta[nasal_positive_samples, "participant_code"]
nasal_positive_people
## [1] "PP1009" "PP2020" "PP1009" "PP2005" "PP2006" "PP2019" "PP2020"
nasal_positive_people_samples <- modified_meta[["participant_code"]] %in% nasal_positive_people
modified_meta[["nasal_7sl_status"]] <- "negative"
modified_meta[nasal_positive_people_samples, "nasal_7sl_status"] <- "positive"
modified_meta[["nasal_7sl_status"]] <- as.factor(modified_meta[["nasal_7sl_status"]])
summary(modified_meta[["nasal_7sl_status"]])
## negative positive 
##       84       19

5.1 Add combination of detection and library type

Also add a category separating all skin samples from everything else.

modified_meta[["detection_type"]] <- as.factor(paste0(modified_meta[["detectionparasiteby7sl"]], "_",
                                                      modified_meta[["library_type"]]))

summary(modified_meta[["detection_type"]])
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                 57                  6                 28                  1                  6 
##        positive_RZ 
##                  5
modified_meta[["skinp"]] <- "not_skin"
skin_idx <- grepl(x = modified_meta[["sample_type"]], pattern = "^skin")
summary(skin_idx)
##    Mode   FALSE    TRUE 
## logical      68      35
modified_meta[skin_idx, "skinp"] <- "skin"
modified_meta[["skinp"]] <- as.factor(modified_meta[["skinp"]])
hisat_idx <- grep(pattern = "^hisat", x = names(first_spec))
second_spec <- first_spec[hisat_idx]
post_meta <- gather_preprocessing_metadata(
  starting_metadata = pre_meta[["new_meta"]],
  specification = second_spec, basedir = "preprocessing/202405", species = "hg38_111",
  new_metadata = "sample_sheets/tmrc2_persistence_202405_lp_hg.xlsx")

both_meta <- gather_preprocessing_metadata(
  starting_metadata = "sample_sheets/tmrc_persistence_202405.xlsx",
  specification = first_spec,
  basedir = "preprocessing/202405", species= c("lpanamensis_v68", "hg38_111"),
  new_metadata = "sample_sheets/tmrc_persistence_202405_both.xlsx")

6 Collect gene annotations

I should have all my load_xyz_annotation functions return some of the same elements in their retlists.

lp_genes <- lp_annot[["genes"]]
hg_genes <- hs_annot[["gene_annotations"]]

7 Quick peek at the SL samples, hg38 release 115

7.1 Gather the transcript and gene annotations.

hg_tx <- hs_annot[["annotation"]]
hg_map <- hs_annot[["gene_tx_map"]]
lp_genes <- lp_annot[["genes"]]

7.2 Create initial hisat/salmon tables

hu_se_salmon <- create_se(modified_meta, gene_info = hg_tx,
                          tx_gene_map = hg_map, file_column = "salmon_count_table_hg38_115") %>%
  set_conditions(fact = "sample_type") %>%
  set_batches(fact = "library_type")
## Reading the sample metadata.
## Checking the state of the condition column.
## Checking the state of the batch column.
## Checking the condition factor.
## The sample definitions comprises: 103 rows(samples) and 110 columns(metadata fields).
## In some cases, (notably salmon) the format of the IDs used by this can be tricky.
## It is likely to require the transcript ID followed by a '.' and the ensembl column:
## 'transcript_version', which is explicitly different than the gene version column.
## If this is not correctly performed, very few genes will be observed
## Rewriting the transcript<->gene map to remove tx versions.
## reading in files with read_tsv
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 
## transcripts missing from tx2gene: 147702
## summarizing abundance
## summarizing counts
## summarizing length
## Matched 14414 annotations and counts.
## Saving the summarized experiment to 'se.rda'.
## The final summarized experiment has 14414 rows and 110 columns.
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
## The number of samples by batch are:
## 
## mRNA   RZ 
##   91   12
hu_se_hisat_gene <- create_se(modified_meta, gene_info = hg_genes,
                              file_column = "hisat_count_table_hg38_115") %>%
  set_conditions(fact = "sample_type") %>%
  set_batches(fact = "library_type")
## Reading the sample metadata.
## Checking the state of the condition column.
## Checking the state of the batch column.
## Checking the condition factor.
## The sample definitions comprises: 103 rows(samples) and 110 columns(metadata fields).
## Matched 21571 annotations and counts.
## Some annotations were lost in merging, setting them to 'undefined'.
## Saving the summarized experiment to 'se.rda'.
## The final summarized experiment has 21571 rows and 110 columns.
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
## The number of samples by batch are:
## 
## mRNA   RZ 
##   91   12

7.3 Figure out which samples do not have 7SL categories

undef_7sl <- is.na(colData(hu_se_salmon)[["detectionparasiteby7sl"]])
colData(hu_se_salmon)[undef_7sl, "detectionparasiteby7sl"] <- "unknown"
colData(hu_se_hisat_gene)[undef_7sl, "detectionparasiteby7sl"] <- "unknown"
sample_7sl <- paste0(colData(hu_se_salmon)[["sample_type"]], "_",
                     colData(hu_se_salmon)[["detectionparasiteby7sl"]])
sample_7sl <- gsub(x = sample_7sl, pattern = "[[:space:]]", replacement = "_")
colData(hu_se_salmon)[["sample_7sl"]] <- sample_7sl
colData(hu_se_hisat_gene)[["sample_7sl"]] <- sample_7sl

7.4 Healthy vs scar samples

healthy_vs_scar <- gsub(x = colData(hu_se_salmon)[["sample_type"]],
                        pattern = "^skin biopsy ", replacement = "")
colData(hu_se_salmon)[["hs"]] <- healthy_vs_scar
colData(hu_se_hisat_gene)[["hs"]] <- healthy_vs_scar

7.5 Clean up missing 7SL detection samples

I think the last of these has been fixed since the last time I updated this sheet.

undef_7sl <- is.na(colData(hu_se_hisat_gene)[["detectionparasiteby7sl"]])
summary(undef_7sl)
##    Mode   FALSE 
## logical     103
if (sum(undef_7sl)) {
  colData(hu_se_salmon)[undef_7sl, "detectionparasiteby7sl"] <- "unknown"
  colData(hu_se_hisat_gene)[undef_7sl, "detectionparasiteby7sl"] <- "unknown"
} else {
  message("There appear to be no missing 7SL entries.")
}
## There appear to be no missing 7SL entries.

7.7 Combine 7SL status and the sample type into one factor

sample_7sl <- as.factor(paste0(colData(hu_se_hisat_gene)[["sample_type"]], "_",
                               colData(hu_se_hisat_gene)[["detectionparasiteby7sl"]]))
summary(sample_7sl)
##               nasal swab_negative          nasal swab_notapplicable 
##                                11                                 2 
##               nasal swab_positive               PBMCs_notapplicable 
##                                 7                                25 
##      skin biopsy healthy_negative skin biopsy healthy_notapplicable 
##                                14                                 1 
##   skin biopsy non-lesion_negative         skin biopsy scar_negative 
##                                 4                                15 
##    skin biopsy scar_notapplicable                     WBCs_negative 
##                                 1                                19 
##                     WBCs_positive 
##                                 4
colData(hu_se_hisat_gene)[["sample_7sl"]] <- sample_7sl
colData(hu_se_salmon)[["sample_7sl"]] <- sample_7sl

table(colData(hu_se_hisat_gene)[["sample_7sl"]])
## 
##               nasal swab_negative          nasal swab_notapplicable 
##                                11                                 2 
##               nasal swab_positive               PBMCs_notapplicable 
##                                 7                                25 
##      skin biopsy healthy_negative skin biopsy healthy_notapplicable 
##                                14                                 1 
##   skin biopsy non-lesion_negative         skin biopsy scar_negative 
##                                 4                                15 
##    skin biopsy scar_notapplicable                     WBCs_negative 
##                                 1                                19 
##                     WBCs_positive 
##                                 4

7.8 Separate the mRNA samples from ribo-zero

Note, when we are finished, we will be using only the mRNA samples and ignoring the ribo-zero. But there are some questions about the data provided by the two libraries.

hu_se_salmon_mrna <- set_conditions(hu_se_salmon, fact = "sample_type") %>%
  subset_se(subset = "library_type=='mRNA'") %>%
  set_batches("detectionparasiteby7sl")
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
## The number of samples by batch are:
## 
##      negative notapplicable      positive 
##            57            28             6
hu_se_salmon_rz <- set_conditions(hu_se_salmon, fact = "sample_type") %>%
  subset_se(subset = "library_type=='RZ'") %>%
  set_batches("detectionparasiteby7sl")
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
## The number of samples by batch are:
## 
##      negative notapplicable      positive 
##             6             1             5
hu_se_hisat_gene_mrna <- set_conditions(hu_se_hisat_gene, fact = "sample_type") %>%
  subset_se(subset = "library_type=='mRNA'") %>%
  set_batches("detectionparasiteby7sl")
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
## The number of samples by batch are:
## 
##      negative notapplicable      positive 
##            57            28             6
hu_se_hisat_gene_rz <- set_conditions(hu_se_hisat_gene, fact = "sample_type") %>%
  subset_se(subset = "library_type=='RZ'") %>%
  set_batches("detectionparasiteby7sl")
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
## The number of samples by batch are:
## 
##      negative notapplicable      positive 
##             6             1             5

7.9 Extract only the healthy of scar samples, only mRNA

hu_hs_salmon_mrna <- subset_se(hu_se_salmon, subset = "hs=='healthy'|hs=='scar'") %>%
  set_conditions(fact = "hs")
## The numbers of samples by condition are:
## 
## healthy    scar 
##      15      16
hu_hs_hisat_mrna <- subset_se(hu_se_hisat_gene_mrna, subset = "hs=='healthy'|hs=='scar'") %>%
  set_conditions(fact = "hs")
## The numbers of samples by condition are:
## 
## healthy    scar 
##      15      15

8 HU Metadata

8.1 Percent of reads mapped to the genome by hisat

hu_mapped_mrna <- plot_metadata_factors(hu_se_hisat_gene_mrna, column = "hisat_genome_percent_log_hg38_115")
hu_mapped_mrna

hu_mapped_rz <- plot_metadata_factors(hu_se_hisat_gene_rz, column = "hisat_genome_percent_log_hg38_115")
hu_mapped_rz
## Warning: Groups with fewer than two datapoints have been dropped.
## ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.

8.2 Number of gene observed by salmon

hu_observed_mrna <- plot_metadata_factors(hu_se_hisat_gene_mrna, column = "salmon_observed_genes_hg38_115")
hu_observed_mrna

hu_observed_rz <- plot_metadata_factors(hu_se_hisat_gene_rz, column = "salmon_observed_genes_hg38_115")
hu_observed_rz
## Warning: Groups with fewer than two datapoints have been dropped.
## ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.

8.3 Percent reads quantified to the human transcriptome by salmon

hu_pct_mrna <- plot_metadata_factors(hu_se_salmon_mrna, column = "salmon_percent_hg38_115")
hu_pct_mrna

hu_pct_rz <- plot_metadata_factors(hu_se_salmon_rz, column = "salmon_percent_hg38_115")
hu_pct_rz
## Warning: Groups with fewer than two datapoints have been dropped.
## ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.

8.4 Number of kraken identified bacterial reads

While at this, add a column dividing the kraken bacterial classified reads from the total reads.

hu_kraken_mrna <- plot_metadata_factors(hu_se_salmon_mrna, column = "kraken_bacterial_classified")
hu_kraken_mrna

hu_kraken_rz <- plot_metadata_factors(hu_se_salmon_rz, column = "kraken_bacterial_classified")
hu_kraken_rz
## Warning: Groups with fewer than two datapoints have been dropped.
## ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.

colData(hu_se_salmon_mrna)[["pct_kraken_bacterial"]] <- colData(hu_se_salmon_mrna)[["kraken_bacterial_classified"]] / colData(hu_se_salmon_mrna)[["trimomatic_output"]]
colData(hu_se_salmon_rz)[["pct_kraken_bacterial"]] <- colData(hu_se_salmon_rz)[["kraken_bacterial_classified"]] / colData(hu_se_salmon_rz)[["trimomatic_output"]]
hu_kraken_pct_mrna <- plot_metadata_factors(hu_se_salmon_mrna, column = "pct_kraken_bacterial")
hu_kraken_pct_mrna
## Warning: Removed 1 row containing non-finite outside the scale range (`stat_ydensity()`).
## Warning: Removed 1 row containing non-finite outside the scale range (`stat_boxplot()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).

hu_kraken_pct_rz <- plot_metadata_factors(hu_se_salmon_rz, column = "pct_kraken_bacterial")
hu_kraken_pct_rz
## Warning: Removed 1 row containing non-finite outside the scale range (`stat_ydensity()`).
## Warning: Groups with fewer than two datapoints have been dropped.
## ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.
## Warning: Removed 1 row containing non-finite outside the scale range (`stat_boxplot()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).

8.5 Sankey of a few factors

hu_sankey <- plot_meta_sankey(hu_se_salmon, factors = c("detectionparasiteby7sl", "sample_type", "library_type"))
## 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 per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
hu_sankey
## A sankey plot describing the metadata of 103 samples,
## including 30 out of 0 nodes and traversing metadata factors:
## detectionparasiteby7sl, sample_type, library_type.

9 Write out the metadata in its current state

write_xlsx(data = modified_meta, excel = "sample_sheets/human_samples_202511_with_nasal_factor.xlsx")
## Deleting the file sample_sheets/human_samples_202511_with_nasal_factor.xlsx before writing the tables.
## write_xlsx() wrote sample_sheets/human_samples_202511_with_nasal_factor.xlsx.
## The cursor is on sheet first, row: 106 column: 117.

10 nonzero/libsize/etc

plot_legend(hu_se_salmon)
## The colors used in the expressionset are: #1B9E77, #66A61E, #7570B3, #D95F02, #E6AB02, #E7298A.

plot_libsize(hu_se_salmon)
## Library sizes of 103 samples, 
## ranging from 571,379 to 8,603,759.

plot_nonzero(hu_se_salmon, y_intercept = 0.75)
## The following samples have less than 9369.1 genes.
##   [1] "PRHU0001" "PRHU0002" "PRHU0009" "PRHU0010" "PRHU0011" "PRHU0018" "PRHU0019" "PRHU0020"
##   [9] "PRHU0012" "PRHU0013" "PRHU0014" "PRHU0021" "PRHU0022" "PRHU0023" "PRHU0015" "PRHU0016"
##  [17] "PRHU0017" "PRHU0024" "PRHU0025" "PRHU0026" "PRHU0038" "PRHU0006" "PRHU0007" "PRHU0008"
##  [25] "PRHU0005" "PRHU0004" "PRHU0003" "PRHU0027" "PRHU0028" "PRHU0029" "PRHU0030" "PRHU0031"
##  [33] "PRHU0032" "PRHU0035" "PRHU0033" "PRHU0034" "PRHU0036" "PRHU0037" "PRHU0039" "PRHU0040"
##  [41] "PRHU0041" "PRHU0042" "PRHU0043" "PRHU0044" "PRHU0045" "PRHU0046" "PRHU0047" "PRHU0048"
##  [49] "PRHU0049" "PRHU0050" "PRHU0051" "PRHU0052" "PRHU0053" "PRHU0054" "PRHU0055" "PRHU0056"
##  [57] "PRHU0057" "PRHU0058" "PRHU0059" "PRHU0060" "PRHU0061" "PRHU0062" "PRHU0063" "PRHU0064"
##  [65] "PRHU0065" "PRHU0066" "PRHU0067" "PRHU0068" "PRHU0069" "PRHU0070" "PRHU0071" "PRHU0072"
##  [73] "PRHU0073" "PRHU0074" "PRHU0075" "PRHU0076" "PRHU0077" "PRHU0078" "PRHU0079" "PRHU0080"
##  [81] "PRHU0081" "PRHU0082" "PRHU0083" "PRHU0084" "PRHU0085" "PRHU0086" "PRHU0087" "PRHU0088"
##  [89] "PRHU0089" "PRHU0090" "PRHU0091" "PRHU0092" "PRHU0093" "PRHU0094" "PRHU0095" "PRHU0096"
##  [97] "PRHU0097" "PRHU0098" "PRHU0099" "PRHU0100" "PRHU0101" "PRHU0102" "PRHU0103"
## Scale for colour is already present.
## Adding another scale for colour, which will replace the existing scale.
## Scale for fill is already present.
## Adding another scale for fill, which will replace the existing scale.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the hpgltools package.
##   Please report the issue to the authors.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
## A non-zero genes plot of 103 samples.
## These samples have an average 2.286 CPM coverage and 4342 genes observed, ranging from 3303 to
## 4932.
## Warning: ggrepel: 95 unlabeled data points (too many overlaps). Consider increasing max.overlaps

plot_libsize(hu_se_hisat_gene)
## Library sizes of 103 samples, 
## ranging from 4,395,408 to 18,970,049.

plot_nonzero(hu_se_hisat_gene)
## Scale for colour is already present.
## Adding another scale for colour, which will replace the existing scale.
## Scale for fill is already present.
## Adding another scale for fill, which will replace the existing scale.
## A non-zero genes plot of 103 samples.
## These samples have an average 12.61 CPM coverage and 15853 genes observed, ranging from 14800 to
## 17913.
## Warning: ggrepel: 61 unlabeled data points (too many overlaps). Consider increasing max.overlaps

plot_libsize(hu_se_hisat_gene_mrna)
## Library sizes of 91 samples, 
## ranging from 6,563,145 to 18,970,049.

plot_libsize(hu_se_hisat_gene_rz)
## Library sizes of 12 samples, 
## ranging from 4,395,408 to 16,550,439.

11 Normalize

A couple plots of all the salmon samples colored by sample type.

hu_sesn <- normalize(hu_se_salmon, transform = "log2", convert = "cpm",
                     filter = TRUE, norm = "quant")
## Removing 3906 low-count genes (10508 remaining).
## transform_counts: Found 646654 values equal to 0, adding 1 to the matrix.
plot_corheat(hu_sesn)
## A heatmap of pairwise sample correlations ranging from: 
## 0.410843298800327 to 0.894948457993829.

hu_sesn_pca <- plot_pca(hu_sesn)

pp(file = "images/hu_pca_sampletype.png")
hu_sesn_pca$plot
dev.off()
## png 
##   2
hu_sesn_pca
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by nasal swab, PBMCs, skin biopsy healthy, skin biopsy non-lesion, skin biopsy scar, WBCs
## Shapes are defined by mRNA, RZ.

11.1 Remove samples without 7SL detection state

While we are at it, color by the 7SL detection and shape by sample type (Rz/mRNA).

hu_detected <- subset_se(hu_se_salmon, subset = "detectionparasiteby7sl!='unknown'") %>%
  set_conditions(fact = "detectionparasiteby7sl") %>%
  set_batches("sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##            63            29            11
## The number of samples by batch are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
hu_detect_nb <- normalize(hu_detected, transform = "log2", convert = "cpm",
                          filter = TRUE, batch = "svaseq")
## Removing 3906 low-count genes (10508 remaining).
## transform_counts: Found 226065 values less than 0.
## transform_counts: Found 226065 values equal to 0, adding 1 to the matrix.
hu_detect_pca <- plot_pca(hu_detect_nb)
## Warning in ggplot2::guide_legend(overwrite.aes = list(size = plot_size)): Arguments in `...` must be used.
## ✖ Problematic argument:
## • overwrite.aes = list(size = plot_size)
## ℹ Did you misspell an argument name?
pp(file = "images/hu_pca_detect_sva.png")
hu_detect_pca$plot
dev.off()
## png 
##   2
hu_detect_pca
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative, notapplicable, positive
## Shapes are defined by nasal swab, PBMCs, skin biopsy healthy, skin biopsy non-lesion, skin biopsy scar, WBCs.

12 Compare distribution of RZ/Stranded libraries

Maria Adelaida is interested in the distribution of the relatively few rz samples vs the relatively large number of stranded mRNA libraries.

I think it is likely that the nasal samples are of primary interest.

12.1 Salmon tx quantifications

salmon_mrna_7sl <- set_conditions(hu_se_salmon_mrna, fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'") %>%
  set_conditions(fact = "detection_type") %>%
  set_batches(fact = "sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##            57            28             6
## The numbers of samples by condition are:
## 
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                 57                  0                  0                  0                  6 
##        positive_RZ 
##                  0
## The number of samples by batch are:
## 
##             nasal swab    skin biopsy healthy skin biopsy non-lesion       skin biopsy scar 
##                     10                     14                      2                     14 
##                   WBCs 
##                     23
salmon_mrna_7sl_norm <- normalize(salmon_mrna_7sl, convert = "cpm", filter = TRUE,
                                  norm = "quant", transform = "log2")
## Removing 5333 low-count genes (9081 remaining).
## transform_counts: Found 317582 values equal to 0, adding 1 to the matrix.
## This still clusters primarily by sample type, and there are precious few positive samples.
plot_pca(salmon_mrna_7sl_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab, skin biopsy healthy, skin biopsy non-lesion, skin biopsy scar, WBCs.
## Warning in MASS::cov.trob(data[, vars], wt = weight * nrow(data)): Probable convergence failure
## Warning in MASS::cov.trob(data[, vars], wt = weight * nrow(data)): Probable convergence failure

salmon_mrna_7sl_nb <- normalize(salmon_mrna_7sl, convert = "cpm", filter = TRUE,
                                batch = "sva", transform = "log2")
## Removing 5333 low-count genes (9081 remaining).
## transform_counts: Found 104689 values less than 0.
## transform_counts: Found 104689 values equal to 0, adding 1 to the matrix.
plot_pca(salmon_mrna_7sl_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab, skin biopsy healthy, skin biopsy non-lesion, skin biopsy scar, WBCs.

12.2 Hisat genes, mRNA samples

hisat_mrna_7sl <- set_conditions(hu_se_hisat_gene_mrna, fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'") %>%
  set_conditions(fact = "detection_type") %>%
  set_batches(fact = "sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##            57            28             6
## The numbers of samples by condition are:
## 
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                 57                  0                  0                  0                  6 
##        positive_RZ 
##                  0
## The number of samples by batch are:
## 
##             nasal swab    skin biopsy healthy skin biopsy non-lesion       skin biopsy scar 
##                     10                     14                      2                     14 
##                   WBCs 
##                     23
hisat_mrna_7sl_norm <- normalize(hisat_mrna_7sl, convert = "cpm", filter = TRUE,
                                  norm = "quant", transform = "log2")
## Removing 6173 low-count genes (15398 remaining).
## transform_counts: Found 14191 values equal to 0, adding 1 to the matrix.
## This still clusters primarily by sample type, and there are precious few positive samples.
plot_pca(hisat_mrna_7sl_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab, skin biopsy healthy, skin biopsy non-lesion, skin biopsy scar, WBCs.
## Warning in MASS::cov.trob(data[, vars], wt = weight * nrow(data)): Probable convergence failure
## Warning in MASS::cov.trob(data[, vars], wt = weight * nrow(data)): Probable convergence failure

hisat_mrna_7sl_nb <- normalize(hisat_mrna_7sl, convert = "cpm", filter = TRUE,
                                batch = "sva", transform = "log2")
## Removing 6173 low-count genes (15398 remaining).
## transform_counts: Found 6654 values less than 0.
## transform_counts: Found 6654 values equal to 0, adding 1 to the matrix.
plot_pca(hisat_mrna_7sl_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab, skin biopsy healthy, skin biopsy non-lesion, skin biopsy scar, WBCs.

salmon_mrna_7sl_de <- all_pairwise(salmon_mrna_7sl, model_fstring = "~ 0 + condition",
                                   model_svs = "svaseq", filter = TRUE, force = TRUE)
## negative_mRNA positive_mRNA 
##            57             6
## Removing 5333 low-count genes (9081 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 340140 entries to zero.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## This received a matrix of SVs.
## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_mRNA positive_mRNA 
##            57             6
## conditions
## negative_mRNA positive_mRNA 
##            57             6
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_mRNA positive_mRNA 
##            57             6
salmon_mrna_7sl_de
## A pairwise differential expression with results from: basic, deseq, ebseq, edger, limma, noiseq.
## This used a surrogate/batch estimate from: svaseq.
## The primary analysis performed 1 comparisons.
## The logFC agreement among the methods follows:
##                 p_RNA___RN
## basic_vs_deseq      0.2161
## basic_vs_dream      0.3679
## basic_vs_ebseq      0.5795
## basic_vs_edger      0.2731
## basic_vs_limma      0.3580
## basic_vs_noiseq     0.3156
## deseq_vs_dream      0.3559
## deseq_vs_ebseq      0.5695
## deseq_vs_edger      0.6088
## deseq_vs_limma      0.3231
## deseq_vs_noiseq     0.5692
## dream_vs_ebseq      0.4002
## dream_vs_edger      0.6833
## dream_vs_limma      0.9114
## dream_vs_noiseq     0.6110
## ebseq_vs_edger      0.5873
## ebseq_vs_limma      0.3796
## ebseq_vs_noiseq     0.6072
## edger_vs_limma      0.6136
## edger_vs_noiseq     0.7090
## limma_vs_noiseq     0.5769
salmon_mrna_7sl_table <- combine_de_tables(salmon_mrna_7sl_de, excel = "excel/salmon_mrna_7sl_table.xlsx")
## Deleting the file excel/salmon_mrna_7sl_table.xlsx before writing the tables.
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
salmon_mrna_7sl_table
## A set of combined differential expression results.
##                            table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup
## 1 positive_mRNA_vs_negative_mRNA          19           445          24            37          15
##   limma_sigdown
## 1            20
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the UpSetR package.
##   Please report the issue to the authors.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## ℹ The deprecated feature was likely used in the UpSetR package.
##   Please report the issue to the authors.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
## Plot describing unique/shared genes in a differential expression table.

12.2.1 Salmon nasal samples, mRNA libraries

Now restrict to just the nasal samples.

salmon_nasal_mrna <- subset_se(hu_se_salmon_mrna, subset = "sample_type=='nasal swab'") %>%
  set_conditions(fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'") %>%
  set_conditions(fact = "detection_type") %>%
  set_batches(fact = "sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             8             1             2
## The numbers of samples by condition are:
## 
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                  8                  0                  0                  0                  2 
##        positive_RZ 
##                  0
## The number of samples by batch are:
## 
## nasal swab 
##         10
salmon_nasal_mrna_norm <- normalize(salmon_nasal_mrna, convert = "cpm", filter = TRUE,
                                    norm = "quant", transform = "log2")
## Removing 10144 low-count genes (4270 remaining).
## transform_counts: Found 10719 values equal to 0, adding 1 to the matrix.
plot_pca(salmon_nasal_mrna_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab.

salmon_nasal_mrna_nb <- normalize(salmon_nasal_mrna, convert = "cpm", filter = TRUE,
                                  batch = "sva", transform = "log2")
## Removing 10144 low-count genes (4270 remaining).
## transform_counts: Found 3569 values less than 0.
## transform_counts: Found 3569 values equal to 0, adding 1 to the matrix.
plot_pca(salmon_nasal_mrna_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab.

salmon_nasal_mrna_7sl_de <- all_pairwise(salmon_nasal_mrna, model_fstring = "~ 0 + condition",
                                         model_svs = "svaseq", filter = TRUE, force = TRUE)
## negative_mRNA positive_mRNA 
##             8             2
## Removing 10144 low-count genes (4270 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 13141 entries to zero.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## This received a matrix of SVs.
## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_mRNA positive_mRNA 
##             8             2
## conditions
## negative_mRNA positive_mRNA 
##             8             2
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_mRNA positive_mRNA 
##             8             2
salmon_nasal_mrna_7sl_de
## A pairwise differential expression with results from: basic, deseq, ebseq, edger, limma, noiseq.
## This used a surrogate/batch estimate from: svaseq.
## The primary analysis performed 1 comparisons.
## The logFC agreement among the methods follows:
##                 p_RNA___RN
## basic_vs_deseq      0.4983
## basic_vs_dream      0.7292
## basic_vs_ebseq      0.6543
## basic_vs_edger      0.6276
## basic_vs_limma      0.7234
## basic_vs_noiseq     0.7864
## deseq_vs_dream      0.6132
## deseq_vs_ebseq      0.6434
## deseq_vs_edger      0.7982
## deseq_vs_limma      0.5877
## deseq_vs_noiseq     0.6565
## dream_vs_ebseq      0.6895
## dream_vs_edger      0.8311
## dream_vs_limma      0.9716
## dream_vs_noiseq     0.7470
## ebseq_vs_edger      0.7483
## ebseq_vs_limma      0.6357
## ebseq_vs_noiseq     0.9642
## edger_vs_limma      0.7964
## edger_vs_noiseq     0.7663
## limma_vs_noiseq     0.7051
salmon_nasal_mrna_7sl_table <- combine_de_tables(salmon_nasal_mrna_7sl_de, excel = "excel/salmon_nasal_mrna_7sl_table.xlsx")
## Deleting the file excel/salmon_nasal_mrna_7sl_table.xlsx before writing the tables.
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
salmon_nasal_mrna_7sl_table
## A set of combined differential expression results.
##                            table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup
## 1 positive_mRNA_vs_negative_mRNA          29           126           4            29           9
##   limma_sigdown
## 1             0
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Plot describing unique/shared genes in a differential expression table.

12.2.2 Salmon nasal samples, mRNA libraries

hisat_nasal_mrna <- subset_se(hu_se_hisat_gene_mrna, subset = "sample_type=='nasal swab'") %>%
  set_conditions(fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'") %>%
  set_conditions(fact = "detection_type") %>%
  set_batches(fact = "sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             8             1             2
## The numbers of samples by condition are:
## 
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                  8                  0                  0                  0                  2 
##        positive_RZ 
##                  0
## The number of samples by batch are:
## 
## nasal swab 
##         10
hisat_nasal_mrna_norm <- normalize(hisat_nasal_mrna, convert = "cpm", filter = TRUE,
                                    norm = "quant", transform = "log2")
## Removing 8412 low-count genes (13159 remaining).
## transform_counts: Found 12 values equal to 0, adding 1 to the matrix.
plot_pca(hisat_nasal_mrna_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab.

hisat_nasal_mrna_nb <- normalize(hisat_nasal_mrna, convert = "cpm", filter = TRUE,
                                  batch = "sva", transform = "log2")
## Removing 8412 low-count genes (13159 remaining).
## transform_counts: Found 108 values less than 0.
## transform_counts: Found 108 values equal to 0, adding 1 to the matrix.
plot_pca(hisat_nasal_mrna_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab.

12.3 Repeat with the ribo zero samples

12.3.1 Salmon 7SL samples, ribozero

salmon_rz_7sl <- set_conditions(hu_se_salmon_rz, fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'") %>%
  set_conditions(fact = "detection_type") %>%
  set_batches(fact = "sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             6             1             5
## The numbers of samples by condition are:
## 
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                  0                  6                  0                  0                  0 
##        positive_RZ 
##                  5
## The number of samples by batch are:
## 
##             nasal swab skin biopsy non-lesion       skin biopsy scar 
##                      8                      2                      1
salmon_rz_7sl_norm <- normalize(salmon_rz_7sl, convert = "cpm", filter = TRUE,
                                norm = "quant", transform = "log2")
## Removing 7999 low-count genes (6415 remaining).
## transform_counts: Found 27489 values equal to 0, adding 1 to the matrix.
## This still clusters primarily by sample type, and there are precious few positive samples.
plot_pca(salmon_rz_7sl_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab, skin biopsy non-lesion, skin biopsy scar.

salmon_rz_7sl_nb <- normalize(salmon_rz_7sl, convert = "cpm", filter = TRUE,
                              batch = "sva", transform = "log2")
## Removing 7999 low-count genes (6415 remaining).
## transform_counts: Found 8841 values less than 0.
## transform_counts: Found 8841 values equal to 0, adding 1 to the matrix.
plot_pca(salmon_rz_7sl_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab, skin biopsy non-lesion, skin biopsy scar.

salmon_rz_7sl_de <- all_pairwise(salmon_rz_7sl, model_fstring = "~ 0 + condition",
                                 model_svs = "svaseq", filter = TRUE, force = TRUE)
## negative_RZ positive_RZ 
##           6           5
## Removing 7999 low-count genes (6415 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 29027 entries to zero.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## This received a matrix of SVs.
## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_RZ positive_RZ 
##           6           5
## conditions
## negative_RZ positive_RZ 
##           6           5
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_RZ positive_RZ 
##           6           5
salmon_rz_7sl_de
## A pairwise differential expression with results from: basic, deseq, ebseq, edger, limma, noiseq.
## This used a surrogate/batch estimate from: svaseq.
## The primary analysis performed 1 comparisons.
## The logFC agreement among the methods follows:
##                 ps_RZ___RZ
## basic_vs_deseq      0.4620
## basic_vs_dream      0.6389
## basic_vs_ebseq      0.6936
## basic_vs_edger      0.5229
## basic_vs_limma      0.6401
## basic_vs_noiseq     0.6094
## deseq_vs_dream      0.7216
## deseq_vs_ebseq      0.5161
## deseq_vs_edger      0.8905
## deseq_vs_limma      0.7081
## deseq_vs_noiseq     0.6824
## dream_vs_ebseq      0.5468
## dream_vs_edger      0.8219
## dream_vs_limma      0.9929
## dream_vs_noiseq     0.7829
## ebseq_vs_edger      0.5925
## ebseq_vs_limma      0.5352
## ebseq_vs_noiseq     0.6974
## edger_vs_limma      0.8047
## edger_vs_noiseq     0.7644
## limma_vs_noiseq     0.7901
salmon_rz_7sl_table <- combine_de_tables(salmon_rz_7sl_de, excel = "excel/salmon_rz_7sl_table.xlsx")
## Deleting the file excel/salmon_rz_7sl_table.xlsx before writing the tables.
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
salmon_rz_7sl_table
## A set of combined differential expression results.
##                        table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup
## 1 positive_RZ_vs_negative_RZ          31            30          45            40           4
##   limma_sigdown
## 1            13
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Plot describing unique/shared genes in a differential expression table.

12.3.2 Hisat 7SL samples, ribozero

hisat_rz_7sl <- set_conditions(hu_se_hisat_gene_rz, fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'") %>%
  set_conditions(fact = "detection_type") %>%
  set_batches(fact = "sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             6             1             5
## The numbers of samples by condition are:
## 
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                  0                  6                  0                  0                  0 
##        positive_RZ 
##                  5
## The number of samples by batch are:
## 
##             nasal swab skin biopsy non-lesion       skin biopsy scar 
##                      8                      2                      1
hisat_rz_7sl_norm <- normalize(hisat_rz_7sl, convert = "cpm", filter = TRUE,
                               norm = "quant", transform = "log2")
## Removing 7116 low-count genes (14455 remaining).
## transform_counts: Found 306 values equal to 0, adding 1 to the matrix.
## This still clusters primarily by sample type, and there are precious few positive samples.
plot_pca(hisat_rz_7sl_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab, skin biopsy non-lesion, skin biopsy scar.

hisat_rz_7sl_nb <- normalize(hisat_rz_7sl, convert = "cpm", filter = TRUE,
                             batch = "sva", transform = "log2")
## Removing 7116 low-count genes (14455 remaining).
## transform_counts: Found 322 values less than 0.
## transform_counts: Found 322 values equal to 0, adding 1 to the matrix.
plot_pca(hisat_rz_7sl_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab, skin biopsy non-lesion, skin biopsy scar.

hisat_rz_7sl_de <- all_pairwise(hisat_rz_7sl, model_fstring = "~ 0 + condition",
                                 model_svs = "svaseq", filter = TRUE)
## negative_RZ positive_RZ 
##           6           5
## Removing 7116 low-count genes (14455 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 11842 entries to zero.
## This received a matrix of SVs.
## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## conditions
## negative_RZ positive_RZ 
##           6           5
## conditions
## negative_RZ positive_RZ 
##           6           5
## conditions
## negative_RZ positive_RZ 
##           6           5
hisat_rz_7sl_de
## A pairwise differential expression with results from: basic, deseq, ebseq, edger, limma, noiseq.
## This used a surrogate/batch estimate from: svaseq.
## The primary analysis performed 1 comparisons.
## The logFC agreement among the methods follows:
##                 ps_RZ___RZ
## basic_vs_deseq      0.7651
## basic_vs_dream      0.7920
## basic_vs_ebseq      0.7624
## basic_vs_edger      0.7132
## basic_vs_limma      0.8185
## basic_vs_noiseq     0.4647
## deseq_vs_dream      0.9638
## deseq_vs_ebseq      0.7106
## deseq_vs_edger      0.9463
## deseq_vs_limma      0.9561
## deseq_vs_noiseq     0.7600
## dream_vs_ebseq      0.6907
## dream_vs_edger      0.9003
## dream_vs_limma      0.9944
## dream_vs_noiseq     0.7741
## ebseq_vs_edger      0.7353
## ebseq_vs_limma      0.6867
## ebseq_vs_noiseq     0.4985
## edger_vs_limma      0.8904
## edger_vs_noiseq     0.7077
## limma_vs_noiseq     0.7468
hisat_rz_7sl_table <- combine_de_tables(hisat_rz_7sl_de, excel = "excel/hisat_rz_7sl_table.xlsx")
## Deleting the file excel/hisat_rz_7sl_table.xlsx before writing the tables.
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
hisat_rz_7sl_table
## A set of combined differential expression results.
##                        table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup
## 1 positive_RZ_vs_negative_RZ         572           306         638           333          38
##   limma_sigdown
## 1            16
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Plot describing unique/shared genes in a differential expression table.

12.3.3 Salmon 7SL nasal samples, ribozero

Now restrict to just the nasal samples.

salmon_nasal_rz <- subset_se(hu_se_salmon_rz, subset = "sample_type=='nasal swab'") %>%
  set_conditions(fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'") %>%
  set_conditions(fact = "detection_type") %>%
  set_batches(fact = "sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             3             1             5
## The numbers of samples by condition are:
## 
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                  0                  3                  0                  0                  0 
##        positive_RZ 
##                  5
## The number of samples by batch are:
## 
## nasal swab 
##          8
salmon_nasal_rz_norm <- normalize(salmon_nasal_rz, convert = "cpm", filter = TRUE,
                                    norm = "quant", transform = "log2")
## Removing 9288 low-count genes (5126 remaining).
## transform_counts: Found 12445 values equal to 0, adding 1 to the matrix.
plot_pca(salmon_nasal_rz_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab.

salmon_nasal_rz_nb <- normalize(salmon_nasal_rz, convert = "cpm", filter = TRUE,
                                  batch = "sva", transform = "log2")
## Removing 9288 low-count genes (5126 remaining).
## transform_counts: Found 2938 values less than 0.
## transform_counts: Found 2938 values equal to 0, adding 1 to the matrix.
plot_pca(salmon_nasal_rz_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab.

salmon_rz_7sl_nasal_de <- all_pairwise(salmon_nasal_rz, model_fstring = "~ 0 + condition",
                                       model_svs = "svaseq", filter = TRUE, force = TRUE)
## negative_RZ positive_RZ 
##           3           5
## Removing 9288 low-count genes (5126 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 13365 entries to zero.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## This received a matrix of SVs.
## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_RZ positive_RZ 
##           3           5
## conditions
## negative_RZ positive_RZ 
##           3           5
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_RZ positive_RZ 
##           3           5
salmon_rz_7sl_nasal_de
## A pairwise differential expression with results from: basic, deseq, ebseq, edger, limma, noiseq.
## This used a surrogate/batch estimate from: svaseq.
## The primary analysis performed 1 comparisons.
## The logFC agreement among the methods follows:
##                 ps_RZ___RZ
## basic_vs_deseq      0.6978
## basic_vs_dream      0.8808
## basic_vs_ebseq      0.7100
## basic_vs_edger      0.7549
## basic_vs_limma      0.9121
## basic_vs_noiseq     0.8388
## deseq_vs_dream      0.7444
## deseq_vs_ebseq      0.7559
## deseq_vs_edger      0.9405
## deseq_vs_limma      0.7470
## deseq_vs_noiseq     0.7843
## dream_vs_ebseq      0.7597
## dream_vs_edger      0.8131
## dream_vs_limma      0.9897
## dream_vs_noiseq     0.8514
## ebseq_vs_edger      0.8398
## ebseq_vs_limma      0.7619
## ebseq_vs_noiseq     0.9421
## edger_vs_limma      0.8119
## edger_vs_noiseq     0.8542
## limma_vs_noiseq     0.8586
salmon_rz_7sl_nasal_table <- combine_de_tables(
  salmon_rz_7sl_nasal_de, excel = "excel/salmon_rz_7sl_nasal_table.xlsx")
## Deleting the file excel/salmon_rz_7sl_nasal_table.xlsx before writing the tables.
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
salmon_rz_7sl_nasal_table
## A set of combined differential expression results.
##                        table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup
## 1 positive_RZ_vs_negative_RZ          18            27          16            49           0
##   limma_sigdown
## 1             8
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Plot describing unique/shared genes in a differential expression table.

12.3.4 Hisat 7SL nasal samples, ribozero

hisat_nasal_rz <- subset_se(hu_se_hisat_gene_rz, subset = "sample_type=='nasal swab'") %>%
  set_conditions(fact = "detectionparasiteby7sl") %>%
  subset_se(subset = "condition!='notapplicable'") %>%
  set_conditions(fact = "detection_type") %>%
  set_batches(fact = "sample_type")
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             3             1             5
## The numbers of samples by condition are:
## 
##      negative_mRNA        negative_RZ notapplicable_mRNA   notapplicable_RZ      positive_mRNA 
##                  0                  3                  0                  0                  0 
##        positive_RZ 
##                  5
## The number of samples by batch are:
## 
## nasal swab 
##          8
hisat_nasal_rz_norm <- normalize(hisat_nasal_rz, convert = "cpm", filter = TRUE,
                                    norm = "quant", transform = "log2")
## Removing 8212 low-count genes (13359 remaining).
## transform_counts: Found 9 values equal to 0, adding 1 to the matrix.
plot_pca(hisat_nasal_rz_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab.

hisat_nasal_rz_nb <- normalize(hisat_nasal_rz, convert = "cpm", filter = TRUE,
                                  batch = "sva", transform = "log2")
## Removing 8212 low-count genes (13359 remaining).
## transform_counts: Found 137 values less than 0.
## transform_counts: Found 137 values equal to 0, adding 1 to the matrix.
plot_pca(hisat_nasal_rz_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative_mRNA, negative_RZ, notapplicable_mRNA, notapplicable_RZ, positive_mRNA, positive_RZ
## Shapes are defined by nasal swab.

hisat_rz_7sl_nasal_de <- all_pairwise(hisat_nasal_rz, model_fstring = "~ 0 + condition",
                                       model_svs = "svaseq", filter = TRUE, force = TRUE)
## negative_RZ positive_RZ 
##           3           5
## Removing 8212 low-count genes (13359 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 2833 entries to zero.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## This received a matrix of SVs.
## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_RZ positive_RZ 
##           3           5
## conditions
## negative_RZ positive_RZ 
##           3           5
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative_RZ positive_RZ 
##           3           5
hisat_rz_7sl_nasal_de
## A pairwise differential expression with results from: basic, deseq, ebseq, edger, limma, noiseq.
## This used a surrogate/batch estimate from: svaseq.
## The primary analysis performed 1 comparisons.
## The logFC agreement among the methods follows:
##                 ps_RZ___RZ
## basic_vs_deseq      0.8838
## basic_vs_dream      0.8874
## basic_vs_ebseq      0.8892
## basic_vs_edger      0.8851
## basic_vs_limma      0.8999
## basic_vs_noiseq     0.8937
## deseq_vs_dream      0.9548
## deseq_vs_ebseq      0.8968
## deseq_vs_edger      0.9995
## deseq_vs_limma      0.9510
## deseq_vs_noiseq     0.8922
## dream_vs_ebseq      0.9191
## dream_vs_edger      0.9563
## dream_vs_limma      0.9950
## dream_vs_noiseq     0.9162
## ebseq_vs_edger      0.8978
## ebseq_vs_limma      0.9170
## ebseq_vs_noiseq     0.9992
## edger_vs_limma      0.9526
## edger_vs_noiseq     0.8931
## limma_vs_noiseq     0.9156
hisat_rz_7sl_nasal_table <- combine_de_tables(
  hisat_rz_7sl_nasal_de, excel = "excel/hisat_rz_7sl_nasal_table.xlsx")
## Deleting the file excel/hisat_rz_7sl_nasal_table.xlsx before writing the tables.
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
hisat_rz_7sl_nasal_table
## A set of combined differential expression results.
##                        table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup
## 1 positive_RZ_vs_negative_RZ         307           164         278           148           0
##   limma_sigdown
## 1             0
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Plot describing unique/shared genes in a differential expression table.

13 Look at sample type and 7sl

Start out by recategorizing all samples by the combination of sample type and 7SL state. Then once again extract the relatively small number of nasal samples.

For the moment, just do this with the salmon quantifications.

13.1 All samples: color by (sample type + 7SL)

hu_s7sl <- set_conditions(hu_se_salmon_mrna, fact = "sample_7sl")
## The numbers of samples by condition are:
## 
##               nasal swab_negative          nasal swab_notapplicable 
##                                 8                                 1 
##               nasal swab_positive               PBMCs_notapplicable 
##                                 2                                25 
##      skin biopsy healthy_negative skin biopsy healthy_notapplicable 
##                                14                                 1 
##   skin biopsy non-lesion_negative         skin biopsy scar_negative 
##                                 2                                14 
##    skin biopsy scar_notapplicable                     WBCs_negative 
##                                 1                                19 
##                     WBCs_positive 
##                                 4
hu_s7sl_norm <- normalize(hu_s7sl, transform = "log2", convert = "cpm",
                          norm = "quant", filter = TRUE)
## Removing 4625 low-count genes (9789 remaining).
## transform_counts: Found 511587 values equal to 0, adding 1 to the matrix.
plot_pca(hu_s7sl_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by nasal swab_negative, nasal swab_notapplicable, nasal swab_positive, PBMCs_notapplicable, skin biopsy healthy_negative, skin biopsy healthy_notapplicable, skin biopsy non-lesion_negative, skin biopsy scar_negative, skin biopsy scar_notapplicable, WBCs_negative, WBCs_positive
## Shapes are defined by negative, notapplicable, positive.

13.2 Extract the nasal subset

There is not much to work with here.

hu_nasal <- subset_se(hu_s7sl, subset = "sample_type=='nasal swab'")
hu_nasal_norm <- normalize(hu_nasal, transform = "log2", convert = "cpm",
                           norm = "quant", filter = TRUE)
## Removing 9942 low-count genes (4472 remaining).
## transform_counts: Found 13344 values equal to 0, adding 1 to the matrix.
plot_pca(hu_nasal_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by nasal swab_negative, nasal swab_notapplicable, nasal swab_positive
## Shapes are defined by negative, notapplicable, positive.

hu_nasal_nb <- normalize(hu_nasal, transform = "log2", convert = "cpm",
                         batch = "svaseq", filter = TRUE)
## Removing 9942 low-count genes (4472 remaining).
## transform_counts: Found 4426 values less than 0.
## transform_counts: Found 4426 values equal to 0, adding 1 to the matrix.
nasal_pca <- plot_pca(hu_nasal_nb)
nasal_pca
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by nasal swab_negative, nasal swab_notapplicable, nasal swab_positive
## Shapes are defined by negative, notapplicable, positive.

pp(file = "images/nasal_sample_np.png")
nasal_pca$plot
dev.off()
## png 
##   2

13.3 Extract the blood cells (not PBMC)

hu_wbc <- subset_se(hu_s7sl, subset = "sample_type=='WBCs'")
hu_wbc_nb <- normalize(hu_wbc, transform = "log2", convert = "cpm",
                       batch = "svaseq", filter = TRUE)
## Removing 7669 low-count genes (6745 remaining).
## transform_counts: Found 22099 values less than 0.
## transform_counts: Found 22099 values equal to 0, adding 1 to the matrix.
wbc_pca <- plot_pca(hu_wbc_nb)
wbc_pca
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by WBCs_negative, WBCs_positive
## Shapes are defined by negative, positive.

pp(file = "images/wbc_sample_np.png")
wbc_pca$plot
dev.off()
## png 
##   2

13.4 Skin samples

hu_skin <- subset_se(hu_s7sl, subset = "skinp=='skin'")
hu_skin_nb <- normalize(hu_skin, transform = "log2", convert = "cpm",
                        batch = "svaseq", filter = TRUE)
## Removing 7754 low-count genes (6660 remaining).
## transform_counts: Found 32990 values less than 0.
## transform_counts: Found 32990 values equal to 0, adding 1 to the matrix.
skin_pca <- plot_pca(hu_skin_nb)
skin_pca
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by skin biopsy healthy_negative, skin biopsy healthy_notapplicable, skin biopsy non-lesion_negative, skin biopsy scar_negative, skin biopsy scar_notapplicable
## Shapes are defined by negative, notapplicable.

pp(file = "images/skin_sample_np.png")
skin_pca$plot
dev.off()
## png 
##   2
short_factor <- gsub(x = as.character(colData(hu_nasal)[["condition"]]),
                     pattern = ".*_(.*)$", replacement = "\\1")
hu_nasal <- set_conditions(hu_nasal, fact = as.factor(short_factor))
## The numbers of samples by condition are:
## 
##      negative notapplicable      positive 
##             8             1             2
hu_nasal_np <- subset_se(hu_nasal, subset = "condition!='notapplicable'")

hu_nasal_de <- all_pairwise(hu_nasal_np, filter = TRUE, force = TRUE,
                            model_fstring = "~ 0 + condition", model_svs = "svaseq")
## negative positive 
##        8        2
## Removing 10144 low-count genes (4270 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 13141 entries to zero.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## This received a matrix of SVs.
## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative positive 
##        8        2
## conditions
## negative positive 
##        8        2
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## negative positive 
##        8        2
hu_nasal_de
## A pairwise differential expression with results from: basic, deseq, ebseq, edger, limma, noiseq.
## This used a surrogate/batch estimate from: svaseq.
## The primary analysis performed 1 comparisons.
## The logFC agreement among the methods follows:
##                 pstv_vs_ng
## basic_vs_deseq      0.4983
## basic_vs_dream      0.7292
## basic_vs_ebseq      0.6543
## basic_vs_edger      0.6276
## basic_vs_limma      0.7234
## basic_vs_noiseq     0.1646
## deseq_vs_dream      0.6132
## deseq_vs_ebseq      0.6434
## deseq_vs_edger      0.7982
## deseq_vs_limma      0.5877
## deseq_vs_noiseq     0.4067
## dream_vs_ebseq      0.6895
## dream_vs_edger      0.8311
## dream_vs_limma      0.9716
## dream_vs_noiseq     0.2401
## ebseq_vs_edger      0.7483
## ebseq_vs_limma      0.6357
## ebseq_vs_noiseq     0.6407
## edger_vs_limma      0.7964
## edger_vs_noiseq     0.3815
## limma_vs_noiseq     0.2164
hu_nasal_table <- combine_de_tables(hu_nasal_de, excel = "excel/persist_table.xlsx")
## Deleting the file excel/persist_table.xlsx before writing the tables.
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
hu_nasal_table
## A set of combined differential expression results.
##                  table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup
## 1 positive_vs_negative          29           126           4            29           9
##   limma_sigdown
## 1             0
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Plot describing unique/shared genes in a differential expression table.

hu_nasal_sig <- extract_significant_genes(hu_nasal_table, excel = "excel/persist_sig.xlsx")
## Deleting the file excel/persist_sig.xlsx before writing the tables.
hu_nasal_sig
## A set of genes deemed significant according to limma, edger, deseq, ebseq, basic.
## The parameters defining significant were:
## LFC cutoff: 1 adj P cutoff: 0.05
##                      limma_up limma_down edger_up edger_down deseq_up deseq_down ebseq_up
## positive_vs_negative        9          0        4         29       29        126       91
##                      ebseq_down basic_up basic_down
## positive_vs_negative         77        0          0

14 Healthy vs Scar samples

One query from our last meeting which I forgot about until I reread my TODO notes: compare the samples marked as healthy compared to those marked as scar. These are two distantly separate skin biopsies of the same person.

hu_hs_de <- all_pairwise(hu_hs_hisat_mrna, filter = TRUE, force = TRUE,
                         model_svs = "svaseq", model_fstring = "~ 0 + condition")
## healthy    scar 
##      15      15
## Removing 7549 low-count genes (14022 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 20103 entries to zero.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## This received a matrix of SVs.
## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## healthy    scar 
##      15      15
## conditions
## healthy    scar 
##      15      15
## Warning in choose_binom_dataset(input, force = force): This data was inappropriately forced into
## integers.
## conditions
## healthy    scar 
##      15      15
hu_hs_table <- combine_de_tables(hu_hs_de, excel = "excel/healthy_vs_scar_table.xlsx")
## Deleting the file excel/healthy_vs_scar_table.xlsx before writing the tables.
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
hu_hs_table
## A set of combined differential expression results.
##             table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup limma_sigdown
## 1 scar_vs_healthy          70             2          85             4           5             0
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Plot describing unique/shared genes in a differential expression table.

hu_hs_sig <- extract_significant_genes(hu_hs_table, excel = "excel/healthy_vs_scar_sig.xlsx")
## Deleting the file excel/healthy_vs_scar_sig.xlsx before writing the tables.
hu_hs_sig
## A set of genes deemed significant according to limma, edger, deseq, ebseq, basic.
## The parameters defining significant were:
## LFC cutoff: 1 adj P cutoff: 0.05
##                 limma_up limma_down edger_up edger_down deseq_up deseq_down ebseq_up ebseq_down
## scar_vs_healthy        5          0       85          4       70          2        6          0
##                 basic_up basic_down
## scar_vs_healthy       61          5

15 Take a peek at the kraken results

hu_kraken_viral <- create_se(pre_meta[["new_meta"]], file_column = "kraken_matrix_viral",
                       handle_na = "zero")
## Reading the sample metadata.
## Checking the state of the condition column.
## Checking the state of the batch column.
## Checking the condition factor.
## The sample definitions comprises: 103 rows(samples) and 107 columns(metadata fields).
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0002/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0009/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0010/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0011/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0018/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0019/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0020/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0012/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0013/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0014/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0021/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0022/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0023/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0015/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0016/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0017/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0024/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0025/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0026/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0038/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0006/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0007/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0008/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0005/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0004/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0003/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0027/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0028/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0029/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0030/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0031/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0032/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0035/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0033/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0034/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0036/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0037/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0039/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0040/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0041/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0042/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0043/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0044/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0045/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0046/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0047/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0048/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0049/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0050/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0051/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0052/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0053/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0054/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0055/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0056/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0057/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0058/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0059/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0060/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0061/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0062/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0063/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0064/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0065/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0066/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0067/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0068/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0069/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0070/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0071/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0072/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0073/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0074/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0075/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0076/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0077/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0078/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0079/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0080/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0081/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0082/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0083/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0084/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0085/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0086/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0087/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0088/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0089/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0090/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0091/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0092/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0093/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0094/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0095/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0096/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0097/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0098/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0099/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0100/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0101/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0102/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0103/outputs/20250918kraken_viral/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in create_se(pre_meta[["new_meta"]], file_column = "kraken_matrix_viral", : There are
## some NAs in this data, the 'handle_nas' parameter may be required.
## Matched 487 annotations and counts.
## Saving the summarized experiment to 'se.rda'.
## The final summarized experiment has 487 rows and 107 columns.
hu_kraken_viral <- set_conditions(hu_kraken_viral, fact = "sample_type") %>%
  set_batches("detectionparasiteby7sl")
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
## The number of samples by batch are:
## 
## negative positive  unknown 
##       63       11       29
kraken_viral_norm <- normalize(hu_kraken_viral, filter = TRUE, norm = "cpm", transform = "log2")
## Removing 0 low-count genes (487 remaining).
## Did not recognize the normalization, leaving the table alone.
##   Recognized normalizations include: 'qsmooth', 'sf', 'sf2', 'vsd', 'quant',
##   'tmm', 'qsmooth_median', 'upperquartile', and 'rle.'
## transform_counts: Found 45295 values equal to 0, adding 1 to the matrix.
plot_corheat(kraken_viral_norm)
## A heatmap of pairwise sample correlations ranging from: 
## 0.745956883236431 to 0.973829842329974.

plot_disheat(kraken_viral_norm)
## A heatmap of pairwise sample distances ranging from: 
## 7.3460130601336 to 25.9738855355352.

plot_pca(kraken_viral_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by nasal swab, PBMCs, skin biopsy healthy, skin biopsy non-lesion, skin biopsy scar, WBCs
## Shapes are defined by negative, positive, unknown.

nasal_kraken_viral <- subset_se(hu_kraken_viral, subset = "condition=='nasal swab'")
nasal_norm <- normalize(nasal_kraken_viral, filter = TRUE, norm = "cpm", transform = "log2")
## Removing 0 low-count genes (487 remaining).
## Did not recognize the normalization, leaving the table alone.
##   Recognized normalizations include: 'qsmooth', 'sf', 'sf2', 'vsd', 'quant',
##   'tmm', 'qsmooth_median', 'upperquartile', and 'rle.'
## transform_counts: Found 8804 values equal to 0, adding 1 to the matrix.
plot_corheat(nasal_norm)
## A heatmap of pairwise sample correlations ranging from: 
## 0.765126924228018 to 0.959000311538253.

hu_kraken_bacteria <- create_se(pre_meta[["new_meta"]], file_column = "kraken_matrix_bacterial",
                       handle_na = "zero")
## Reading the sample metadata.
## Checking the state of the condition column.
## Checking the state of the batch column.
## Checking the condition factor.
## The sample definitions comprises: 103 rows(samples) and 107 columns(metadata fields).
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0002/outputs/02kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0009/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0010/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0011/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0018/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0019/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0020/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0012/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0013/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0014/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0021/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0022/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0023/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0015/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0016/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0017/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0024/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0025/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0026/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0038/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0006/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0007/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0008/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0005/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0004/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0003/outputs/02kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0027/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0028/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0029/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0030/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0031/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0032/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0035/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0033/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0034/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0036/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0037/outputs/06kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0039/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0040/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0041/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0042/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0043/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0044/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0045/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0046/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0047/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0048/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0049/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0050/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0051/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0052/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0053/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0054/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0055/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0056/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0057/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0058/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0059/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0060/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0061/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0062/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0063/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0064/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0065/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0066/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0067/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0068/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0069/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0070/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0071/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0072/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0073/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0074/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0075/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0076/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0077/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0078/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0079/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0080/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0081/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0082/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0083/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0084/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0085/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0086/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0087/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0088/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0089/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0090/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0091/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0092/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0093/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0094/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0095/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0096/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0097/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0098/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0099/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0100/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0101/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0102/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in first_rownames != current_rownames: longer object length is not a multiple of shorter
## object length
## Warning in read_counts(ids, files, countdir = countdir, file_type = file_type, : The file:
## /z1/scratch/atb/rnaseq/lpanamensis_persistence_2023/preprocessing/PRHU0103/outputs/20250918kraken_bacteria/kraken_report_matrix.tsv
## has mismatched rownames.
## Warning in create_se(pre_meta[["new_meta"]], file_column = "kraken_matrix_bacterial", : There are
## some NAs in this data, the 'handle_nas' parameter may be required.
## Matched 1754 annotations and counts.
## Saving the summarized experiment to 'se.rda'.
## The final summarized experiment has 1754 rows and 107 columns.
hu_kraken_bacteria <- set_conditions(hu_kraken_bacteria, fact = "sample_type") %>%
  set_batches("detectionparasiteby7sl")
## The numbers of samples by condition are:
## 
##             nasal swab                  PBMCs    skin biopsy healthy skin biopsy non-lesion 
##                     20                     25                     15                      4 
##       skin biopsy scar                   WBCs 
##                     16                     23
## The number of samples by batch are:
## 
## negative positive  unknown 
##       63       11       29
kraken_bacteria_norm <- normalize(hu_kraken_bacteria, filter = TRUE,
                                  norm = "cpm", transform = "log2")
## Removing 0 low-count genes (1754 remaining).
## Did not recognize the normalization, leaving the table alone.
##   Recognized normalizations include: 'qsmooth', 'sf', 'sf2', 'vsd', 'quant',
##   'tmm', 'qsmooth_median', 'upperquartile', and 'rle.'
## transform_counts: Found 88803 values equal to 0, adding 1 to the matrix.
plot_corheat(kraken_bacteria_norm)
## A heatmap of pairwise sample correlations ranging from: 
## 0.604850876191328 to 0.934803391036582.

plot_disheat(kraken_bacteria_norm)
## A heatmap of pairwise sample distances ranging from: 
## 38.2027362700424 to 129.211351296268.

plot_pca(kraken_bacteria_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by nasal swab, PBMCs, skin biopsy healthy, skin biopsy non-lesion, skin biopsy scar, WBCs
## Shapes are defined by negative, positive, unknown.
## Warning in MASS::cov.trob(data[, vars], wt = weight * nrow(data)): Probable convergence failure
## Warning in MASS::cov.trob(data[, vars], wt = weight * nrow(data)): Probable convergence failure

16 Nasal as a proxy for everything else

In the beginning of this document, I created a peculiar factor out of the nasal sample 7SL state and applied its result to every other sample for each person; thus a person who was positive for the nasal sample was deemed positive for everything. Let us see what that looks like…

nasal_7sl_se <- set_conditions(hu_se_salmon, fact = "nasal_7sl_status")
## The numbers of samples by condition are:
## 
## negative positive 
##       84       19
nasal_7sl_hisat_se <- set_conditions(hu_se_hisat_genes, fact = "nasal_7sl_status")
## Error in `h()`:
## ! error in evaluating the argument 'exp' in selecting a method for function 'set_conditions': object 'hu_se_hisat_genes' not found
nasal_7sl_se_nb <- normalize(nasal_7sl_se, transform = "log2", convert = "cpm", filter = TRUE,
                             batch = "svaseq")
## Removing 3906 low-count genes (10508 remaining).
## transform_counts: Found 213491 values less than 0.
## transform_counts: Found 213491 values equal to 0, adding 1 to the matrix.
plot_pca(nasal_7sl_se_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative, positive
## Shapes are defined by mRNA, RZ.

nasal_7sl_de <- all_pairwise(nasal_7sl_se, filter = TRUE,
                             model_svs = "svaseq", model_fstring = "~ 0 + condition")
## negative positive 
##       84       19
## Removing 3906 low-count genes (10508 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 680865 entries to zero.
## This received a matrix of SVs.
## Error in DESeqDataSet(se, design = design, ignoreRank) : 
##   some values in assay are not integers
## conditions
## negative positive 
##       84       19
## conditions
## negative positive 
##       84       19
## conditions
## negative positive 
##       84       19
nasal_7sl_de
## A pairwise differential expression with results from: basic, deseq, ebseq, edger, limma, noiseq.
## This used a surrogate/batch estimate from: svaseq.
## The primary analysis performed 1 comparisons.
## The logFC agreement among the methods follows:
##                 pstv_vs_ng
## basic_vs_dream      0.5235
## basic_vs_ebseq      0.4216
## basic_vs_edger      0.3924
## basic_vs_limma      0.5050
## basic_vs_noiseq     0.5955
## dream_vs_ebseq      0.3986
## dream_vs_edger      0.6788
## dream_vs_limma      0.9221
## dream_vs_noiseq     0.5671
## ebseq_vs_edger      0.6263
## ebseq_vs_limma      0.3332
## ebseq_vs_noiseq     0.6965
## edger_vs_limma      0.6006
## edger_vs_noiseq     0.6471
## limma_vs_noiseq     0.5301
nasal_7sl_hisat_de <- all_pairwise(nasal_7sl_hisat_se, filter = TRUE,
                                   model_svs = "svaseq", model_fstring = "~ 0 + condition")
## Error in `h()`:
## ! error in evaluating the argument 'object' in selecting a method for function 'pData': object 'nasal_7sl_hisat_se' not found
nasal_7sl_hisat_de
## Error:
## ! object 'nasal_7sl_hisat_de' not found
nasal_7sl_table <- combine_de_tables(nasal_7sl_de, excel = "excel/nasal_7sl_proxy_table.xlsx")
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.
nasal_7sl_table
## A set of combined differential expression results.
##                  table deseq_sigup deseq_sigdown edger_sigup edger_sigdown limma_sigup
## 1 positive_vs_negative           0             0          50            54          25
##   limma_sigdown
## 1            10
## Only  has information, cannot create an UpSet.
## Plot describing unique/shared genes in a differential expression table.
## NULL
nasal_7sl_hisat_table <- combine_de_tables(nasal_7sl_hisat_de, excel = "excel/nasal_7sl_proxy_table.xlsx")
## Deleting the file excel/nasal_7sl_proxy_table.xlsx before writing the tables.
## Error:
## ! object 'nasal_7sl_hisat_de' not found
nasal_7sl_hisat_table
## Error:
## ! object 'nasal_7sl_hisat_table' not found

Oh, Maria Adelaida was actually looking only for the PBMC samples.

pbmc_nasal_7sl_se <- subset_se(hu_se_salmon, subset = "condition=='PBMCs'") %>%
  set_conditions(fact = "nasal_7sl_status")
## The numbers of samples by condition are:
## 
## negative positive 
##       21        4
pbmc_nasal_7sl_hisat_se <- subset_se(hu_se_hisat_gene, subset = "condition=='PBMCs'") %>%
  set_conditions(fact = "nasal_7sl_status")
## The numbers of samples by condition are:
## 
## negative positive 
##       21        4
pbmc_nasal_hisat_norm <- normalize(pbmc_nasal_7sl_hisat_se, transform = "log2", convert = "cpm",
                                   norm = "quant", filter = TRUE)
## Removing 9124 low-count genes (12447 remaining).
## transform_counts: Found 39 values equal to 0, adding 1 to the matrix.
plot_pca(pbmc_nasal_hisat_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative, positive
## Shapes are defined by mRNA.

pbmc_nasal_hisat_nb <- normalize(pbmc_nasal_7sl_hisat_se, transform = "log2", convert = "cpm",
                                 batch = "svaseq", filter = "simple")
## Removing 3931 low-count genes (17640 remaining).
## transform_counts: Found 20961 values less than 0.
## transform_counts: Found 20961 values equal to 0, adding 1 to the matrix.
plot_pca(pbmc_nasal_hisat_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative, positive
## Shapes are defined by mRNA.

pbmc_nasal_7sl_de <- all_pairwise(pbmc_nasal_7sl_se, filter = "simple",
                                  model_svs = "svaseq", model_fstring = "~ 0 + condition")
## negative positive 
##       21        4
## Removing 4969 low-count genes (9445 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 130146 entries to zero.
## This received a matrix of SVs.
## Error in DESeqDataSet(se, design = design, ignoreRank) : 
##   some values in assay are not integers
## Warning in variancePartition::voomWithDreamWeights(counts = data, formula = model_fstring, : The maximum precision weight is 2.004e+12, suggesting a poor smoothing fit
## on the mean-variance plot for large expression values. Such large weights can
## have unexpected effects downstream.  Consider examining the mean-variance plot
## and reducing the span parameter.
## conditions
## negative positive 
##       21        4
## conditions
## negative positive 
##       21        4
## conditions
## negative positive 
##       21        4
pbmc_nasal_7sl_table <- combine_de_tables(pbmc_nasal_7sl_de, excel = "excel/pbmc_nasal_proxy.xlsx")
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.

17 TODO 202512

Repeat this nasal proxy test using each of the other cell types.

The factors of likely interest are: “wbcs” “nasal swab” ideally both “skin biopsy healthy” and “skin biopsy scar” but perhaps only “skin biopsy”.

wbc_nasal_7sl_se <- subset_se(hu_se_salmon, subset = "condition=='WBCs'") %>%
  set_conditions(fact = "nasal_7sl_status")
## The numbers of samples by condition are:
## 
## negative positive 
##       19        4
wbc_nasal_7sl_hisat_se <- subset_se(hu_se_hisat_gene, subset = "condition=='WBCs'") %>%
  set_conditions(fact = "nasal_7sl_status")
## The numbers of samples by condition are:
## 
## negative positive 
##       19        4
wbc_nasal_hisat_norm <- normalize(wbc_nasal_7sl_hisat_se, transform = "log2", convert = "cpm",
                                  filter = "simple", norm = "quant")
## Removing 4161 low-count genes (17410 remaining).
## transform_counts: Found 52115 values equal to 0, adding 1 to the matrix.
plot_pca(wbc_nasal_hisat_norm)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative, positive
## Shapes are defined by mRNA.

wbc_nasal_hisat_nb <- normalize(wbc_nasal_7sl_hisat_se, transform = "log2", convert = "cpm",
                                  filter = "simple", batch = "svaseq")
## Removing 4161 low-count genes (17410 remaining).
## transform_counts: Found 19565 values less than 0.
## transform_counts: Found 19565 values equal to 0, adding 1 to the matrix.
plot_pca(wbc_nasal_hisat_nb)
## The result of performing a fast_svd dimension reduction.
## The x-axis is PC1 and the y-axis is PC2
## Colors are defined by negative, positive
## Shapes are defined by mRNA.

wbc_nasal_7sl_de <- all_pairwise(wbc_nasal_7sl_se, filter = "simple",
                                  model_svs = "svaseq", model_fstring = "~ 0 + condition")
## negative positive 
##       19        4
## Removing 5290 low-count genes (9124 remaining).
## Basic step 0/3: Normalizing data.
## Basic step 0/3: Converting data.
## I think this is failing? SummarizedExperiment
## Basic step 0/3: Transforming data.
## Setting 114757 entries to zero.
## This received a matrix of SVs.
## Error in DESeqDataSet(se, design = design, ignoreRank) : 
##   some values in assay are not integers
## conditions
## negative positive 
##       19        4
## conditions
## negative positive 
##       19        4
## conditions
## negative positive 
##       19        4
wbc_nasal_7sl_table <- combine_de_tables(wbc_nasal_7sl_de, excel = "excel/wbc_nasal_proxy.xlsx")
## Looking for subscript invalid names, start of extract_keepers.
## Looking for subscript invalid names, end of extract_keepers.

18 Upload count tables for Mariana

ready <- tar_meta_column(hu_se_hisat_gene, column = "hisat_count_table_hg38_115")
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0001/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0002/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0009/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0010/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0011/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0018/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0019/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0020/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0012/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0013/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0014/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0021/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0022/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0023/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0015/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0016/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0017/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0024/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0025/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0026/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0038/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0006/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0007/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0008/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0005/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0004/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0003/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0027/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0028/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0029/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0030/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0031/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0032/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0035/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0033/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0034/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0036/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0037/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0039/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0040/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0041/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0042/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0043/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0044/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0045/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0046/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0047/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0048/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0049/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0050/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0051/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0052/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0053/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0054/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0055/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0056/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0057/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0058/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0059/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0060/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0061/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0062/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0063/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0064/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0065/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0066/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0067/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0068/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0069/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0070/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0071/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0072/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0073/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0074/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0075/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0076/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0077/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0078/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0079/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0080/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0081/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0082/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0083/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0084/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0085/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0086/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0087/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0088/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0089/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0090/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0091/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0092/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0093/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0094/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0095/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0096/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0097/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0098/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0099/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0100/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0101/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0102/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning in utils::tar(output, files = include_list, compression = compression): storing paths of more than 100 bytes is not portable:
##   'preprocessing/PRHU0103/outputs/20250918hisat_hg38_115/hg38_115_genome-paired_s2_gene_ID_fcounts.csv.xz'
## Warning: invalid uid value replaced by that for user 'nobody'
ready <- tar_meta_column(hu_se_hisat_gene, column = "salmon_count_table_hg38_115")
## Warning: invalid uid value replaced by that for user 'nobody'
LS0tCnRpdGxlOiAiRXhhbWluaW5nIGh1bWFuIHNhbXBsZXMiCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCmJpYmxpb2dyYXBoeTogYXRiLmJpYgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGZpZ19oZWlnaHQ6IDcKICAgIGZpZ193aWR0aDogNwogICAgaGlnaGxpZ2h0OiB6ZW5idXJuCiAgICBrZWVwX21kOiBmYWxzZQogICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogICAgdGhlbWU6IHJlYWRhYmxlCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQotLS0KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmJvZHksIHRkIHsKICBmb250LXNpemU6IDE2cHg7Cn0KY29kZS5yewogIGZvbnQtc2l6ZTogMTZweDsKfQpwcmUgewogIGZvbnQtc2l6ZTogMTZweAp9CmJvZHkgLm1haW4tY29udGFpbmVyIHsKICBtYXgtd2lkdGg6IDE2MDBweDsKfQo8L3N0eWxlPgoKYGBge3Igb3B0aW9ucywgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShocGdsdG9vbHMpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShyZXRpY3VsYXRlKQp0dCA8LSB0cnkoZGV2dG9vbHM6OmxvYWRfYWxsKCJ+L2hwZ2x0b29scyIpKQprbml0cjo6b3B0c19rbml0JHNldCgKICBwcm9ncmVzcyA9IFRSVUUsIHZlcmJvc2UgPSBUUlVFLCB3aWR0aCA9IDkwLCBlY2hvID0gVFJVRSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVycm9yID0gVFJVRSwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDgsIGZpZy5yZXRpbmEgPSAyLAogIG91dC53aWR0aCA9ICIxMDAlIiwgZGV2ID0gInBuZyIsCiAgZGV2LmFyZ3MgPSBsaXN0KHBuZyA9IGxpc3QodHlwZSA9ICJjYWlyby1wbmciKSkpCm9sZF9vcHRpb25zIDwtIG9wdGlvbnMoZGlnaXRzID0gNCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLCBrbml0ci5kdXBsaWNhdGUubGFiZWwgPSAiYWxsb3ciKQpnZ3Bsb3QyOjp0aGVtZV9zZXQoZ2dwbG90Mjo6dGhlbWVfYncoYmFzZV9zaXplID0gMTIpKQp2ZXIgPC0gIjIwMjQwNSIKcHJldmlvdXNfZmlsZSA8LSAiIgp2ZXIgPC0gZm9ybWF0KFN5cy5EYXRlKCksICIlWSVtJWQiKQoKIyN0bXAgPC0gc20obG9hZG1lKGZpbGVuYW1lPXBhc3RlMChnc3ViKHBhdHRlcm49IlxcLlJtZCIsIHJlcGxhY2U9IiIsIHg9cHJldmlvdXNfZmlsZSksICItdiIsIHZlciwgIi5yZGEueHoiKSkpCnJtZF9maWxlIDwtICJodW1hbl9zYW1wbGVzXzIwMjUuUm1kIgpgYGAKCiMgVE9ETwoKIyMgMjAyNjAyCgoxLiAgQ3JlYXRlIGEgZmFjdG9yIG9mIHtkZXRlY3Rpb259X3tsaWJyYXJ5X3R5cGV9IHNvIHRoYXQgd2UgaGF2ZSA0CiAgICBjb2xvcnMgdG8gdmlldyB0aGUgY2x1c3RlcmluZyBvZiBhbGwgdG9nZXRoZXIuCjIuICBDcmVhdGUgc2VwYXJhdGUgYmxvY2tzIGZvciB0aGUgZGlmZmVyZW50IGxpYnJhcnkgdHlwZXMgZXRjIHRvIG1ha2UKICAgIGl0IGVhc2llciB0byBzdGVwIHRocm91Z2guCjMuICBFeHBsaWNpdCBrcmFrZW4yIG9mIG5hc2FsIGFuZCBza2luIHNhbXBsZXMgLS0gcG90ZW50aWFsbHkgdXNlCiAgICBrbWNwIGFuZC9vciBkZUJydWlqbiBtZXRob2RzCgojIyAyMDI1MTEKCjEuICBXZSBoYXZlIHNvbWUgc2FtcGxlcyB3aGljaCBhcmUgZGVmaW5lZCBhcyBwZXJzaXN0ZW50IHZpYSA3U0wuICBDYW4KICAgIHdlIHNlZSBzb21lIHJlYWRzIGluIHRob3NlIHNhbXBsZXM/CjIuICBTZW5kIGZpbGUgd2l0aCBtYXBwZWQgcmVhZHMgcGVyIHNhbXBsZSBmb3IgYWxsIGh1bWFuIHNhbXBsZXMuCjMuICBRdWV1ZSBTTCByZWFkIGNvdW50ZXIgZm9yIGFsbCBodW1hbiBzYW1wbGVzLgo0LiAgQWxsIHNhbXBsZXMgaGF2ZSBuYXNhbCwgc2tpbiwgUEJNQzsgYWxsIHBhdGllbnRzIGFyZSBuYXNhbCArIG9yCiAgICBuYXNhbCAtOyBwZXJmb3JtIGNvbnRyYXN0cyBvZiBuYXNhbCsvbmFzYWwtIG9mIHRoZSBQQk1DIHNhbXBsZXMuCiAgICBGb3IgdGhlIFBCTUMgc2FtcGxlcywgcmVjYXN0IHRoZW0gYXMgKy8tCgojIyAyMDI2MDEKCjEuICA3U0wgcG9zaXRpdmUgdnMgbmVnYXRpdmUgZm9yCjIuICBBZGQgcGxvdCBvZiB0cmFuc2NyaXB0b21lIGNsdXN0ZXJpbmcgb2YgbmFzYWwgc3dhYnMgYmV0d2VlbiBuYXNhbAogICAgcG9zaXRpdmUvbmVnYXRpdmUgd2l0aCB0aGUgY2F2ZWF0IHRoYXQgdGhlIGFyZSBvbmx5IDIgcG9zaXRpdmVzLCA4CiAgICBuZWdhdGl2ZXMsIGFuZCAxIHVuZGV0ZXJtaW5lZCBpbiB0aGUgc3RyYW5kZWQgbGlicmFyeTsgdGhlCiAgICByaWJvemVybyBoYXZlIDUgcG9zaXRpdmUsIDMgbmVnYXRpdmUsIGFuZCAxIHVuZGV0ZXJtaW5lZC4KMy4gIENyZWF0ZSBhIHJlbGF0aXZlIGFidW5kYW5jZSBvZiBiYWN0ZXJpYS92aXJ1c2VzIG9ic2VydmVkIGluIHRoZQogICAgbmFzc2FsIHNhbXBsZXM7IGNvdW50aW5nIGF0IGdlbnVzLgoKTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgc3BsaXR0aW5nIHRoZSBkYXRhIGludG8gNCBncm91cHM6IHNhbG1vbityeiwKc2FsbW9uK21ybmEsIGhpc2F0K3J6LCBoaXNhdCttcm5hLgoKIyBDaGFuZ2Vsb2cKCiMjIDIwMjUxMQoKRm9sbG93aW5nIG15IGNvbnZlcnNhdGlvbiB3aXRoIE1hcmlhIEFkZWxhaWRhLCBJIGRvd25sb2FkZWQgYSBuZXcgY29weQpvZiBvdXIgb25saW5lIHNhbXBsZSBzaGVldCBhbmQgbWFkZSBhIHN1Yi1jb3B5IHdpdGggb25seSB0aGUgaHVtYW4Kc2FtcGxlcy4gIEl0IGlzIG5hbWVkIChjcmVhdGl2ZWx5KSBzYW1wbGVfc2hlZXRzL2h1bWFuX3NhbXBsZXNfMjAyNTExLnhsc3gKCiMgSW50cm9kdWN0aW9uCgpJIHdhbnQgdG8gdXNlIHRoaXMgZG9jdW1lbnQgdG8gZXhhbWluZSBvdXIgZmlyc3Qgcm91bmQgb2YgcGVyc2lzdGVuY2UKc2FtcGxlcy4gIEkgY2hlY2tlZCBteSBlbWFpbCBmcm9tIE5hamliIGFuZCBkaWQgbm90IGZpbmQgYSBzYW1wbGUKc2hlZXQgYnV0IGRpZCBmaW5kIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSB0aHJlZSBzYW1wbGUgdHlwZXMgd2UgZXhwZWN0LgoKSW4gcHJlcGFyYXRpb24gZm9yIHRoaXMsIEkgZG93bmxvYWRlZCBhIG5ldyBoZzM4IGdlbm9tZS4gIFNpbmNlIHRoZQpwYW5hbWVuc2lzIGFzZW1ibHkgaGFzIG5vdCBzaWduaWZpY2FudGx5IGNoYW5nZWQgKGV4Y2VwdGluZyB0aGUKcHV0YXRpdmUgbG9uZyByZWFkIGdlbm9tZSB3aGljaCBJIGhhdmUgbm90IHlldCBzZWVuKSwgSSBhbSBqdXN0IHVzaW5nCnRoZSBzYW1lIG9uZS4KCiMgTG9hZGluZyBhbm5vdGF0aW9uCgpUaGUgaGczOCBnZW5vbWUgSSBnb3QgaXMgYnJhbmQgbmV3ICgyMDI0MDUpLCBzbyBkbyBub3QgdXNlIHRoZSBhcmNoaXZlCmZvciBhIHdoaWxlLgoKYGBge3J9CiMjIE9rLCBzbyB1c2Vhc3QuZW5zZW1ibCBpcyBmYWlsaW5nIHRvZGF5LCBsZXQgdXMgdXNlIHRoZSBqYW4yMDI0IGFyY2hpdmU/CiNoc19hbm5vdCA8LSBsb2FkX2Jpb21hcnRfYW5ub3RhdGlvbnMoYXJjaGl2ZSA9IEZBTFNFLCBzcGVjaWVzID0gImhzYXBpZW5zIikKIyMgU2VlbXMgbGlrZSB0aGUgMjAyNDAxIGFyY2hpdmUgaXMgYSBnb29kIGNob2ljZSwgaXQgaXMgZXhwbGljaXRseSB0aGUgaGczOF8xMTEgcmVsZWFzZS4KIyMgYW5kIGl0IGlzIHdhYWFhYXkgZmFzdGVyIChsaWtlIDEwMHgpIHRoYW4gdXNlYXN0IHJpZ2h0IG5vdy4KaHNfYW5ub3QgPC0gbG9hZF9iaW9tYXJ0X2Fubm90YXRpb25zKGFyY2hpdmUgPSBGQUxTRSwgc3BlY2llcyA9ICJoc2FwaWVucyIsIG92ZXJ3cml0ZSA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IDIwMjUsIG1vbnRoID0gIjA4IikKCnBhbmFtZW5zaXNfb3JnZGJfaWR4IDwtIGdyZXAocGF0dGVybiA9ICJeb3JnLitwYW5hbWVuLitNSE9NLitkYiQiLCB4ID0gcm93bmFtZXMoaW5zdGFsbGVkLnBhY2thZ2VzKCkpKQpwYW5hbWVuc2lzX29yZ2RiIDwtIHRhaWwocm93bmFtZXMoaW5zdGFsbGVkLnBhY2thZ2VzKCkpW3BhbmFtZW5zaXNfb3JnZGJfaWR4XSwgbiA9IDEpCmxwX2Fubm90IDwtIGxvYWRfb3JnZGJfYW5ub3RhdGlvbnMocGFuYW1lbnNpc19vcmdkYiwga2V5dHlwZSA9ICJnaWQiKQpgYGAKCiMjIG9yZy5IcyBhbm5vdGF0aW9ucwoKUmVjZW50bHkgdGhlcmUgaGF2ZSBiZWVuIHByb2JsZW1zIGNvbm5lY3Rpb24gdG8gZW5zZW1ibCwgSSB0aGluawp0aGVyZWZvcmUgSSB3YW50IHRvIGhhdmUgZmFsbGJhY2sgYW5ub3RhdGlvbnMgdXNpbmcgb3VyIGxvY2FsIGRiaQphbm5vdGF0aW9uIGRhdGFiYXNlcy4KCmBgYHtyfQpoc19kYmkgPC0gbG9hZF9vcmdkYl9hbm5vdGF0aW9ucygpCmBgYAoKVGhpcyBpcyBhIGxpdHRsZSBzaWxseSwgYnV0IEkgYW0gZ29pbmcgdG8gcmVsb2FkIHRoZSBhbm5vdGF0aW9ucyB1c2luZwp0aGUgcHJldmlvdXMgaW52b2NhdGlvbiB0byBleHRyYWN0IHRoZSBhbm5vdGF0aW9uIHRhYmxlIHdpdGhvdXQgaGF2aW5nCnRvIHRoaW5rLiAgVGhlIHByZXZpb3VzIGJsb2NrIGxvYWRzIHRoZSBvcmdkYiBmb3IgbWUsIHNvIEkgY2FuIGp1c3QKdXNlIHRoYXQgdG8gZ2V0IHRoZSBmdW4gYW5ub3RhdGlvbnMuCgpgYGB7cn0KbHBfYW5ub3QgPC0gbG9hZF9vcmdkYl9hbm5vdGF0aW9ucyhwYW5hbWVuc2lzX29yZ2RiLCBrZXl0eXBlID0gImdpZCIsIGZpZWxkcyA9ICJeYW5ub3QiKQpgYGAKCiMgQ29sbGVjdCBwcmVwcm9jZXNzZWQgbWV0YWRhdGEKClVzZSBteSBuZXcgc2FtcGxlIHNoZWV0IGhlcmUuCgpgYGB7cn0KY3VycmVudF9zYW1wbGVzaGVldCA8LSAic2FtcGxlX3NoZWV0cy9odW1hbl9zYW1wbGVzXzIwMjUxMS54bHN4IgpmaXJzdF9zcGVjIDwtIG1ha2Vfcm5hc2VxX3NwZWMoKQppbnB1dCA8LSByZWFkX21ldGFkYXRhKGN1cnJlbnRfc2FtcGxlc2hlZXQpCmNvbG5hbWVzKGlucHV0KQpzdW1tYXJ5KGFzLmZhY3RvcihpbnB1dFtbImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXV0pKQoKcHJlX21ldGEgPC0gZ2F0aGVyX3ByZXByb2Nlc3NpbmdfbWV0YWRhdGEoCiAgc3RhcnRpbmdfbWV0YWRhdGEgPSBjdXJyZW50X3NhbXBsZXNoZWV0LCBpZF9jb2x1bW4gPSAiaHBnbF9pZGVudGlmaWVyIiwKICBzcGVjaWZpY2F0aW9uID0gZmlyc3Rfc3BlYywgbmV3X21ldGFkYXRhID0gInBlcnNpc3RlbmNlX2h1X21vZGlmaWVkLnhsc3giLAogIGJhc2VkaXIgPSAicHJlcHJvY2Vzc2luZyIsIHNwZWNpZXMgPSBjKCJoZzM4XzExNSIsICJscGFuYW1lbnNpc19taG9tY29sX3Y2OCIpKQpzdW1tYXJ5KGFzLmZhY3RvcihwcmVfbWV0YVtbIm5ld19tZXRhIl1dW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSkpCgptb2RpZmllZF9tZXRhIDwtIHByZV9tZXRhW1sibmV3X21ldGEiXV0KIyMgQWRkZWQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGdhdGhlcl9wcmVwcm9jZXNzaW5nX21ldGFkYXRhKCkKcm93bmFtZXMobW9kaWZpZWRfbWV0YSkgPC0gbWFrZS5uYW1lcyhtb2RpZmllZF9tZXRhW1siaHBnbF9pZGVudGlmaWVyIl1dLCB1bmlxdWUgPSBUUlVFKQoKIyMgRklYTUU6IDIwMjUxMTogSSBicm9rZSBzb21ldGhpbmcgaW4gc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIGl0IGlzIHB1bGxpbmcKIyMgdGhlIHdyb25nIGluZm9ybWF0aW9uIGZvciBudW1iZXIgb2Ygb2JzZXJ2ZWQgZ2VuZXMuCmhlYWQobW9kaWZpZWRfbWV0YSkKaGVhZChtb2RpZmllZF9tZXRhW1sic2FsbW9uX29ic2VydmVkX2dlbmVzX2hnMzhfMTE1Il1dKQoKc3VtbWFyeShhcy5mYWN0b3IobW9kaWZpZWRfbWV0YVtbImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXV0pKQptb2RpZmllZF9tZXRhW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSA8LSBzYW5pdGl6ZV9tZXRhZGF0YShtb2RpZmllZF9tZXRhW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSkKc3VtbWFyeShtb2RpZmllZF9tZXRhW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSkKYGBgCgpDcmVhdGUgYSBmYWN0b3Igb2YgdGhlIDdTTCBkZXRlY3Rpb24gb2YgbmFzYWwgc2FtcGxlcy4gIE5vdGUsIHdlIG5lZWQKdG8gcmVjYXN0IHRoZSBOQXMgYXMgdW5kZWZpbmVkLiAgSSB3b3VsZCBoYXZlIHN3b3JuIHRoYXQgbXkgZ2F0aGVyCmZ1bmN0aW9uIHdvdWxkIGRvIHRoYXQ/CgpgYGB7cn0KbW9kaWZpZWRfbWV0YVtbIm5hc2FsXzdzbF9zdGF0dXMiXV0gPC0gbW9kaWZpZWRfbWV0YVtbImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXV0KCm5hc2FsX3NhbXBsZXMgPC0gbW9kaWZpZWRfbWV0YVtbInNhbXBsZV90eXBlIl1dID09ICJuYXNhbCBzd2FiIgpzdW1tYXJ5KG5hc2FsX3NhbXBsZXMpCnNsX3Bvc2l0aXZlIDwtIG1vZGlmaWVkX21ldGFbWyJuYXNhbF83c2xfc3RhdHVzIl1dID09ICJwb3NpdGl2ZSIKc3VtbWFyeShzbF9wb3NpdGl2ZSkKbmFzYWxfcG9zaXRpdmUgPC0gbmFzYWxfc2FtcGxlcyAmIHNsX3Bvc2l0aXZlCnN1bW1hcnkobmFzYWxfcG9zaXRpdmUpCm5hc2FsX3Bvc2l0aXZlX3NhbXBsZXMgPC0gcm93bmFtZXMobW9kaWZpZWRfbWV0YSlbbmFzYWxfcG9zaXRpdmVdCm5hc2FsX3Bvc2l0aXZlX3Blb3BsZSA8LSBtb2RpZmllZF9tZXRhW25hc2FsX3Bvc2l0aXZlX3NhbXBsZXMsICJwYXJ0aWNpcGFudF9jb2RlIl0KbmFzYWxfcG9zaXRpdmVfcGVvcGxlCm5hc2FsX3Bvc2l0aXZlX3Blb3BsZV9zYW1wbGVzIDwtIG1vZGlmaWVkX21ldGFbWyJwYXJ0aWNpcGFudF9jb2RlIl1dICVpbiUgbmFzYWxfcG9zaXRpdmVfcGVvcGxlCm1vZGlmaWVkX21ldGFbWyJuYXNhbF83c2xfc3RhdHVzIl1dIDwtICJuZWdhdGl2ZSIKbW9kaWZpZWRfbWV0YVtuYXNhbF9wb3NpdGl2ZV9wZW9wbGVfc2FtcGxlcywgIm5hc2FsXzdzbF9zdGF0dXMiXSA8LSAicG9zaXRpdmUiCm1vZGlmaWVkX21ldGFbWyJuYXNhbF83c2xfc3RhdHVzIl1dIDwtIGFzLmZhY3Rvcihtb2RpZmllZF9tZXRhW1sibmFzYWxfN3NsX3N0YXR1cyJdXSkKc3VtbWFyeShtb2RpZmllZF9tZXRhW1sibmFzYWxfN3NsX3N0YXR1cyJdXSkKYGBgCgojIyBBZGQgY29tYmluYXRpb24gb2YgZGV0ZWN0aW9uIGFuZCBsaWJyYXJ5IHR5cGUKCkFsc28gYWRkIGEgY2F0ZWdvcnkgc2VwYXJhdGluZyBhbGwgc2tpbiBzYW1wbGVzIGZyb20gZXZlcnl0aGluZyBlbHNlLgoKYGBge3J9Cm1vZGlmaWVkX21ldGFbWyJkZXRlY3Rpb25fdHlwZSJdXSA8LSBhcy5mYWN0b3IocGFzdGUwKG1vZGlmaWVkX21ldGFbWyJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIl1dLCAiXyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkX21ldGFbWyJsaWJyYXJ5X3R5cGUiXV0pKQoKc3VtbWFyeShtb2RpZmllZF9tZXRhW1siZGV0ZWN0aW9uX3R5cGUiXV0pCm1vZGlmaWVkX21ldGFbWyJza2lucCJdXSA8LSAibm90X3NraW4iCnNraW5faWR4IDwtIGdyZXBsKHggPSBtb2RpZmllZF9tZXRhW1sic2FtcGxlX3R5cGUiXV0sIHBhdHRlcm4gPSAiXnNraW4iKQpzdW1tYXJ5KHNraW5faWR4KQptb2RpZmllZF9tZXRhW3NraW5faWR4LCAic2tpbnAiXSA8LSAic2tpbiIKbW9kaWZpZWRfbWV0YVtbInNraW5wIl1dIDwtIGFzLmZhY3Rvcihtb2RpZmllZF9tZXRhW1sic2tpbnAiXV0pCmBgYAoKYGBge3IsIGV2YWw9RkFMU0V9Cmhpc2F0X2lkeCA8LSBncmVwKHBhdHRlcm4gPSAiXmhpc2F0IiwgeCA9IG5hbWVzKGZpcnN0X3NwZWMpKQpzZWNvbmRfc3BlYyA8LSBmaXJzdF9zcGVjW2hpc2F0X2lkeF0KcG9zdF9tZXRhIDwtIGdhdGhlcl9wcmVwcm9jZXNzaW5nX21ldGFkYXRhKAogIHN0YXJ0aW5nX21ldGFkYXRhID0gcHJlX21ldGFbWyJuZXdfbWV0YSJdXSwKICBzcGVjaWZpY2F0aW9uID0gc2Vjb25kX3NwZWMsIGJhc2VkaXIgPSAicHJlcHJvY2Vzc2luZy8yMDI0MDUiLCBzcGVjaWVzID0gImhnMzhfMTExIiwKICBuZXdfbWV0YWRhdGEgPSAic2FtcGxlX3NoZWV0cy90bXJjMl9wZXJzaXN0ZW5jZV8yMDI0MDVfbHBfaGcueGxzeCIpCgpib3RoX21ldGEgPC0gZ2F0aGVyX3ByZXByb2Nlc3NpbmdfbWV0YWRhdGEoCiAgc3RhcnRpbmdfbWV0YWRhdGEgPSAic2FtcGxlX3NoZWV0cy90bXJjX3BlcnNpc3RlbmNlXzIwMjQwNS54bHN4IiwKICBzcGVjaWZpY2F0aW9uID0gZmlyc3Rfc3BlYywKICBiYXNlZGlyID0gInByZXByb2Nlc3NpbmcvMjAyNDA1Iiwgc3BlY2llcz0gYygibHBhbmFtZW5zaXNfdjY4IiwgImhnMzhfMTExIiksCiAgbmV3X21ldGFkYXRhID0gInNhbXBsZV9zaGVldHMvdG1yY19wZXJzaXN0ZW5jZV8yMDI0MDVfYm90aC54bHN4IikKYGBgCgojIENvbGxlY3QgZ2VuZSBhbm5vdGF0aW9ucwoKSSBzaG91bGQgaGF2ZSBhbGwgbXkgbG9hZF94eXpfYW5ub3RhdGlvbiBmdW5jdGlvbnMgcmV0dXJuIHNvbWUgb2YgdGhlCnNhbWUgZWxlbWVudHMgaW4gdGhlaXIgcmV0bGlzdHMuCgpgYGB7cn0KbHBfZ2VuZXMgPC0gbHBfYW5ub3RbWyJnZW5lcyJdXQpoZ19nZW5lcyA8LSBoc19hbm5vdFtbImdlbmVfYW5ub3RhdGlvbnMiXV0KYGBgCgojIFF1aWNrIHBlZWsgYXQgdGhlIFNMIHNhbXBsZXMsIGhnMzggcmVsZWFzZSAxMTUKCiMjIEdhdGhlciB0aGUgdHJhbnNjcmlwdCBhbmQgZ2VuZSBhbm5vdGF0aW9ucy4KCmBgYHtyfQpoZ190eCA8LSBoc19hbm5vdFtbImFubm90YXRpb24iXV0KaGdfbWFwIDwtIGhzX2Fubm90W1siZ2VuZV90eF9tYXAiXV0KbHBfZ2VuZXMgPC0gbHBfYW5ub3RbWyJnZW5lcyJdXQpgYGAKCiMjIENyZWF0ZSBpbml0aWFsIGhpc2F0L3NhbG1vbiB0YWJsZXMKCmBgYHtyfQpodV9zZV9zYWxtb24gPC0gY3JlYXRlX3NlKG1vZGlmaWVkX21ldGEsIGdlbmVfaW5mbyA9IGhnX3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR4X2dlbmVfbWFwID0gaGdfbWFwLCBmaWxlX2NvbHVtbiA9ICJzYWxtb25fY291bnRfdGFibGVfaGczOF8xMTUiKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gInNhbXBsZV90eXBlIikgJT4lCiAgc2V0X2JhdGNoZXMoZmFjdCA9ICJsaWJyYXJ5X3R5cGUiKQoKaHVfc2VfaGlzYXRfZ2VuZSA8LSBjcmVhdGVfc2UobW9kaWZpZWRfbWV0YSwgZ2VuZV9pbmZvID0gaGdfZ2VuZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfY29sdW1uID0gImhpc2F0X2NvdW50X3RhYmxlX2hnMzhfMTE1IikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJzYW1wbGVfdHlwZSIpICU+JQogIHNldF9iYXRjaGVzKGZhY3QgPSAibGlicmFyeV90eXBlIikKYGBgCgojIyBGaWd1cmUgb3V0IHdoaWNoIHNhbXBsZXMgZG8gbm90IGhhdmUgN1NMIGNhdGVnb3JpZXMKCmBgYHtyfQp1bmRlZl83c2wgPC0gaXMubmEoY29sRGF0YShodV9zZV9zYWxtb24pW1siZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCJdXSkKY29sRGF0YShodV9zZV9zYWxtb24pW3VuZGVmXzdzbCwgImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXSA8LSAidW5rbm93biIKY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVt1bmRlZl83c2wsICJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIl0gPC0gInVua25vd24iCnNhbXBsZV83c2wgPC0gcGFzdGUwKGNvbERhdGEoaHVfc2Vfc2FsbW9uKVtbInNhbXBsZV90eXBlIl1dLCAiXyIsCiAgICAgICAgICAgICAgICAgICAgIGNvbERhdGEoaHVfc2Vfc2FsbW9uKVtbImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXV0pCnNhbXBsZV83c2wgPC0gZ3N1Yih4ID0gc2FtcGxlXzdzbCwgcGF0dGVybiA9ICJbWzpzcGFjZTpdXSIsIHJlcGxhY2VtZW50ID0gIl8iKQpjb2xEYXRhKGh1X3NlX3NhbG1vbilbWyJzYW1wbGVfN3NsIl1dIDwtIHNhbXBsZV83c2wKY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVtbInNhbXBsZV83c2wiXV0gPC0gc2FtcGxlXzdzbApgYGAKCiMjIEhlYWx0aHkgdnMgc2NhciBzYW1wbGVzCgpgYGB7cn0KaGVhbHRoeV92c19zY2FyIDwtIGdzdWIoeCA9IGNvbERhdGEoaHVfc2Vfc2FsbW9uKVtbInNhbXBsZV90eXBlIl1dLAogICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIl5za2luIGJpb3BzeSAiLCByZXBsYWNlbWVudCA9ICIiKQpjb2xEYXRhKGh1X3NlX3NhbG1vbilbWyJocyJdXSA8LSBoZWFsdGh5X3ZzX3NjYXIKY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVtbImhzIl1dIDwtIGhlYWx0aHlfdnNfc2NhcgpgYGAKCiMjIENsZWFuIHVwIG1pc3NpbmcgN1NMIGRldGVjdGlvbiBzYW1wbGVzCgpJIHRoaW5rIHRoZSBsYXN0IG9mIHRoZXNlIGhhcyBiZWVuIGZpeGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSB1cGRhdGVkCnRoaXMgc2hlZXQuCgpgYGB7cn0KdW5kZWZfN3NsIDwtIGlzLm5hKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIl1dKQpzdW1tYXJ5KHVuZGVmXzdzbCkKaWYgKHN1bSh1bmRlZl83c2wpKSB7CiAgY29sRGF0YShodV9zZV9zYWxtb24pW3VuZGVmXzdzbCwgImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXSA8LSAidW5rbm93biIKICBjb2xEYXRhKGh1X3NlX2hpc2F0X2dlbmUpW3VuZGVmXzdzbCwgImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXSA8LSAidW5rbm93biIKfSBlbHNlIHsKICBtZXNzYWdlKCJUaGVyZSBhcHBlYXIgdG8gYmUgbm8gbWlzc2luZyA3U0wgZW50cmllcy4iKQp9CmBgYAoKIyMgUHJpbnQgY3VycmVudCBzdGF0ZQoKYGBge3J9CnRhYmxlKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJsaWJyYXJ5X3R5cGUiXV0pCnRhYmxlKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJkZXRlY3Rpb25fdHlwZSJdXSkKdGFibGUoY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVtbImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXV0pCnRhYmxlKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJjbGluaWNhbF9wcmVzZW50YXRpb24iXV0pCmBgYAoKIyMgQ29tYmluZSA3U0wgc3RhdHVzIGFuZCB0aGUgc2FtcGxlIHR5cGUgaW50byBvbmUgZmFjdG9yCgpgYGB7cn0Kc2FtcGxlXzdzbCA8LSBhcy5mYWN0b3IocGFzdGUwKGNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJzYW1wbGVfdHlwZSJdXSwgIl8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sRGF0YShodV9zZV9oaXNhdF9nZW5lKVtbImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiXV0pKQpzdW1tYXJ5KHNhbXBsZV83c2wpCmNvbERhdGEoaHVfc2VfaGlzYXRfZ2VuZSlbWyJzYW1wbGVfN3NsIl1dIDwtIHNhbXBsZV83c2wKY29sRGF0YShodV9zZV9zYWxtb24pW1sic2FtcGxlXzdzbCJdXSA8LSBzYW1wbGVfN3NsCgp0YWJsZShjb2xEYXRhKGh1X3NlX2hpc2F0X2dlbmUpW1sic2FtcGxlXzdzbCJdXSkKYGBgCgojIyBTZXBhcmF0ZSB0aGUgbVJOQSBzYW1wbGVzIGZyb20gcmliby16ZXJvCgpOb3RlLCB3aGVuIHdlIGFyZSBmaW5pc2hlZCwgd2Ugd2lsbCBiZSB1c2luZyBvbmx5IHRoZSBtUk5BIHNhbXBsZXMgYW5kCmlnbm9yaW5nIHRoZSByaWJvLXplcm8uICBCdXQgdGhlcmUgYXJlIHNvbWUgcXVlc3Rpb25zIGFib3V0IHRoZSBkYXRhCnByb3ZpZGVkIGJ5IHRoZSB0d28gbGlicmFyaWVzLgoKYGBge3J9Cmh1X3NlX3NhbG1vbl9tcm5hIDwtIHNldF9jb25kaXRpb25zKGh1X3NlX3NhbG1vbiwgZmFjdCA9ICJzYW1wbGVfdHlwZSIpICU+JQogIHN1YnNldF9zZShzdWJzZXQgPSAibGlicmFyeV90eXBlPT0nbVJOQSciKSAlPiUKICBzZXRfYmF0Y2hlcygiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpCgpodV9zZV9zYWxtb25fcnogPC0gc2V0X2NvbmRpdGlvbnMoaHVfc2Vfc2FsbW9uLCBmYWN0ID0gInNhbXBsZV90eXBlIikgJT4lCiAgc3Vic2V0X3NlKHN1YnNldCA9ICJsaWJyYXJ5X3R5cGU9PSdSWiciKSAlPiUKICBzZXRfYmF0Y2hlcygiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpCgpodV9zZV9oaXNhdF9nZW5lX21ybmEgPC0gc2V0X2NvbmRpdGlvbnMoaHVfc2VfaGlzYXRfZ2VuZSwgZmFjdCA9ICJzYW1wbGVfdHlwZSIpICU+JQogIHN1YnNldF9zZShzdWJzZXQgPSAibGlicmFyeV90eXBlPT0nbVJOQSciKSAlPiUKICBzZXRfYmF0Y2hlcygiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpCgpodV9zZV9oaXNhdF9nZW5lX3J6IDwtIHNldF9jb25kaXRpb25zKGh1X3NlX2hpc2F0X2dlbmUsIGZhY3QgPSAic2FtcGxlX3R5cGUiKSAlPiUKICBzdWJzZXRfc2Uoc3Vic2V0ID0gImxpYnJhcnlfdHlwZT09J1JaJyIpICU+JQogIHNldF9iYXRjaGVzKCJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikKYGBgCgojIyBFeHRyYWN0IG9ubHkgdGhlIGhlYWx0aHkgb2Ygc2NhciBzYW1wbGVzLCBvbmx5IG1STkEKCmBgYHtyfQpodV9oc19zYWxtb25fbXJuYSA8LSBzdWJzZXRfc2UoaHVfc2Vfc2FsbW9uLCBzdWJzZXQgPSAiaHM9PSdoZWFsdGh5J3xocz09J3NjYXInIikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJocyIpCgpodV9oc19oaXNhdF9tcm5hIDwtIHN1YnNldF9zZShodV9zZV9oaXNhdF9nZW5lX21ybmEsIHN1YnNldCA9ICJocz09J2hlYWx0aHknfGhzPT0nc2NhciciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImhzIikKYGBgCgojIEhVIE1ldGFkYXRhCgojIyBQZXJjZW50IG9mIHJlYWRzIG1hcHBlZCB0byB0aGUgZ2Vub21lIGJ5IGhpc2F0CgpgYGB7cn0KaHVfbWFwcGVkX21ybmEgPC0gcGxvdF9tZXRhZGF0YV9mYWN0b3JzKGh1X3NlX2hpc2F0X2dlbmVfbXJuYSwgY29sdW1uID0gImhpc2F0X2dlbm9tZV9wZXJjZW50X2xvZ19oZzM4XzExNSIpCmh1X21hcHBlZF9tcm5hCgpodV9tYXBwZWRfcnogPC0gcGxvdF9tZXRhZGF0YV9mYWN0b3JzKGh1X3NlX2hpc2F0X2dlbmVfcnosIGNvbHVtbiA9ICJoaXNhdF9nZW5vbWVfcGVyY2VudF9sb2dfaGczOF8xMTUiKQpodV9tYXBwZWRfcnoKYGBgCgojIyBOdW1iZXIgb2YgZ2VuZSBvYnNlcnZlZCBieSBzYWxtb24KCmBgYHtyfQpodV9vYnNlcnZlZF9tcm5hIDwtIHBsb3RfbWV0YWRhdGFfZmFjdG9ycyhodV9zZV9oaXNhdF9nZW5lX21ybmEsIGNvbHVtbiA9ICJzYWxtb25fb2JzZXJ2ZWRfZ2VuZXNfaGczOF8xMTUiKQpodV9vYnNlcnZlZF9tcm5hCgpodV9vYnNlcnZlZF9yeiA8LSBwbG90X21ldGFkYXRhX2ZhY3RvcnMoaHVfc2VfaGlzYXRfZ2VuZV9yeiwgY29sdW1uID0gInNhbG1vbl9vYnNlcnZlZF9nZW5lc19oZzM4XzExNSIpCmh1X29ic2VydmVkX3J6CmBgYAoKIyMgUGVyY2VudCByZWFkcyBxdWFudGlmaWVkIHRvIHRoZSBodW1hbiB0cmFuc2NyaXB0b21lIGJ5IHNhbG1vbgoKYGBge3J9Cmh1X3BjdF9tcm5hIDwtIHBsb3RfbWV0YWRhdGFfZmFjdG9ycyhodV9zZV9zYWxtb25fbXJuYSwgY29sdW1uID0gInNhbG1vbl9wZXJjZW50X2hnMzhfMTE1IikKaHVfcGN0X21ybmEKCmh1X3BjdF9yeiA8LSBwbG90X21ldGFkYXRhX2ZhY3RvcnMoaHVfc2Vfc2FsbW9uX3J6LCBjb2x1bW4gPSAic2FsbW9uX3BlcmNlbnRfaGczOF8xMTUiKQpodV9wY3RfcnoKYGBgCgojIyBOdW1iZXIgb2Yga3Jha2VuIGlkZW50aWZpZWQgYmFjdGVyaWFsIHJlYWRzCgpXaGlsZSBhdCB0aGlzLCBhZGQgYSBjb2x1bW4gZGl2aWRpbmcgdGhlIGtyYWtlbiBiYWN0ZXJpYWwgY2xhc3NpZmllZApyZWFkcyBmcm9tIHRoZSB0b3RhbCByZWFkcy4KCmBgYHtyfQpodV9rcmFrZW5fbXJuYSA8LSBwbG90X21ldGFkYXRhX2ZhY3RvcnMoaHVfc2Vfc2FsbW9uX21ybmEsIGNvbHVtbiA9ICJrcmFrZW5fYmFjdGVyaWFsX2NsYXNzaWZpZWQiKQpodV9rcmFrZW5fbXJuYQoKaHVfa3Jha2VuX3J6IDwtIHBsb3RfbWV0YWRhdGFfZmFjdG9ycyhodV9zZV9zYWxtb25fcnosIGNvbHVtbiA9ICJrcmFrZW5fYmFjdGVyaWFsX2NsYXNzaWZpZWQiKQpodV9rcmFrZW5fcnoKCmNvbERhdGEoaHVfc2Vfc2FsbW9uX21ybmEpW1sicGN0X2tyYWtlbl9iYWN0ZXJpYWwiXV0gPC0gY29sRGF0YShodV9zZV9zYWxtb25fbXJuYSlbWyJrcmFrZW5fYmFjdGVyaWFsX2NsYXNzaWZpZWQiXV0gLyBjb2xEYXRhKGh1X3NlX3NhbG1vbl9tcm5hKVtbInRyaW1vbWF0aWNfb3V0cHV0Il1dCmNvbERhdGEoaHVfc2Vfc2FsbW9uX3J6KVtbInBjdF9rcmFrZW5fYmFjdGVyaWFsIl1dIDwtIGNvbERhdGEoaHVfc2Vfc2FsbW9uX3J6KVtbImtyYWtlbl9iYWN0ZXJpYWxfY2xhc3NpZmllZCJdXSAvIGNvbERhdGEoaHVfc2Vfc2FsbW9uX3J6KVtbInRyaW1vbWF0aWNfb3V0cHV0Il1dCmh1X2tyYWtlbl9wY3RfbXJuYSA8LSBwbG90X21ldGFkYXRhX2ZhY3RvcnMoaHVfc2Vfc2FsbW9uX21ybmEsIGNvbHVtbiA9ICJwY3Rfa3Jha2VuX2JhY3RlcmlhbCIpCmh1X2tyYWtlbl9wY3RfbXJuYQoKaHVfa3Jha2VuX3BjdF9yeiA8LSBwbG90X21ldGFkYXRhX2ZhY3RvcnMoaHVfc2Vfc2FsbW9uX3J6LCBjb2x1bW4gPSAicGN0X2tyYWtlbl9iYWN0ZXJpYWwiKQpodV9rcmFrZW5fcGN0X3J6CmBgYAoKIyMgU2Fua2V5IG9mIGEgZmV3IGZhY3RvcnMKCmBgYHtyfQpodV9zYW5rZXkgPC0gcGxvdF9tZXRhX3NhbmtleShodV9zZV9zYWxtb24sIGZhY3RvcnMgPSBjKCJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIiwgInNhbXBsZV90eXBlIiwgImxpYnJhcnlfdHlwZSIpKQpodV9zYW5rZXkKYGBgCgojIFdyaXRlIG91dCB0aGUgbWV0YWRhdGEgaW4gaXRzIGN1cnJlbnQgc3RhdGUKCmBgYHtyfQp3cml0ZV94bHN4KGRhdGEgPSBtb2RpZmllZF9tZXRhLCBleGNlbCA9ICJzYW1wbGVfc2hlZXRzL2h1bWFuX3NhbXBsZXNfMjAyNTExX3dpdGhfbmFzYWxfZmFjdG9yLnhsc3giKQpgYGAKCiMgbm9uemVyby9saWJzaXplL2V0YwoKYGBge3J9CnBsb3RfbGVnZW5kKGh1X3NlX3NhbG1vbikKcGxvdF9saWJzaXplKGh1X3NlX3NhbG1vbikKcGxvdF9ub256ZXJvKGh1X3NlX3NhbG1vbiwgeV9pbnRlcmNlcHQgPSAwLjc1KQoKcGxvdF9saWJzaXplKGh1X3NlX2hpc2F0X2dlbmUpCnBsb3Rfbm9uemVybyhodV9zZV9oaXNhdF9nZW5lKQoKcGxvdF9saWJzaXplKGh1X3NlX2hpc2F0X2dlbmVfbXJuYSkKcGxvdF9saWJzaXplKGh1X3NlX2hpc2F0X2dlbmVfcnopCmBgYAoKIyBOb3JtYWxpemUKCkEgY291cGxlIHBsb3RzIG9mIGFsbCB0aGUgc2FsbW9uIHNhbXBsZXMgY29sb3JlZCBieSBzYW1wbGUgdHlwZS4KCmBgYHtyfQpodV9zZXNuIDwtIG5vcm1hbGl6ZShodV9zZV9zYWxtb24sIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLAogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBUUlVFLCBub3JtID0gInF1YW50IikKcGxvdF9jb3JoZWF0KGh1X3Nlc24pCmh1X3Nlc25fcGNhIDwtIHBsb3RfcGNhKGh1X3Nlc24pCgpwcChmaWxlID0gImltYWdlcy9odV9wY2Ffc2FtcGxldHlwZS5wbmciKQpodV9zZXNuX3BjYSRwbG90CmRldi5vZmYoKQpodV9zZXNuX3BjYQpgYGAKCiMjIFJlbW92ZSBzYW1wbGVzIHdpdGhvdXQgN1NMIGRldGVjdGlvbiBzdGF0ZQoKV2hpbGUgd2UgYXJlIGF0IGl0LCBjb2xvciBieSB0aGUgN1NMIGRldGVjdGlvbiBhbmQgc2hhcGUgYnkgc2FtcGxlCnR5cGUgKFJ6L21STkEpLgoKYGBge3J9Cmh1X2RldGVjdGVkIDwtIHN1YnNldF9zZShodV9zZV9zYWxtb24sIHN1YnNldCA9ICJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIT0ndW5rbm93biciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiKSAlPiUKICBzZXRfYmF0Y2hlcygic2FtcGxlX3R5cGUiKQpodV9kZXRlY3RfbmIgPC0gbm9ybWFsaXplKGh1X2RldGVjdGVkLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBUUlVFLCBiYXRjaCA9ICJzdmFzZXEiKQoKaHVfZGV0ZWN0X3BjYSA8LSBwbG90X3BjYShodV9kZXRlY3RfbmIpCnBwKGZpbGUgPSAiaW1hZ2VzL2h1X3BjYV9kZXRlY3Rfc3ZhLnBuZyIpCmh1X2RldGVjdF9wY2EkcGxvdApkZXYub2ZmKCkKaHVfZGV0ZWN0X3BjYQpgYGAKCiMgQ29tcGFyZSBkaXN0cmlidXRpb24gb2YgUlovU3RyYW5kZWQgbGlicmFyaWVzCgpNYXJpYSBBZGVsYWlkYSBpcyBpbnRlcmVzdGVkIGluIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHJlbGF0aXZlbHkgZmV3CnJ6IHNhbXBsZXMgdnMgdGhlIHJlbGF0aXZlbHkgbGFyZ2UgbnVtYmVyIG9mIHN0cmFuZGVkIG1STkEgbGlicmFyaWVzLgoKSSB0aGluayBpdCBpcyBsaWtlbHkgdGhhdCB0aGUgbmFzYWwgc2FtcGxlcyBhcmUgb2YgcHJpbWFyeSBpbnRlcmVzdC4KCiMjIFNhbG1vbiB0eCBxdWFudGlmaWNhdGlvbnMKCmBgYHtyfQpzYWxtb25fbXJuYV83c2wgPC0gc2V0X2NvbmRpdGlvbnMoaHVfc2Vfc2FsbW9uX21ybmEsIGZhY3QgPSAiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpICU+JQogIHN1YnNldF9zZShzdWJzZXQgPSAiY29uZGl0aW9uIT0nbm90YXBwbGljYWJsZSciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImRldGVjdGlvbl90eXBlIikgJT4lCiAgc2V0X2JhdGNoZXMoZmFjdCA9ICJzYW1wbGVfdHlwZSIpCnNhbG1vbl9tcm5hXzdzbF9ub3JtIDwtIG5vcm1hbGl6ZShzYWxtb25fbXJuYV83c2wsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCiMjIFRoaXMgc3RpbGwgY2x1c3RlcnMgcHJpbWFyaWx5IGJ5IHNhbXBsZSB0eXBlLCBhbmQgdGhlcmUgYXJlIHByZWNpb3VzIGZldyBwb3NpdGl2ZSBzYW1wbGVzLgpwbG90X3BjYShzYWxtb25fbXJuYV83c2xfbm9ybSkKCnNhbG1vbl9tcm5hXzdzbF9uYiA8LSBub3JtYWxpemUoc2FsbW9uX21ybmFfN3NsLCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3ZhIiwgdHJhbnNmb3JtID0gImxvZzIiKQpwbG90X3BjYShzYWxtb25fbXJuYV83c2xfbmIpCmBgYAoKIyMgSGlzYXQgZ2VuZXMsIG1STkEgc2FtcGxlcwoKYGBge3J9Cmhpc2F0X21ybmFfN3NsIDwtIHNldF9jb25kaXRpb25zKGh1X3NlX2hpc2F0X2dlbmVfbXJuYSwgZmFjdCA9ICJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikgJT4lCiAgc3Vic2V0X3NlKHN1YnNldCA9ICJjb25kaXRpb24hPSdub3RhcHBsaWNhYmxlJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiZGV0ZWN0aW9uX3R5cGUiKSAlPiUKICBzZXRfYmF0Y2hlcyhmYWN0ID0gInNhbXBsZV90eXBlIikKaGlzYXRfbXJuYV83c2xfbm9ybSA8LSBub3JtYWxpemUoaGlzYXRfbXJuYV83c2wsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCiMjIFRoaXMgc3RpbGwgY2x1c3RlcnMgcHJpbWFyaWx5IGJ5IHNhbXBsZSB0eXBlLCBhbmQgdGhlcmUgYXJlIHByZWNpb3VzIGZldyBwb3NpdGl2ZSBzYW1wbGVzLgpwbG90X3BjYShoaXNhdF9tcm5hXzdzbF9ub3JtKQoKaGlzYXRfbXJuYV83c2xfbmIgPC0gbm9ybWFsaXplKGhpc2F0X21ybmFfN3NsLCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3ZhIiwgdHJhbnNmb3JtID0gImxvZzIiKQpwbG90X3BjYShoaXNhdF9tcm5hXzdzbF9uYikKYGBgCgpgYGB7cn0Kc2FsbW9uX21ybmFfN3NsX2RlIDwtIGFsbF9wYWlyd2lzZShzYWxtb25fbXJuYV83c2wsIG1vZGVsX2ZzdHJpbmcgPSAifiAwICsgY29uZGl0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgZmlsdGVyID0gVFJVRSwgZm9yY2UgPSBUUlVFKQpzYWxtb25fbXJuYV83c2xfZGUKc2FsbW9uX21ybmFfN3NsX3RhYmxlIDwtIGNvbWJpbmVfZGVfdGFibGVzKHNhbG1vbl9tcm5hXzdzbF9kZSwgZXhjZWwgPSAiZXhjZWwvc2FsbW9uX21ybmFfN3NsX3RhYmxlLnhsc3giKQpzYWxtb25fbXJuYV83c2xfdGFibGUKYGBgCgojIyMgU2FsbW9uIG5hc2FsIHNhbXBsZXMsIG1STkEgbGlicmFyaWVzCgpOb3cgcmVzdHJpY3QgdG8ganVzdCB0aGUgbmFzYWwgc2FtcGxlcy4KCmBgYHtyfQpzYWxtb25fbmFzYWxfbXJuYSA8LSBzdWJzZXRfc2UoaHVfc2Vfc2FsbW9uX21ybmEsIHN1YnNldCA9ICJzYW1wbGVfdHlwZT09J25hc2FsIHN3YWInIikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikgJT4lCiAgc3Vic2V0X3NlKHN1YnNldCA9ICJjb25kaXRpb24hPSdub3RhcHBsaWNhYmxlJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiZGV0ZWN0aW9uX3R5cGUiKSAlPiUKICBzZXRfYmF0Y2hlcyhmYWN0ID0gInNhbXBsZV90eXBlIikKc2FsbW9uX25hc2FsX21ybmFfbm9ybSA8LSBub3JtYWxpemUoc2FsbW9uX25hc2FsX21ybmEsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2Eoc2FsbW9uX25hc2FsX21ybmFfbm9ybSkKCnNhbG1vbl9uYXNhbF9tcm5hX25iIDwtIG5vcm1hbGl6ZShzYWxtb25fbmFzYWxfbXJuYSwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3ZhIiwgdHJhbnNmb3JtID0gImxvZzIiKQpwbG90X3BjYShzYWxtb25fbmFzYWxfbXJuYV9uYikKYGBgCgpgYGB7cn0Kc2FsbW9uX25hc2FsX21ybmFfN3NsX2RlIDwtIGFsbF9wYWlyd2lzZShzYWxtb25fbmFzYWxfbXJuYSwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3N2cyA9ICJzdmFzZXEiLCBmaWx0ZXIgPSBUUlVFLCBmb3JjZSA9IFRSVUUpCnNhbG1vbl9uYXNhbF9tcm5hXzdzbF9kZQpzYWxtb25fbmFzYWxfbXJuYV83c2xfdGFibGUgPC0gY29tYmluZV9kZV90YWJsZXMoc2FsbW9uX25hc2FsX21ybmFfN3NsX2RlLCBleGNlbCA9ICJleGNlbC9zYWxtb25fbmFzYWxfbXJuYV83c2xfdGFibGUueGxzeCIpCnNhbG1vbl9uYXNhbF9tcm5hXzdzbF90YWJsZQpgYGAKCiMjIyBTYWxtb24gbmFzYWwgc2FtcGxlcywgbVJOQSBsaWJyYXJpZXMKCmBgYHtyfQpoaXNhdF9uYXNhbF9tcm5hIDwtIHN1YnNldF9zZShodV9zZV9oaXNhdF9nZW5lX21ybmEsIHN1YnNldCA9ICJzYW1wbGVfdHlwZT09J25hc2FsIHN3YWInIikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikgJT4lCiAgc3Vic2V0X3NlKHN1YnNldCA9ICJjb25kaXRpb24hPSdub3RhcHBsaWNhYmxlJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiZGV0ZWN0aW9uX3R5cGUiKSAlPiUKICBzZXRfYmF0Y2hlcyhmYWN0ID0gInNhbXBsZV90eXBlIikKaGlzYXRfbmFzYWxfbXJuYV9ub3JtIDwtIG5vcm1hbGl6ZShoaXNhdF9uYXNhbF9tcm5hLCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfcGNhKGhpc2F0X25hc2FsX21ybmFfbm9ybSkKCmhpc2F0X25hc2FsX21ybmFfbmIgPC0gbm9ybWFsaXplKGhpc2F0X25hc2FsX21ybmEsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YSIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2EoaGlzYXRfbmFzYWxfbXJuYV9uYikKYGBgCgojIyBSZXBlYXQgd2l0aCB0aGUgcmlibyB6ZXJvIHNhbXBsZXMKCiMjIyBTYWxtb24gN1NMIHNhbXBsZXMsIHJpYm96ZXJvCgpgYGB7cn0Kc2FsbW9uX3J6XzdzbCA8LSBzZXRfY29uZGl0aW9ucyhodV9zZV9zYWxtb25fcnosIGZhY3QgPSAiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpICU+JQogIHN1YnNldF9zZShzdWJzZXQgPSAiY29uZGl0aW9uIT0nbm90YXBwbGljYWJsZSciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImRldGVjdGlvbl90eXBlIikgJT4lCiAgc2V0X2JhdGNoZXMoZmFjdCA9ICJzYW1wbGVfdHlwZSIpCnNhbG1vbl9yel83c2xfbm9ybSA8LSBub3JtYWxpemUoc2FsbW9uX3J6XzdzbCwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCiMjIFRoaXMgc3RpbGwgY2x1c3RlcnMgcHJpbWFyaWx5IGJ5IHNhbXBsZSB0eXBlLCBhbmQgdGhlcmUgYXJlIHByZWNpb3VzIGZldyBwb3NpdGl2ZSBzYW1wbGVzLgpwbG90X3BjYShzYWxtb25fcnpfN3NsX25vcm0pCgpzYWxtb25fcnpfN3NsX25iIDwtIG5vcm1hbGl6ZShzYWxtb25fcnpfN3NsLCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YSIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2Eoc2FsbW9uX3J6XzdzbF9uYikKYGBgCgpgYGB7cn0Kc2FsbW9uX3J6XzdzbF9kZSA8LSBhbGxfcGFpcndpc2Uoc2FsbW9uX3J6XzdzbCwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgZmlsdGVyID0gVFJVRSwgZm9yY2UgPSBUUlVFKQpzYWxtb25fcnpfN3NsX2RlCnNhbG1vbl9yel83c2xfdGFibGUgPC0gY29tYmluZV9kZV90YWJsZXMoc2FsbW9uX3J6XzdzbF9kZSwgZXhjZWwgPSAiZXhjZWwvc2FsbW9uX3J6XzdzbF90YWJsZS54bHN4IikKc2FsbW9uX3J6XzdzbF90YWJsZQpgYGAKCiMjIyBIaXNhdCA3U0wgc2FtcGxlcywgcmlib3plcm8KCmBgYHtyfQpoaXNhdF9yel83c2wgPC0gc2V0X2NvbmRpdGlvbnMoaHVfc2VfaGlzYXRfZ2VuZV9yeiwgZmFjdCA9ICJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikgJT4lCiAgc3Vic2V0X3NlKHN1YnNldCA9ICJjb25kaXRpb24hPSdub3RhcHBsaWNhYmxlJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiZGV0ZWN0aW9uX3R5cGUiKSAlPiUKICBzZXRfYmF0Y2hlcyhmYWN0ID0gInNhbXBsZV90eXBlIikKaGlzYXRfcnpfN3NsX25vcm0gPC0gbm9ybWFsaXplKGhpc2F0X3J6XzdzbCwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIHRyYW5zZm9ybSA9ICJsb2cyIikKIyMgVGhpcyBzdGlsbCBjbHVzdGVycyBwcmltYXJpbHkgYnkgc2FtcGxlIHR5cGUsIGFuZCB0aGVyZSBhcmUgcHJlY2lvdXMgZmV3IHBvc2l0aXZlIHNhbXBsZXMuCnBsb3RfcGNhKGhpc2F0X3J6XzdzbF9ub3JtKQoKaGlzYXRfcnpfN3NsX25iIDwtIG5vcm1hbGl6ZShoaXNhdF9yel83c2wsIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCA9ICJzdmEiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfcGNhKGhpc2F0X3J6XzdzbF9uYikKYGBgCgpgYGB7cn0KaGlzYXRfcnpfN3NsX2RlIDwtIGFsbF9wYWlyd2lzZShoaXNhdF9yel83c2wsIG1vZGVsX2ZzdHJpbmcgPSAifiAwICsgY29uZGl0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfc3ZzID0gInN2YXNlcSIsIGZpbHRlciA9IFRSVUUpCmhpc2F0X3J6XzdzbF9kZQpoaXNhdF9yel83c2xfdGFibGUgPC0gY29tYmluZV9kZV90YWJsZXMoaGlzYXRfcnpfN3NsX2RlLCBleGNlbCA9ICJleGNlbC9oaXNhdF9yel83c2xfdGFibGUueGxzeCIpCmhpc2F0X3J6XzdzbF90YWJsZQpgYGAKCiMjIyBTYWxtb24gN1NMIG5hc2FsIHNhbXBsZXMsIHJpYm96ZXJvCgpOb3cgcmVzdHJpY3QgdG8ganVzdCB0aGUgbmFzYWwgc2FtcGxlcy4KCmBgYHtyfQpzYWxtb25fbmFzYWxfcnogPC0gc3Vic2V0X3NlKGh1X3NlX3NhbG1vbl9yeiwgc3Vic2V0ID0gInNhbXBsZV90eXBlPT0nbmFzYWwgc3dhYiciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gImRldGVjdGlvbnBhcmFzaXRlYnk3c2wiKSAlPiUKICBzdWJzZXRfc2Uoc3Vic2V0ID0gImNvbmRpdGlvbiE9J25vdGFwcGxpY2FibGUnIikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJkZXRlY3Rpb25fdHlwZSIpICU+JQogIHNldF9iYXRjaGVzKGZhY3QgPSAic2FtcGxlX3R5cGUiKQpzYWxtb25fbmFzYWxfcnpfbm9ybSA8LSBub3JtYWxpemUoc2FsbW9uX25hc2FsX3J6LCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSAicXVhbnQiLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfcGNhKHNhbG1vbl9uYXNhbF9yel9ub3JtKQoKc2FsbW9uX25hc2FsX3J6X25iIDwtIG5vcm1hbGl6ZShzYWxtb25fbmFzYWxfcnosIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YSIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2Eoc2FsbW9uX25hc2FsX3J6X25iKQpgYGAKCmBgYHtyfQpzYWxtb25fcnpfN3NsX25hc2FsX2RlIDwtIGFsbF9wYWlyd2lzZShzYWxtb25fbmFzYWxfcnosIG1vZGVsX2ZzdHJpbmcgPSAifiAwICsgY29uZGl0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfc3ZzID0gInN2YXNlcSIsIGZpbHRlciA9IFRSVUUsIGZvcmNlID0gVFJVRSkKc2FsbW9uX3J6XzdzbF9uYXNhbF9kZQpzYWxtb25fcnpfN3NsX25hc2FsX3RhYmxlIDwtIGNvbWJpbmVfZGVfdGFibGVzKAogIHNhbG1vbl9yel83c2xfbmFzYWxfZGUsIGV4Y2VsID0gImV4Y2VsL3NhbG1vbl9yel83c2xfbmFzYWxfdGFibGUueGxzeCIpCnNhbG1vbl9yel83c2xfbmFzYWxfdGFibGUKYGBgCgojIyMgSGlzYXQgN1NMIG5hc2FsIHNhbXBsZXMsIHJpYm96ZXJvCgpgYGB7cn0KaGlzYXRfbmFzYWxfcnogPC0gc3Vic2V0X3NlKGh1X3NlX2hpc2F0X2dlbmVfcnosIHN1YnNldCA9ICJzYW1wbGVfdHlwZT09J25hc2FsIHN3YWInIikgJT4lCiAgc2V0X2NvbmRpdGlvbnMoZmFjdCA9ICJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikgJT4lCiAgc3Vic2V0X3NlKHN1YnNldCA9ICJjb25kaXRpb24hPSdub3RhcHBsaWNhYmxlJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAiZGV0ZWN0aW9uX3R5cGUiKSAlPiUKICBzZXRfYmF0Y2hlcyhmYWN0ID0gInNhbXBsZV90eXBlIikKaGlzYXRfbmFzYWxfcnpfbm9ybSA8LSBub3JtYWxpemUoaGlzYXRfbmFzYWxfcnosIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9wY2EoaGlzYXRfbmFzYWxfcnpfbm9ybSkKCmhpc2F0X25hc2FsX3J6X25iIDwtIG5vcm1hbGl6ZShoaXNhdF9uYXNhbF9yeiwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3ZhIiwgdHJhbnNmb3JtID0gImxvZzIiKQpwbG90X3BjYShoaXNhdF9uYXNhbF9yel9uYikKYGBgCgpgYGB7cn0KaGlzYXRfcnpfN3NsX25hc2FsX2RlIDwtIGFsbF9wYWlyd2lzZShoaXNhdF9uYXNhbF9yeiwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgZmlsdGVyID0gVFJVRSwgZm9yY2UgPSBUUlVFKQpoaXNhdF9yel83c2xfbmFzYWxfZGUKaGlzYXRfcnpfN3NsX25hc2FsX3RhYmxlIDwtIGNvbWJpbmVfZGVfdGFibGVzKAogIGhpc2F0X3J6XzdzbF9uYXNhbF9kZSwgZXhjZWwgPSAiZXhjZWwvaGlzYXRfcnpfN3NsX25hc2FsX3RhYmxlLnhsc3giKQpoaXNhdF9yel83c2xfbmFzYWxfdGFibGUKYGBgCgojIExvb2sgYXQgc2FtcGxlIHR5cGUgYW5kIDdzbAoKU3RhcnQgb3V0IGJ5IHJlY2F0ZWdvcml6aW5nIGFsbCBzYW1wbGVzIGJ5IHRoZSBjb21iaW5hdGlvbiBvZiBzYW1wbGUKdHlwZSBhbmQgN1NMIHN0YXRlLiAgVGhlbiBvbmNlIGFnYWluIGV4dHJhY3QgdGhlIHJlbGF0aXZlbHkgc21hbGwKbnVtYmVyIG9mIG5hc2FsIHNhbXBsZXMuCgpGb3IgdGhlIG1vbWVudCwganVzdCBkbyB0aGlzIHdpdGggdGhlIHNhbG1vbiBxdWFudGlmaWNhdGlvbnMuCgojIyBBbGwgc2FtcGxlczogY29sb3IgYnkgKHNhbXBsZSB0eXBlICsgN1NMKQoKYGBge3J9Cmh1X3M3c2wgPC0gc2V0X2NvbmRpdGlvbnMoaHVfc2Vfc2FsbW9uX21ybmEsIGZhY3QgPSAic2FtcGxlXzdzbCIpCmh1X3M3c2xfbm9ybSA8LSBub3JtYWxpemUoaHVfczdzbCwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIGZpbHRlciA9IFRSVUUpCnBsb3RfcGNhKGh1X3M3c2xfbm9ybSkKYGBgCgojIyBFeHRyYWN0IHRoZSBuYXNhbCBzdWJzZXQKClRoZXJlIGlzIG5vdCBtdWNoIHRvIHdvcmsgd2l0aCBoZXJlLgoKYGBge3J9Cmh1X25hc2FsIDwtIHN1YnNldF9zZShodV9zN3NsLCBzdWJzZXQgPSAic2FtcGxlX3R5cGU9PSduYXNhbCBzd2FiJyIpCmh1X25hc2FsX25vcm0gPC0gbm9ybWFsaXplKGh1X25hc2FsLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIGZpbHRlciA9IFRSVUUpCnBsb3RfcGNhKGh1X25hc2FsX25vcm0pCgpodV9uYXNhbF9uYiA8LSBub3JtYWxpemUoaHVfbmFzYWwsIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLAogICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3Zhc2VxIiwgZmlsdGVyID0gVFJVRSkKbmFzYWxfcGNhIDwtIHBsb3RfcGNhKGh1X25hc2FsX25iKQpuYXNhbF9wY2EKcHAoZmlsZSA9ICJpbWFnZXMvbmFzYWxfc2FtcGxlX25wLnBuZyIpCm5hc2FsX3BjYSRwbG90CmRldi5vZmYoKQpgYGAKCiMjIEV4dHJhY3QgdGhlIGJsb29kIGNlbGxzIChub3QgUEJNQykKCmBgYHtyfQpodV93YmMgPC0gc3Vic2V0X3NlKGh1X3M3c2wsIHN1YnNldCA9ICJzYW1wbGVfdHlwZT09J1dCQ3MnIikKaHVfd2JjX25iIDwtIG5vcm1hbGl6ZShodV93YmMsIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLAogICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YXNlcSIsIGZpbHRlciA9IFRSVUUpCndiY19wY2EgPC0gcGxvdF9wY2EoaHVfd2JjX25iKQp3YmNfcGNhCnBwKGZpbGUgPSAiaW1hZ2VzL3diY19zYW1wbGVfbnAucG5nIikKd2JjX3BjYSRwbG90CmRldi5vZmYoKQpgYGAKCiMjIFNraW4gc2FtcGxlcwoKYGBge3J9Cmh1X3NraW4gPC0gc3Vic2V0X3NlKGh1X3M3c2wsIHN1YnNldCA9ICJza2lucD09J3NraW4nIikKaHVfc2tpbl9uYiA8LSBub3JtYWxpemUoaHVfc2tpbiwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YXNlcSIsIGZpbHRlciA9IFRSVUUpCnNraW5fcGNhIDwtIHBsb3RfcGNhKGh1X3NraW5fbmIpCnNraW5fcGNhCnBwKGZpbGUgPSAiaW1hZ2VzL3NraW5fc2FtcGxlX25wLnBuZyIpCnNraW5fcGNhJHBsb3QKZGV2Lm9mZigpCmBgYAoKYGBge3J9CnNob3J0X2ZhY3RvciA8LSBnc3ViKHggPSBhcy5jaGFyYWN0ZXIoY29sRGF0YShodV9uYXNhbClbWyJjb25kaXRpb24iXV0pLAogICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIi4qXyguKikkIiwgcmVwbGFjZW1lbnQgPSAiXFwxIikKaHVfbmFzYWwgPC0gc2V0X2NvbmRpdGlvbnMoaHVfbmFzYWwsIGZhY3QgPSBhcy5mYWN0b3Ioc2hvcnRfZmFjdG9yKSkKaHVfbmFzYWxfbnAgPC0gc3Vic2V0X3NlKGh1X25hc2FsLCBzdWJzZXQgPSAiY29uZGl0aW9uIT0nbm90YXBwbGljYWJsZSciKQoKaHVfbmFzYWxfZGUgPC0gYWxsX3BhaXJ3aXNlKGh1X25hc2FsX25wLCBmaWx0ZXIgPSBUUlVFLCBmb3JjZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9mc3RyaW5nID0gIn4gMCArIGNvbmRpdGlvbiIsIG1vZGVsX3N2cyA9ICJzdmFzZXEiKQpodV9uYXNhbF9kZQoKaHVfbmFzYWxfdGFibGUgPC0gY29tYmluZV9kZV90YWJsZXMoaHVfbmFzYWxfZGUsIGV4Y2VsID0gImV4Y2VsL3BlcnNpc3RfdGFibGUueGxzeCIpCmh1X25hc2FsX3RhYmxlCgpodV9uYXNhbF9zaWcgPC0gZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcyhodV9uYXNhbF90YWJsZSwgZXhjZWwgPSAiZXhjZWwvcGVyc2lzdF9zaWcueGxzeCIpCmh1X25hc2FsX3NpZwpgYGAKCiMgSGVhbHRoeSB2cyBTY2FyIHNhbXBsZXMKCk9uZSBxdWVyeSBmcm9tIG91ciBsYXN0IG1lZXRpbmcgd2hpY2ggSSBmb3Jnb3QgYWJvdXQgdW50aWwgSSByZXJlYWQgbXkKVE9ETyBub3RlczogY29tcGFyZSB0aGUgc2FtcGxlcyBtYXJrZWQgYXMgaGVhbHRoeSBjb21wYXJlZCB0byB0aG9zZQptYXJrZWQgYXMgc2Nhci4gIFRoZXNlIGFyZSB0d28gZGlzdGFudGx5IHNlcGFyYXRlIHNraW4gYmlvcHNpZXMgb2YgdGhlCnNhbWUgcGVyc29uLgoKYGBge3J9Cmh1X2hzX2RlIDwtIGFsbF9wYWlyd2lzZShodV9oc19oaXNhdF9tcm5hLCBmaWx0ZXIgPSBUUlVFLCBmb3JjZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iKQpodV9oc190YWJsZSA8LSBjb21iaW5lX2RlX3RhYmxlcyhodV9oc19kZSwgZXhjZWwgPSAiZXhjZWwvaGVhbHRoeV92c19zY2FyX3RhYmxlLnhsc3giKQpodV9oc190YWJsZQpodV9oc19zaWcgPC0gZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcyhodV9oc190YWJsZSwgZXhjZWwgPSAiZXhjZWwvaGVhbHRoeV92c19zY2FyX3NpZy54bHN4IikKaHVfaHNfc2lnCmBgYAoKIyBUYWtlIGEgcGVlayBhdCB0aGUga3Jha2VuIHJlc3VsdHMKCmBgYHtyfQpodV9rcmFrZW5fdmlyYWwgPC0gY3JlYXRlX3NlKHByZV9tZXRhW1sibmV3X21ldGEiXV0sIGZpbGVfY29sdW1uID0gImtyYWtlbl9tYXRyaXhfdmlyYWwiLAogICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9uYSA9ICJ6ZXJvIikKaHVfa3Jha2VuX3ZpcmFsIDwtIHNldF9jb25kaXRpb25zKGh1X2tyYWtlbl92aXJhbCwgZmFjdCA9ICJzYW1wbGVfdHlwZSIpICU+JQogIHNldF9iYXRjaGVzKCJkZXRlY3Rpb25wYXJhc2l0ZWJ5N3NsIikKCmtyYWtlbl92aXJhbF9ub3JtIDwtIG5vcm1hbGl6ZShodV9rcmFrZW5fdmlyYWwsIGZpbHRlciA9IFRSVUUsIG5vcm0gPSAiY3BtIiwgdHJhbnNmb3JtID0gImxvZzIiKQpwbG90X2NvcmhlYXQoa3Jha2VuX3ZpcmFsX25vcm0pCnBsb3RfZGlzaGVhdChrcmFrZW5fdmlyYWxfbm9ybSkKcGxvdF9wY2Eoa3Jha2VuX3ZpcmFsX25vcm0pCgpuYXNhbF9rcmFrZW5fdmlyYWwgPC0gc3Vic2V0X3NlKGh1X2tyYWtlbl92aXJhbCwgc3Vic2V0ID0gImNvbmRpdGlvbj09J25hc2FsIHN3YWInIikKbmFzYWxfbm9ybSA8LSBub3JtYWxpemUobmFzYWxfa3Jha2VuX3ZpcmFsLCBmaWx0ZXIgPSBUUlVFLCBub3JtID0gImNwbSIsIHRyYW5zZm9ybSA9ICJsb2cyIikKcGxvdF9jb3JoZWF0KG5hc2FsX25vcm0pCgpodV9rcmFrZW5fYmFjdGVyaWEgPC0gY3JlYXRlX3NlKHByZV9tZXRhW1sibmV3X21ldGEiXV0sIGZpbGVfY29sdW1uID0gImtyYWtlbl9tYXRyaXhfYmFjdGVyaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfbmEgPSAiemVybyIpCmh1X2tyYWtlbl9iYWN0ZXJpYSA8LSBzZXRfY29uZGl0aW9ucyhodV9rcmFrZW5fYmFjdGVyaWEsIGZhY3QgPSAic2FtcGxlX3R5cGUiKSAlPiUKICBzZXRfYmF0Y2hlcygiZGV0ZWN0aW9ucGFyYXNpdGVieTdzbCIpCgprcmFrZW5fYmFjdGVyaWFfbm9ybSA8LSBub3JtYWxpemUoaHVfa3Jha2VuX2JhY3RlcmlhLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJjcG0iLCB0cmFuc2Zvcm0gPSAibG9nMiIpCnBsb3RfY29yaGVhdChrcmFrZW5fYmFjdGVyaWFfbm9ybSkKcGxvdF9kaXNoZWF0KGtyYWtlbl9iYWN0ZXJpYV9ub3JtKQpwbG90X3BjYShrcmFrZW5fYmFjdGVyaWFfbm9ybSkKYGBgCgojIE5hc2FsIGFzIGEgcHJveHkgZm9yIGV2ZXJ5dGhpbmcgZWxzZQoKSW4gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGRvY3VtZW50LCBJIGNyZWF0ZWQgYSBwZWN1bGlhciBmYWN0b3Igb3V0IG9mCnRoZSBuYXNhbCBzYW1wbGUgN1NMIHN0YXRlIGFuZCBhcHBsaWVkIGl0cyByZXN1bHQgdG8gZXZlcnkgb3RoZXIKc2FtcGxlIGZvciBlYWNoIHBlcnNvbjsgdGh1cyBhIHBlcnNvbiB3aG8gd2FzIHBvc2l0aXZlIGZvciB0aGUgbmFzYWwKc2FtcGxlIHdhcyBkZWVtZWQgcG9zaXRpdmUgZm9yIGV2ZXJ5dGhpbmcuICBMZXQgdXMgc2VlIHdoYXQgdGhhdCBsb29rcwpsaWtlLi4uCgpgYGB7cn0KbmFzYWxfN3NsX3NlIDwtIHNldF9jb25kaXRpb25zKGh1X3NlX3NhbG1vbiwgZmFjdCA9ICJuYXNhbF83c2xfc3RhdHVzIikKbmFzYWxfN3NsX2hpc2F0X3NlIDwtIHNldF9jb25kaXRpb25zKGh1X3NlX2hpc2F0X2dlbmVzLCBmYWN0ID0gIm5hc2FsXzdzbF9zdGF0dXMiKQoKbmFzYWxfN3NsX3NlX25iIDwtIG5vcm1hbGl6ZShuYXNhbF83c2xfc2UsIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gInN2YXNlcSIpCnBsb3RfcGNhKG5hc2FsXzdzbF9zZV9uYikKCm5hc2FsXzdzbF9kZSA8LSBhbGxfcGFpcndpc2UobmFzYWxfN3NsX3NlLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3N2cyA9ICJzdmFzZXEiLCBtb2RlbF9mc3RyaW5nID0gIn4gMCArIGNvbmRpdGlvbiIpCm5hc2FsXzdzbF9kZQpuYXNhbF83c2xfaGlzYXRfZGUgPC0gYWxsX3BhaXJ3aXNlKG5hc2FsXzdzbF9oaXNhdF9zZSwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iKQpuYXNhbF83c2xfaGlzYXRfZGUKCgpuYXNhbF83c2xfdGFibGUgPC0gY29tYmluZV9kZV90YWJsZXMobmFzYWxfN3NsX2RlLCBleGNlbCA9ICJleGNlbC9uYXNhbF83c2xfcHJveHlfdGFibGUueGxzeCIpCm5hc2FsXzdzbF90YWJsZQpuYXNhbF83c2xfaGlzYXRfdGFibGUgPC0gY29tYmluZV9kZV90YWJsZXMobmFzYWxfN3NsX2hpc2F0X2RlLCBleGNlbCA9ICJleGNlbC9uYXNhbF83c2xfcHJveHlfdGFibGUueGxzeCIpCm5hc2FsXzdzbF9oaXNhdF90YWJsZQpgYGAKCk9oLCBNYXJpYSBBZGVsYWlkYSB3YXMgYWN0dWFsbHkgbG9va2luZyBvbmx5IGZvciB0aGUgUEJNQyBzYW1wbGVzLgoKYGBge3J9CnBibWNfbmFzYWxfN3NsX3NlIDwtIHN1YnNldF9zZShodV9zZV9zYWxtb24sIHN1YnNldCA9ICJjb25kaXRpb249PSdQQk1DcyciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gIm5hc2FsXzdzbF9zdGF0dXMiKQpwYm1jX25hc2FsXzdzbF9oaXNhdF9zZSA8LSBzdWJzZXRfc2UoaHVfc2VfaGlzYXRfZ2VuZSwgc3Vic2V0ID0gImNvbmRpdGlvbj09J1BCTUNzJyIpICU+JQogIHNldF9jb25kaXRpb25zKGZhY3QgPSAibmFzYWxfN3NsX3N0YXR1cyIpCgpwYm1jX25hc2FsX2hpc2F0X25vcm0gPC0gbm9ybWFsaXplKHBibWNfbmFzYWxfN3NsX2hpc2F0X3NlLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtID0gInF1YW50IiwgZmlsdGVyID0gVFJVRSkKcGxvdF9wY2EocGJtY19uYXNhbF9oaXNhdF9ub3JtKQoKcGJtY19uYXNhbF9oaXNhdF9uYiA8LSBub3JtYWxpemUocGJtY19uYXNhbF83c2xfaGlzYXRfc2UsIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCA9ICJzdmFzZXEiLCBmaWx0ZXIgPSAic2ltcGxlIikKcGxvdF9wY2EocGJtY19uYXNhbF9oaXNhdF9uYikKCnBibWNfbmFzYWxfN3NsX2RlIDwtIGFsbF9wYWlyd2lzZShwYm1jX25hc2FsXzdzbF9zZSwgZmlsdGVyID0gInNpbXBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9zdnMgPSAic3Zhc2VxIiwgbW9kZWxfZnN0cmluZyA9ICJ+IDAgKyBjb25kaXRpb24iKQpwYm1jX25hc2FsXzdzbF90YWJsZSA8LSBjb21iaW5lX2RlX3RhYmxlcyhwYm1jX25hc2FsXzdzbF9kZSwgZXhjZWwgPSAiZXhjZWwvcGJtY19uYXNhbF9wcm94eS54bHN4IikKYGBgCgojIFRPRE8gMjAyNTEyCgpSZXBlYXQgdGhpcyBuYXNhbCBwcm94eSB0ZXN0IHVzaW5nIGVhY2ggb2YgdGhlIG90aGVyIGNlbGwgdHlwZXMuCgpUaGUgZmFjdG9ycyBvZiBsaWtlbHkgaW50ZXJlc3QgYXJlOiAid2JjcyIgIm5hc2FsIHN3YWIiIGlkZWFsbHkgYm90aAoic2tpbiBiaW9wc3kgaGVhbHRoeSIgYW5kICJza2luIGJpb3BzeSBzY2FyIiBidXQgcGVyaGFwcyBvbmx5ICJza2luCmJpb3BzeSIuCgpgYGB7cn0Kd2JjX25hc2FsXzdzbF9zZSA8LSBzdWJzZXRfc2UoaHVfc2Vfc2FsbW9uLCBzdWJzZXQgPSAiY29uZGl0aW9uPT0nV0JDcyciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gIm5hc2FsXzdzbF9zdGF0dXMiKQp3YmNfbmFzYWxfN3NsX2hpc2F0X3NlIDwtIHN1YnNldF9zZShodV9zZV9oaXNhdF9nZW5lLCBzdWJzZXQgPSAiY29uZGl0aW9uPT0nV0JDcyciKSAlPiUKICBzZXRfY29uZGl0aW9ucyhmYWN0ID0gIm5hc2FsXzdzbF9zdGF0dXMiKQoKd2JjX25hc2FsX2hpc2F0X25vcm0gPC0gbm9ybWFsaXplKHdiY19uYXNhbF83c2xfaGlzYXRfc2UsIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gInNpbXBsZSIsIG5vcm0gPSAicXVhbnQiKQpwbG90X3BjYSh3YmNfbmFzYWxfaGlzYXRfbm9ybSkKd2JjX25hc2FsX2hpc2F0X25iIDwtIG5vcm1hbGl6ZSh3YmNfbmFzYWxfN3NsX2hpc2F0X3NlLCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICJzaW1wbGUiLCBiYXRjaCA9ICJzdmFzZXEiKQpwbG90X3BjYSh3YmNfbmFzYWxfaGlzYXRfbmIpCgp3YmNfbmFzYWxfN3NsX2RlIDwtIGFsbF9wYWlyd2lzZSh3YmNfbmFzYWxfN3NsX3NlLCBmaWx0ZXIgPSAic2ltcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3N2cyA9ICJzdmFzZXEiLCBtb2RlbF9mc3RyaW5nID0gIn4gMCArIGNvbmRpdGlvbiIpCndiY19uYXNhbF83c2xfdGFibGUgPC0gY29tYmluZV9kZV90YWJsZXMod2JjX25hc2FsXzdzbF9kZSwgZXhjZWwgPSAiZXhjZWwvd2JjX25hc2FsX3Byb3h5Lnhsc3giKQpgYGAKCiMgVXBsb2FkIGNvdW50IHRhYmxlcyBmb3IgTWFyaWFuYQoKYGBge3J9CnJlYWR5IDwtIHRhcl9tZXRhX2NvbHVtbihodV9zZV9oaXNhdF9nZW5lLCBjb2x1bW4gPSAiaGlzYXRfY291bnRfdGFibGVfaGczOF8xMTUiKQpyZWFkeSA8LSB0YXJfbWV0YV9jb2x1bW4oaHVfc2VfaGlzYXRfZ2VuZSwgY29sdW1uID0gInNhbG1vbl9jb3VudF90YWJsZV9oZzM4XzExNSIpCmBgYAo=